Этот же смысл ... с использованием формул: (Х есть) равно (Х равно Х), (Х нет) равно (Х не-равно Х) ... используется в программе расстановки ферзей на шахматной доске размерности=n, так чтобы они не были под боем.
Что вас смущает? Почему это не имеет смысла в математике?
Потому что False - это совокупность свойств: {False == False, False != False. ... Потому что это противоречие.
И дабы избежать этого, в математике (эквивалентность, лог. И) разнесли по разным таблицам. Действие их отличается ТОЛЬКО по отношению к false, т.е. когда (а=False, b=False) ...И когда нужно вытащить на свет (False != False) говорят о (лог. И): a&b. ... Всего-то!
Ещё раз: False == (False != False) . В чём конкретно вы видите противоречие?
Еще раз: чтобы было верно (False == False) ... необходимо, чтобы (False != False)
P.S. (False != False) - тоже, что (False == True) ....т.е. (False - это False), а также (False - это True)
P.S. Импликация (из лжи следует как ложь,так и истина) - тоже, что сказано мною, но несколько иначе. Об этом ее свойстве иногда говорят, что из противоречия следует что-угодно. ... Но без этого ее свойства не будет и самой импликации:)
Выражение в скобках (False != False) имеет значение False. Ну, из-за тех же причин, что и "конь это не-конь!", "один это не один", два это не два"... и т.д. Все подобные выражения имееют значение "Ложь". Вы видите в этом несуразность? По-видимому, нет, всё в порядке. Да?
Итак, выражение в скобках имеет значение False.
Теперь в выражении, которое вынесено у вас в заглавие темы, а именно: False == (False != False)
вместо выражения в скобках мы можем подставить значение этого выражения, которое мы вычислили, то сесть - False.
У нас получится: False == False
Что вас тут смущает? Где противоречие? Ложь эквивалентна Лжи (Ложь равна Ложь), т.е. выражение истинно, т.к. один эквивалентно одному; ноль эквивалентен нулю, конь - коню... ну, есть ещё примеры (:они идут за дополнительную плату:)
Откуда вы взяли, что предварительно надо знать такую глупость, а именно, что False - это не False ?
1) О, у же смущает!
2) Выразите False=...
3) Приведите пример на любом языке программирования
4) Обычно, когда приводят пример типа А==А, то это пример бестолковости. Нужен пример вида Y=F(Х), где в определяющей части не фигурирует определяемое, т.е. не масло=масло
5) Мой пример: False = (True != True). Ложь - это неравенство истины с истиной.
Когда вы говорите об Y=F(X), то надо понимать, что в данном вами контексте (в контексте булевой алгебры) функцией будет "==" или "!=" или "AND" или "OR" или ... - всего 16 возможных булевых операций.
Итак, в нашем конкретном случае мы рассматриваем операцию "!=" . Это функция двух аргументов Х1 и Х2 - слева и справа от операции. Запишим это так Y = (Х1 != X2)
Х1 и Х2 - булевы переменные, которые могут принимать одно из двух значений True или False.
В частном случае Х1 и Х2 могут иметь одно и то же значение, например, False. В таких случаях результатом булевой операции "!=" (антиэквивалениция или отрицание эквиваленции) будет False. То есть, когда аргументы имеют равные значения - результатом будет Ложь, а когда аргументы имеют разные значения - результатом будет Истина. Что вполне логично, т.к. эта операция АНТИэквиваленция. В булевой операции "==" (эквиваленция) результат будет обратный: если равны аргументы - Истина, а если не равны - Ложь.
Вы в своём главном примере (из заголовка) вместо переменных Х1 и Х2 сразу поставили некие константы (значения переменных). Первая константа FALSE, и вторая константа FALSE. Между ними операция антиэквиваленция, т.е. "!=". Результат - согласно правилам булевой алгебры - FALSE. То есть - конкретное значение. В булевой алгебре конкретное значение может принимать вид только из двух возможных констант: FALSE или TRUE.
И в довершении (в примере из заголовка) вы используете булеву операцию эквиваленция "==". Вы проверяете - а действительно ли константа FALSE эквивалентна константе FALSE. Результат - да, еквивалентна, то есть - истина.
Где пример на любом языке программирования, такой чтобы в определяющей части не фигурировало определяемое, если задача состоит в том, чтобы выразить false?
Проблема в том, что мне не хватает опыта выполнить ваше задание. Я не знаю что такое определяющая часть и определяемая. А также не понимаю что означает выразить false. Слова "пример" и "язык программирования" я думаю, что понимаю.
P.S. На всякий случай. Я хоть и на пенсии уже, но всё же 45 лет программистского стаже у меня есть. Я программировал на двух ассемблерах, а также на Фортране, Коболе, PL/1, Паскале, C и C++. И еще две небольших программы пришлось написать в машинных кодах.
Вот конкретный пример E = m*(c^2) ...то,что слева - определяемое; то, что справа - определяющее.
Так же записывают в толковых словарях. Например, по Ожегову: АБАЖУР, -а, м. Колпак для лампы, светильника. Зеленый а. 11 прил.абажурный, -ая, -ое. [ссылка]
Так же в программировании [ссылка на online C++]: false = (true != true), т.е. справо от равно нет определяемого термина, нет false
#include <iostream>
int main()
{
bool x;
x = (true != true);
std::cout << x; //вернет 0, т.е. False
}
Вот конкретный пример E = m*(c^2) ...то,что слева - определяемое; то, что справа - определяющее.
В программировании все "опредяляющие" и "определяемые" записываются при декларировании данных (int, bool, char,..). Возможно вы имеете в виду оператор присваивания какой либо переменной (например, E) находящейся слева от знака равенства (знака присваивания) того, что находится справа от этого знака (например, m*c^2 ).
В этом смысле ваше выражение false = (true != true) не совсем понятно, если под false и true вы имеете в виду булевы константы. Это всё равно что написать для арифметических констант оператор присваивания: 5 = 6-4. То есть, вы как бы претендуете на изменение константы 5. Отныне, мол, хочу, чтобы константа 5 стала 2 - хочу иметь две двойки в арифметике и ни одной пятёрки!
bool x;
x = (true != true);
Если true это константы, то выражение вполне нормальное. Выполняется логическая операция в скобках. У вас там в скобках две константы. Представим себе такую запись х = (а != в)
Тогда х получит значение "истина", если а не равно в, или значение "ложно", если а равно в.
В вашей записи значение а - истина, и значение в - истина (true != true). Следовательно х получит значение ложно.
Мне не понятно как вы интерпретируете знак "==" и знак "!=" .
Мне не понятно что означают у вас true и false. Это константы? Или это переменные, которые вы обозначили "для ясности" как true и false (ну, вместо а и в, или х1 и х2, или ...)?
Если это булевы константы, то они не преобразовываемые.
Мне не понятно как вы интерпретируете знак "==" и знак "!=" .
равно, не-равно
Так я же не знаю что такое "выразить false".
false == какой-то фрагмент кода.
P.S. x = (False != False) ... в переменную х записываем то, что возвращает (False != False). После этого можно сказать, что (False == False), а до этого (False != False). ... Имеем два равенства, отрицающих друг друга: (False == False), (False != False)
Вы думаете, что то, что стоит слева от "==" будет приравнено тому, что справа от этого знака? То есть, вы считаете, что тем самым вы ВЫРАЖАЕТЕ false ?
Это не так! Знак "==" означает сравнение двух булевых значений - значение слева сравнивается со значением справа. Чтобы сравнить используется булево правило: если слева и справа булевы значения одинаковы, то результат сравнения будет истина, а если разные - ложь.
Таким образом, у вас слева от "==" находится АРГУМЕНТ (один - левый - аргумент операции сравнения, а справа - второй аргумент, значение которого образуется после выполнения фрагмента кода).
Итак, остаётся невыясненным где спрятолось противоречие и что означает выразить false ?
можно сказать, что (False == False), а до этого (False != False).
В первом случае выражение имеет значение истина (false == false), а во втором случае выражение имеет значение ложь (false != false). Что тут не ясного?
по всем правилам математики: 0 != 1. А это уже является противоречием: (0 == 1), (0 != 1)
А когда операция сравнения стала тождественна равенству? Сравнение и приравнивание не одно и тоже. Мягко говоря. Нет никакого противоречия в сравнении чего угодно с иным чем-либо, как и с тем же самым. Про это и пытаются сказать вам.
А когда операция сравнения стала тождественна равенству?
В математике равно пишется как =, в программировании как == (по крайней мере в С++, Python). ... Соответственно, запись (False == True) читается как: (False равно True), что возвращает False
Еще раз :равно в математике (=) это тоже, что равно (==) на С++, Python.
Любой математик и программист вам об этом скажет. Если считаете иначе, обратитесь на форум программистов или математиков.
P.S. Да, и чтоб вы знали. Когда говорят о нестрогом неравенстве, то имеют ввиду еще больше, меньше. Здесь же (имеется ввиду, равно, не-равно) эти больше или равно, меньше или равно не рассматриваются.
Любой математик и программист вам об этом скажет. Если считаете иначе, обратитесь на форум программистов или математиков.
Как определяют оператор сравнения в С++ я вам ссылку привёл. Показать, что это тоже самое, что знак равенства(приравнивания) в математике (между переменными и числовыми выражениями, например), это ваша задача, а не моя. Тема ваша, вам и обосновывать..
Фил_вер (не проверено), 8 Февраль, 2018 - 12:17, ссылка
Соответственно, запись (False == True) читается как: (False равно True), что возвращает False
Запись (False == True) в данном случае читается так:
False равно ли True?
Ответ очевиден: НЕТ, не равно, поэтому результат False.
В развернутой программе это будет функция с условием "Если".
Если равно ("=="), то True, а если не равно, то False.
Чего вы тут голову себе заморочили?
Если Вы "==" понимаете как присвоение или как утверждение, то в первом случае программа сообщит об ошибке при использовании константы (False) слева, ибо константа не может изменяться и принимать другие значения, а во втором случае - это Ваша личная проблема, потому что всегда 0 != 1, и по-другому быть не может.
По-другому часто бывает в философии, философы часто отождествляют неотождествимое, например, мышление и бытие. А в программировании всегда 0 != 1, иначе программа откажется работать и заставит программиста подумать о своих ошибках.
Точно также будет и с философам, ибо бытие работает иначе, чем представляют себе философы, поэтому бытие заставит всех через страдания исправлять свои знания и свое мышление.
Фил_вер (не проверено), 8 Февраль, 2018 - 13:16, ссылка
Но z как в 1 пункте, так и во 2 пункте - одно и тоже.
Да, z - это одно и тоже, но программа будет печать в первом случае z, а во втором случае не z, а скрытую переменную, которую автоматически программа добавляет при выполнении функции "печать".
У Вас в программе есть еще функция "печать", а Вы как-то об этом скромно умалчиваете.
Фил_вер (не проверено), 8 Февраль, 2018 - 16:53, ссылка
Функция печать к логике не относится, она лишь визуализирует логику.
С какой стати печать тут к логике не относится? В одной "печати" показывается значение переменной z, а в другой "печати" показывается результат вычисления целой функции, в которой используется z в качестве АРГУМЕНТА функции, а не ЗНАЧЕНИЯ функции!
В одной печати показывается аргумент функции, а в другой печати показывается значение функции.
Фил_вер (не проверено), 8 Февраль, 2018 - 17:23, ссылка
Повторяю: не относится.
Да Вы хоть вспотейте повторять, но перед тем, как вывести значение функции на печать, функция должна быть просчитана, а результат вычисления должен быть куда-то записан. Можно записать и в z, но это уже будет ДРУГОЕ z, отличное от первого.
У Вас подлог во втором выражении, ибо в нем нет оператора присвоения значения функции какой-то переменной. Введите опереатор присвоения и увидите, что вторая печать показывает не первую z.
Какого черта Вы в одном выражении используете оператор присвоения значения переменной, а во втором нет?
Какого черта Вы в одном выражении используете оператор присвоения значения переменной, а во втором нет?
А на каком основании Х в формуле Х=5+2 записываем 7? На том, что 7=5+2 На том, что из 5+2 следует только 7 и ничто иное. Так равны ли (7 и 5+2)? Равны ли (7 и 7)? Равны.
Присвоение - вспомогательная конструкция. В математике ее нет.
первый print выводит на экран, что (False == True) т.е. выводит False
второй print выводит на экран, что (False == False) т.е. выводит True
Результат сравнения на равенство двух ОДИНАКОВЫХ констант даёт значение Истина. Это вас смущает? Вы считатете, что в этом есть противоречие? То есть, вы просите, чтобы компьютер ответил: равны ли две одинаковые константы (будь это константы числовые, логические, символьные, битовые и пр.). Для этого в компьютере (в языках программирования) предусмотрена специальная команда - сравнить на равенство (есть ещё, например, сравнить на неравенство, на больше/меньше и пр.).
Итак, главный вопрос остаётся у вас неотвеченным - какой ответ вы ожидаете от компьютера, заставляя его сравнить на равенство две ОДИНАКОВЫЕ константы? Он, падла, отвечает вам, что у него результат истина. А вы говорите, что это противоречие. Пусть так. Согласимся на минутку. Тогда получается, что если бы компьютер ответил вам, что две одинаковые константы... не равны между собой, то противоречия можно было бы избежать?
Противоречие в том, что False как равно False, так и не равно False: (False == False), (False != False)
Противоречие в том, что Максим как занял первое место, так и не занял первое место. Такого Максима (который занял разные места одновременно) не бывает
Противоречие в том, что принцесса как находится в первой комнате, так и не находится в первой комнате. Такой принцессы (которая находится в разных местах сразу) не существует.
Противоречие в том, что принцесса как находится в первой комнате, так и не находится в первой комнате. Такой принцессы (которая находится в разных местах сразу) не существует.
Это не противоречие! Это функтор такой противоречивый, ну не может он различить два состояния, хоть тресни:
1. Принцесса находится в первой комнате.
2. Принцесса находится во второй комнате.
А вот состояние "принцесса дома" (в одной из комнат) от состояния "принцесса где угодно кроме первой и второй комнаты" и даже "в обоих комнатах сразу" может!
Так и надо этому функтору "глаз набить" ( "Всё-таки надо [ему] дать коленом. Н-надо!").
Да, он не может этого сделать. Особенно, если у него об этом не спрашивать.
И чтобы два раза не бегать, сразу вам сообщаю, что этот функтор не может даже по-человечески стакан с водкой опрокинуть внутрь. Это противоречит всей сущности народа российского. А эти америкосы лезут со своими функторами! Жизни, бля, не знают!
Вы сейчас уверены, что говорите о булевых константах? Как можно ноль сравнивать с чем бы то ни было, если этот ноль даже потрогать не за что? Другое дело, когда компилятор всё знает, не даст ошибиться, ни шагу влево, ни шагу вправо. А без компилятора как быть?
Итак, главный вопрос остаётся у вас неотвеченным - какой ответ вы ожидаете от компьютера, заставляя его сравнить на равенство две ОДИНАКОВЫЕ константы?
Итак, главный вопрос остаётся у вас неотвеченным - какой ответ вы ожидаете от компьютера, заставляя его сравнить на равенство две ОДИНАКОВЫЕ константы?
Итак, вы согласились, что записывая свой вопрос к компьютеру о сравнении на равенство двух одинаковых констант, результат должен быть True, т.е. да - они равны.
Тогда само мобой разумеещимся следует считать, что когда вы спрашиваете о сравнении на НЕ равенство этих же двух одинаковых констант, результат должен быть False. Это как раз тот результат, который получается от действия, заключенного в скобки в вашем исходном выражении False == (False != False).
Совершенно логично вы рассуждаете, да результат действия (сравнение на не равенство двух одинаковых констант) в скобках - False.
Остаётся сравнить False c результатом полученным в скобках, т.е. False с False. Для этого вы и записали команду сравнения на равенство: False == False.
Но то, что сравнение на равенство двух одинаковых констант даёт True, вы с этим уже согласились (см.первое предложение данного сообщения). Да они равны - это истина.
Где в этих, по сути, ВАШИХ разъяснения закралось противоречие?
Где в этих, по сути, ВАШИХ разъяснения закралось противоречие?
(False != False) (False == False)
Можете к этим выводам прийти иначе. (Х != Х) - это формула. Эта формулы всегда ложна. Она является отрицанием тавтологии (Х == Х). Отрицание тавтологии - это противоречие.
Если это запись на языке программирования, то она означает: выполнить сравнение на неравенство двух одинаковых переменных. Можете называть это формулой или хуёвиной, но компьютер будет интерпретировать её (хуёвину) как команду сравнить на неравенство и выдать результат: истина или ложь.
Результат сравнение одинаковых величин вы интерпретируете правильно (см. сообщение выше по ветке). Совершенно очевидно, что такое сравнение на неравенство двх ОДИНАКОВЫХ величин даст ложь. А сравнение на равенство - истину.
Ещё раз. Последний. Вам уже все говорят об одном и том же. Вы неверно прочитываете (вслух или про себя) запись на языке программирования Х != Х. Вы прочитываете это как Икс не равно Икс. И таким неверным прочитыванием вы туманите себе мозги. Правильным будет такое чтение: Сравнить Икс с Икс на неравенство и выдать результат - истина или ложь.
апись на языке программирования Х != Х. Вы прочитываете это как Икс не равно Икс. И таким неверным прочитыванием вы туманите себе мозги. Правильным будет такое чтение: Сравнить Икс с Икс на неравенство и выдать результат - истина или ложь.
Это именно (Икс не-равно Икс) , что ложно.
Никаких дополнительных слов здесь не требуется.
P.S. Также как не требуется никаких дополнительных слов, читая: 2=3. Это формула. Она ложна. Поскольку 2=3 не тавтология, то это противоречие. Как и является противоречием формула 0=1, указанное Семихатовым.
То, что всегда ложь - то противоречие.
Бывают: всегда истинные формулы (тавтологии), выполнимые формулы (иногда истинные), всегда ложные формулы (отрицание тавтологии)
"Икс не равно Икс" - это утверждение, которое говорит, что икс не равно икс. А то что это утверждение ложно - это вы додумываете сами. Потому что вы ни хера не смогли бы додумать о ложности или истинности, если бы было записано: Икс не равно Игреку. Оно может быть и истинным и ложным в зависимости от текущих значений Икса и Игрека.
И у вас получается, что ОДНУ и ТУ ЖЕ конструкцию на языке программирования, а именно:
<операнд1> != <операнд2>
вы намереваетесь прочитывать по-разному - в зависимости от того, нравятся ли вам операнды или они не симпатичные. О, смотрите - попались на этот раз одинаковые операнды!!! Мы тогда эту запись прочтём Икс не равно Икс - противоречиво. А если второй операнд Y, то мы будем читать эту же конструкцию, как Икс надо проверить на неравентсво с Y. Но если перед произнесением этой фразы вам кто-то шепнёт на ухо, что, мол, Икс и Игрек равны (зуб на вылет даю), то вы опять с радостью произнесёте: Икс не равно Игрек - это противоречие, потому что мне тут один поц зуб на вылет давал, что они равны.
Фил_вер (не проверено), 8 Февраль, 2018 - 18:02, ссылка
Вы можете людям объяснить, в чем противоречие?
Потому что False - это совокупность свойств: False == False, ...Потому что это противоречие.
Это Вы зачем написали, если сами пишете тут:
print(False == False) возвращает True
Далее
(False == (False == True)) , что читается: ложь равно(ложь равно истина)
Как Вы это читаете - это Ваши личные проблемы, потому что Вы читаете неправильно. Здесь нет утверждения, что ложь равно (ложь равно истина). Здесь есть вопрос:
Истинно ли общее выражение, которое содержит в себе вложенный вопрос об истинности другого выражения.
Если читать по-вашему, то есть досконально буквально, то читать нужно так:
Скобка ложь равно равно скобка ложь равно равно истина скобка скобка.
Можете заменить тут слова на свое усмотрение и на свой вкус без всякого смысла, ибо в вашем прочтении смысла нет. Вы неправильно интерпретируете символы.
Скобка ложь равно равно скобка ложь равно равно истина скобка скобка.
ложь равно тому, что ложь равно истина
False == (False == True)
Или, что тоже: ложь равно тому, что ложь не равно ложь
False == (False != False)
def f(x, y):
z = (x != y)
print(z) #(False != False)
print(z == (x == y)) #(False == False)
#Причем, х y z - это одно и тоже, а не разное.
print({x, y, z}) #вернет {False}
f(False, False)
А вот тут у Вас хрень написана, ибо (z == (x == y)) #(False == True).
def f(x, y):
z = (x != y)
print(z) #(False != False)
print(z == (x == y)) #(False = False)
#Причем, х y z - это одно и тоже, а не разное.
print({x, y, z}) #вернет {False}
f(False, False)
Да, неправильно. Я с суток.
Правильно так
def f(x, y):
z = (x != y)
print(z) #(False != False)
print(z == (x != y)) #(False == False)
#Причем, х y z - это одно и тоже, а не разное.
print({x, y, z}) #вернет {False}
f(False, False)
Фил_вер (не проверено), 9 Февраль, 2018 - 10:59, ссылка
А в этом: (False == False), (False != False)
Какое противоречие может быть в вопросах?
У Вас в скобках стоят не утверждения, а вопросы для сравнения! Зачем Вы путаете вопрос с утверждением (присвоением)?
Вы постоянно тут пишете False == (False != False), и говорите, что нужно прежде, чем решить это выражение, нужно утверждать (сказать), что ложь не равно ложь, и вроде тут есть какое-то противоречие. Но сначала нужно не сказать, а решить выражение в скобках, которое читается как вопрос, а не как утверждение.
В вопросах не может быть противоречий, если там нет утверждений. Противоречивыми бывают только утверждения!
Если я напишу 3=2, то это будет противоречие, потому что здесь утверждается, что 3 будет равно 2. А если я напишу 3==2, то противоречия никакого нет, потому что тут не утверждение, а вопрос "равно ли три двум?" или по-другому "истинно ли, что 3=2?".
Вы нифига не понимаете суть операторов сравнения, если я напишу в программе 3 != 3, это не означает, что три не равно три, это означает вопрос, а не утверждение.
Если я напишу в программе 3>5, то это не означает, что три больше пяти.
Вы написали здесь, что False=0, но и это ерунда. False - это смысловая, а не цифровая константа, и многие программные среды выводят на печать именно False, а не ноль.
Есть три логики:
1. Смысловая.
2. Численная.
3. Цифровая.
Единица может означать смысл, команду, число и логику. В этом списке "смысл" означает связь с реальностью, то есть с ее законами. Не нужно мешать всё кучу. Все интерпретируется контекстом (смыслом программы).
Если программная среда несовершенна, то это не проблема Лжи и Истины, а проблема программистов. Если программисты что-то напортачили, то это их личная проблема. Калькуляторы тоже часто имеют глюки, как были глюки в Экселе. Винда тоже постоянно обновляется, выгребая баги.
Никакого противоречия Вы не показали, а лишь читаете неправильно код программы, подобно софизму (парадоксу) лжеца, или Вы просто умиляетесь программным глюкам.
Интерпретация "исключающего или" тоже у Вас неверно написана. Там стоит инверсия, а никакой инверсии исключающее или по смыслу не дает, это просто побочный эффект "исключающего или", а не смысл. Цифровая логика всегда должна даваться только в матрицах, а не в формулах.
Если использовать "исключающее или" как инверсию при второй единице, то на практике может получиться, что вместо того, чтобы выбрать из вариантов "1 или 0" получится выбирать из "1 или -1". И когда вы будете думать, что Вам возможно выдадут заплату или не выдадут, а получится так, что должны будете заплатить Вы, а не Вам.
Я прослушал популярную лекцию д.ф-м.н Семихатова. Там действительно в коротком отрывке после 15 мин. 50 сек., говоря об УРАВНЕНИИ(!!!) Максвелла он использует слово "противоречие" и для пояснения этого понятия (противоречие) говорит: ну, мол, это когда в результате получается, что-то типа, ноль равно единице.
Всё это НИКАКОГО ОТНОШЕНИЯ к вашему фрагменту FALSE == (FALSE != FALSE) НЕ ИМЕЕТ!!! Причём, не имеет по многим причинам. Например потому, что в программировании знаки "==" и "!=" это далеко НЕ ТО ЖЕ САМОЕ, что знак "=" в уравнениях математики. Ещё раз. Знаки "==" и "!=" - это операции сравнения, которые возвращают булево значение True или False. В разных языках по-разному осуществляется ВНУТРЕННЕЕ хранение булевых переменных: в одних языках в виде integer представлении нуля и единицы; в других - в виде ОДНО-битового нуля или единицы; в третьих - в виде char символов, т.е. букв T и F; в четвёртых - и т.д.
Тем не менее, практически во всех языках программирования смысл операции сравнения тот же самый - это выдача "на-гора" булевого значения "истина" или "ложь". Максвелл в своих векторно-дифференциальных уравнениях не оперировал булевыми выражениями и у него знак равенства означал то, что он означает в математических УРАВНЕНИЯХ.
Для простоты объяснения, в математике знак "=" означает УТВЕРЖДЕНИЕ равенства (которое, иногда, ещё надо доказать). В программировании знак "==" означает конкретную операцию сравнение двух аргументов - слева и справа от знака "==". Хотя это тоже не принципиально где именно расположены аргументы такой булевой операции. Например в записи Лукашевича (известный польский логик) сначала записывается сама операция, а за ней в скобках - два аргумента через запятую. Причём, есть языки программирования, в которых именно так записывается сравнение, типа: Сравн (A,B). То есть знака "=" или "==" - нет вообще.
Итак, в приведённом вами выражении FALSE == (FALSE != FALSE) путаница возникает в вашей голове из-за многозначности слова "равно" естественного языка (русского, например). Подставьте туда интерпретацию слова "равно" в смысле "все равны перед законом" и вы получите ещё один вихрь в голове, который затуманивает смысл операции "==" в программировании.
P.S Если сомневаетесь, что равенство в математике и равенство в программировании - это одно и тоже спросите хотя бы на форуме у математиков или программистов.
Из этой записи выходит, что конструкция "==" в языке программирования означает "есть". Вы это серьёзно? Потому что с таким же успехом вы можете утверждать, что она означает "кушать". Впрочем, хозяин - барин: "что захочу, то и буду воображать!"
Примечание: на "хозяин - барин" у меня никаких возражений нет. Свобода слова, бля!
Из этой записи выходит, что конструкция "==" в языке программирования означает "есть".
В обыденно речи вместо (равно) говорим (есть). Если же читать математикой, то ..
Ложь равна тому, что ложь не равна лжи.
P.S. Кроме того, она употребляется, когда говорят о каком-нибудь свойстве. Например, (белый снег - белый), что истинно по той причине, что белый(белый снег) == белый. Здесь используется предикативная запись P(x), означающая, что Х обладает свойством P.
И по вашему выходит, что на ПИТОНЕ и на С++ знак "==" означает... есть. Мне кажется, что тут уместнее сказать "пить". Причём, не в сокращённой форме, а в полной: "пить надо меньше!"
И по вашему выходит, что на ПИТОНЕ и на С++ знак "==" означает... есть. Мне кажется, что тут уместнее сказать "пить". Причём, не в сокращённой форме, а в полной: "пить надо меньше!"
связка, то же, что есть2 (в 1 знач.) (разговорное). Ложь и есть ложь. Друг он и есть друг. Так и есть (разговорное) - в самом деле, действительно так. Поезд опаздывает? - Так и есть!.
Воистину истинное хамство заключается в том, что на мою (сотую) просьбу объяснить что вы понимаете под КОНСТРУКЦИЕЙ "==" В ЯЗЫКЕ ПРОГРАММИРОВАНИЯ ПИТОН ИЛИ С++, вы приводите мне разъяснение из... словаря русского языка Ожегова. Хорошо, что не Даля или Брокгауза и Ефрона! Потому что если из Даля, то в приличном обществе (за преферансом) следует обычно - подсвечником по голове.
Итак, последний раз: является ли конструкция "==" в указанных языках программирования оператором сравнения? Или эта конструкция служит лишь для утверждения, типа А есть А ? Мол, знай и заруби себе на носу. Или как пел Высоцкий: выучи, вызубри, не забывай, и повторяй, как заклинанье...
Сто первый раз спрашиваю: что означает конструкция "==" в программирование на ПИТОН или С++ ? Что это за зверЪ такой?
В сто первый раз отвечаю:
"==" в программировании - это тоже, что "=" в математике.
True тоже, что 1:
True = 1 (в математике), True == 1 (в программировании)
P.S. Когда для С++ резервируется память под int, то это просто означает, что резервируется под число n-сложности. Для самого первого натурального числа, достаточно и одного бита. Т.е. вместо записи, например, (00000000001) можно зарезервировать только (1). И эти величины (00000000001) , (1) будут равны.
Поэтому python складывает: (е == e) + 4 + (y == u) + (r == r), возвращая число (6) поскольку (y == u) является false, т.е нулем.
Но вы ведь своими собственными руками ДВА РАЗА привели мне таблицу, где сказано, что "==" - это оператор (знак "==" находится в колонке, которая называется "оператор").
Значит так... медленно повторяйте за мной - по слогам: о-пе-ра-тор. Среди многих других операторов есть "==". Его можно назвать "сравнение на равенство". То есть - ОСУЩЕСТВЛЯЕТ ОПЕРАЦИЮ сравнения. Есть и обратный ему оператор "!=" - этот оператор сравнивает на неравенство. Есть арифметические операторы, например "+", "-", "*"... Они - эти операторы - осуществляют арифметическое сложение, вычитание, умножение...
У операторов есть, так называемые, операнды - то с чем именно производится сложение, вычитание... или сравнение на равенство, на неравенство, на больше или меньше...
Так вот, заканчивая ликбез, надо наконец усвоить, что аналогом таких программистских операторов в математике являются арифметические операции сложения, вычитания, умножения, возведение в степень и пр. Аналогом программистских операторов сравнения (на равенство или неравенство) в математике являются булевы операции. Они же являются аналогом программистских операторов AND, OR и т.д.
Итак, оператор (например "==") ВЫПОЛНЯЕТ ДЕЙСТВИЕ с операндами. В этом смысле математический знак равенства в элементарном выражении : 2+2=4 НЕ ЯВЛЯЕТСЯ оператором. Зато в этом выражении (2+2=4) именно знак "+" яваляется точным аналогом оператора в программировании (оператора сложения, который тоже имеет обозначение "+"). То есть, мы установили, что "==" - не аналогичен математическому "=", но аналогичен математическим операциям ("+", "-", или булевым). В то время как математический знак "=" в выражении 2+2=4 действительно означает то, что вы говорите , то есть он нечто утверждает , мол, то что слева равно тому, что справа или говоря на жаргоне (другими словами - кося под математика) можно сказать: А есть А или 2+2 есть 4. Здесь знак "=" НИКАКОЙ ОПЕРАЦИИ НЕ ВЫПОЛНЯЕТ!!! [В отличие от "==" в программировании.]
В то время как математический знак "=" в выражении 2+2=4 действительно означает то, что вы говорите , то есть он нечто утверждает , мол, то что слева равно тому, что справа или говоря на жаргоне (другими словами - кося под математика) можно сказать: А есть А или 2+2 есть 4. Здесь знак "=" НИКАКОЙ ОПЕРАЦИИ НЕ ВЫПОЛНЯЕТ!!! [В отличие от "==" в программировании.]
Математически 2+2=4 операция возвращает True (истинно). Истинно может быть возвращено только для случая, когда операнд-слева равно операнду-справа. Но такое может быть только по отношению к самому себе: только для Х=Х. Когда Х не-равен себе это означает, что такого Х не существует.
Из учебника Колмогорова (математическая логика): пустое множество, т.е множество в котором нет Х - это {Х | Х не-равно Х}. Соответственно, непустое множество - это множество {Х | Х равно Х}.
Итого (при любых подстановках вместо Х):
X=Х возвращает (в математике) True, Х==Х возвращает (в программировании) True, Х≠Х возвращает (в математике) False, Х!=Х возвращает (в программировании) False.
Вы не сможете записать как строчку кода математическое выражение X=X. С участием только X и оператора ==.. транслятор не поймёт вашего гениального творчества..
И что? То, что объявление функции резервирует точку входа для возвращения Х==Х, что в в математике в явном виде не делается, сути дела, т.е. логику не меняет: (X=X в математике) тоже, что (Х==Х в программировании). В конце концов, закон тождества Х=Х тоже в книжке по логике на какой-то странице пишется: аналог объявления функции.
объявление функции резервирует точку входа для возвращения Х==Х, что в в математике в явном виде не делается, сути дела, т.е. логику не меняет: (X=X в математике) тоже, что (Х==Х в программировании).
То есть без доп. операторов у вас не получится заменить знак = на "тот же самый" оператор сравнения ==. То что вы должны показать объявив их тождество. Вне дополнительных условий. Вот к X таких вопросов нет, переменная она и есть переменная.. Приведите запись равенства = через сравнение == согласно собственному утверждению, а не объясняйте какая логика позволяет вам противоречить самому себе.
Слава богу, что мы дошли до случая, когда ХОТЬ В ЧЁМ-ТО получили обоюдное согласие. Я имею в виду, что:
1) Вы согласны, не возражаете, что в программировании знак "==" - это оператор!!! [Согласно приведённой вами в качестве подтверждения таблицы. Причём, два раза, чтобы такие тупоголовые, как я - наконец зазубрили.]
2) Вы также не возражаете, что операторосуществляетоперацию над операндами. Оператор "==" имеет два операнда (слева и справа от знака "=="), которые, собственно, и сравниваются (не нами, а с помощью машинных команд).
3) Вы также не возражаете, что результатом сравнения в данном случае является булева конструкция True или False (причём, как говаривал тов.Аристотель: третьего не дано).
4) Вы снова-таки согласны, что аналогично оператору "==" в программировании есть оператор "!=", который работает точно так же с двумя операндами, но сравнивает их на неравенство.
Теперь делаем выводы из перечисленных 4-х пунктов нашего мирного соглашения, демонстрируя их на приведённом вами же (в заголовке) выражении: False == (False != False)
а) Рассматриваем выражениен в скобках (False != False). Слева от оператора "!=" стоит один операнд - булева константа; такая же константа стоит справа от оператора в качестве второго операнда. Оператор осуществляет операцию сравнения двух операндов. В данном случае операнды сравниваются на неравенство, т.к. оператор "!=". Совершенно естественно, что результатом сравнения на неравенство двух одинаковых констант будет Ложь, т.е. False. Действительно, любой человек (от пациента в дурдоме и до акад.Колмогорова, о присутствующих - ни слова) на вопрос: истиной или ложью является утверждение, что пять не равно пяти - ответит, что это ложь. Притом он - отвечающий - может даже удивиться (чего, мол, приеб...ся - легавый ты, что ли?)
б) Значиццца, вместо выражения в скобках мы можем подставить с большущим трудом вычисленный оператором "!=" результат, а именно False (cм.предыдущий пункт). Теперь наша конструкция упростилась: False == False . Осталось только выполнить оператор "==" над двумя операндами, которые являются булевыми константами. Слева и справа от оператора расположены одинаковые константы. Естественно, что результатом сравнения одинаковых констант на равенство, будет истина, т.е. True.
Отсюда не ясен ваш ключевой вопрос о противоречии. Где тут запрятано противоречие и в чём оно состоит? Другими словами, укажите хотя бы пункт 1), 2), 3), 4), а) или б), с которым вы не согласны, что вызывает у вас возражение. [Гражданина Колмогорова с его пустым множеством на стр.130 оставим пока в покое.]
Все верно. Согласен со всеми пунктами, включая буквенные: 1), 2), 3), 4), а) б)
И с Колмогоровым я тоже согласен. Поскольку ... (Х нет) == (Х != Х) ... и ... {X | X ≠ X} ... отображают тот же смысл: X нет, если Х не равен себе.
Хочу только добавить, что для этого не обязательно (для передачи смысла, что Х нет) использовать множество. ... (Х != Х) в программировании и (X ≠ X) в математике - одно и тоже.
Вы, когда вместо (False != False) подставляете False:
1) с одной стороны совершенно правы (и я так делаю в силу присваивания), получая (False == False), где выделенное жирным есть то, что возвращает неравенство (False != False)
2) но с другой стороны запись [False == (False != False)] в ее полном виде означает: ложь равна тому, что ложь не равна лжи. Эти два утверждения отрицают друг друга: (False == False), (False != False).
Ссылка1: Если сложное высказывание истинно для всех значений входящих в него переменных, то такое высказывание называется ТОЖДЕСТВЕННО ИСТИННЫМ или тавтологией ... Все математические, физические и др. законы являются тавтологиями
Комментарий к ссылке1: (False == False) - это пример тавтологии
Ссылка2: Тождественно-ложные формулы являются ложными при всех наборах истинностных значений входящих в них переменных. Тождественно-ложные формулы представляют собой отрицание тождественно-истинных формул и являются нарушением логических законов.
Комментарий к ссылке2: (False != False) - это пример отрицания тавтологии, т.е это (not (False == False) ). В более общем виде: формула (Х != Х) при каких угодно значениях вместо Х всегда ложна.
Итог: (False == False) всегда истинна, (False != False) всегда ложна.
Все верно. Согласен со всеми пунктами, включая буквенные: 1), 2), 3), 4), а) б)
. . .
Вы, когда вместо (False != False) подставляете False:
1) с одной стороны совершенно правы (и я так делаю в силу присваивания), получая (False == False), где выделенное жирным есть то, что возвращает неравенство (False != False)
Это мне напоминает анекдот почти 100-летней давности, когда мужику в деревне несколько дней объясняли устройство трактора, и когда под конец его спросили понял ли он, тот ответил, что всё понял, но осталось неясным куда всё-таки надо лошадей цеплять.
Итак, о противоречии. Оно заключается в том, что согласно закону Аристотеля, вы не можете одновременно соглашаться с моим объяснением и с представленным своим уточнением. Потому что одно противоречит другому.
Или вы согласны, что знаки "==" и "!=" в программировании есть операторы, которые выполняют операции сравнения на равенство и неравенство, или вы продолжаете считать, что это не сокращённые названия операторов сравнить, а знаки равенства и неравенства, тем более "...в силу присваивания". Знак присваивания во многих языках изображается как "=". Поэтому знак операции сравнения другой, а именно - "==". В языке Паскаль знак присваивания ":=", поэтому там знак сравнения - просто "=". В некоторых языках знак присваивания имеет вид "стрелки влево", т.е. указание на то, что переменной слева присваивается то, что находится справа.
В вашем выражении False == (False != False) нет никакого присваивания. Там есть лишь недоступные (в спрятанной рабочей области) результаты операций сравнения. Итоговый результат можно было бы сохранить, присвоив его какой-нибудь переменной, например, Х. Тогда запись с оператором присваивания была бы такой: Х = False == (False != False). В эту булеву переменную Х попал бы результат. В нашем случае - True.
Если сложное высказывание истинно для всех значений входящих в него переменных, то такое высказывание называется ТОЖДЕСТВЕННО ИСТИННЫМ или тавтологией ... Все математические, физические и др. законы являются тавтологиями
Комментарий к ссылке1: (False == False) - это пример тавтологии
Комментарий неверен. Потому что тавтология говорит об истинности логической конструкции, для всех значений ПЕРЕМЕННЫХ(!!!) входящих в неё. В вашем же изначальном выражении False == (False != False) нет ни одной переменной! Ваша конструкция состоит только из констант.
Когда вы пишите False == False, то главной причиной САМОзатуманивания мозгов является непроизвольная попытка прочтения этого выражения на естественном языке, а именно: False равно False. Но (в сотый раз) этот знак не есть "равно". Это выражение следует читать как: False сравнить на равенство с False.
Когда мы говорим "равно", то мы утверждаем (или допускаем), что то, что слева равно тому, что справа. Но в данном случае "==" мы не утверждаем, а СПРАШИВАЕМ - а ну-ка, ответь: равно или не равно!
Думаю, что именно в неправильном, но непроизвольном (подсознательном) ПРОЧТЕНИИ выражения False == (False != False) кроется дальнейшие неправильные выводы о каком-то противоречии. То есть, проблема, думаю, чисто психологическая. На вас давит схожесть знаков "==" и "=" в программировании и довольно-таки многозначных интерпретаций знака "=" в разных разделах математики.
Потому что тавтология говорит об истинности логической конструкции, для всех значений ПЕРЕМЕННЫХ(!!!) входящих в неё
Ну, так подставьте в формулу (X != X) или, что тоже в формулу (Х ≠ Х) эту False. При этом учтите, что количество элементов множества, которые будут подставлены в эту формулу, произвольно. Этим множеством может быть и множество, в котором только один элемент, например, False
Если сомневаетесь, то спросите у математиков/программистов:
1) формула в математике (Х = Х) - это тоже, что формула в программировании (Х == Х)?
2) формула в математике (Х ≠ Х) - это тоже, что формула в программировании (Х != Х)?
Вам ответят "да"
В вашем выражении False == (False != False) нет никакого присваивания
Есть. Вот это (False != False) вернет False. Возвращаемое значение означает операцию присвоения и для этого не обязательно (но можно) выделять переменную.
В математике (=) есть то, что при подстановке операнда-слева и операнда-справа, позволяет говорить об истинности или ложности всего высказывания.
Операнд - это атрибут оператора. Нет оператора - нет и операндов. Оператор же служит для выполнения неких операций. Причём, все эти термины из области кибернетики.
Таким образом вам сначала требуется доказать, что в математике знак "=" обозначает какую-нибудь операцию, а потом уже можно заняться поиском того, с чем именно выполняется эта операция (с операндами, аргументами, или с хером собачим).
Откуда вы взяли, что математический знак "=" есть операция?
Там сказано, что в математике этот знак пишется между двумя идентичными выражениями. И нет ни слова об операции. Больше того, именно для ПРОТИВОПОСТАВЛЕНИЯ математического и программистского в этой статье специально оговорено применение такого или похожего знака в ИНФОРОМАТИКЕ - именно как ОПЕРАЦИЯ сравнения.
Более точно математический знак "=" дан в английском варианте ЭТОЙ ЖЕ статьи: "Equals sign"
Определение гласит: The equals sign or equality sign (=) is a mathematical symbol used to indicate equality.
Что переводится на русский как: знак равенства (=) - это математический символ, используемый для ОБОЗНАЧЕНИЯ равенства.
Далее, в английском варианте, есть специальный подраздел об использовании этого символа в математике и в компьтерном деле. Именно, чтобы подчеркнуть разницу, чтоб люди не путались, и правильно УЧИТЫВАЛИ КОНТЕКСТ использования этого знака.
Впрочем, аналогичные "проблемы" могут встретиться и со знаком "+" : "Коммунизм - это советская власть плюс электрификация всей страны". Или вы будете настаивать, что здесь "плюс" - точный эквивалент математической операции сложения? Если да, то у вас выйдет, что электрификация - это коммунизм минус советская власть. Впрочем, с выражением False == (False != False) вы поступаете аналогично.
В математике операция (равно) трактуется и как присвоение, что соответствует (=) присвоению в программировании и как равенство двух термов, что соответствует (==) в программировании.
В математике операция (равно) трактуется и как присвоение, что соответствует (=) присвоению в программировании...
Оператор присваивание вообще впервые появился при разработке первых языков программирование. Широко начал использоваться с появлением Фортрана в 1954 г. Такого понятия в математике нет - см. Википедия, статья "Присваивание".
В математике операция (равно) трактуется и как присвоение, что соответствует (=) присвоению в программировании и как равенство двух термов, что соответствует (==) в программировании.
Но ведь вы же уже согласились, и сами привели таблицу, что в программировании "==" - это оператор, а не утверждение равенства. То есть прямо-противоположное - не утверждение, а вопрос - равны ли? И результат будет истина, если равны, и ложь, если не равны. К тому же, вы должны показать какой-нибудь нормальный источник, в котором фигурирует МАТЕМАТИЧЕСКИЙ знак "=" именно как оператор, который выполняет операцию сравнения на равенство.
Кроме того, вас не смущает, что один и тот же знак в математике ("=") трактуется И КАК присваивание, И КАК... непонятно что. Потому что терм это понятие не самой математики, а скорее - МЕТАматематики. Он служит для описания математической аксиоматики, которая нуждается в проверке на непротиворечивость при модификациях или добавлении аксиом.
А если нет равенства, то он всё равно утверждает равенство?
Я вам приводил скин на мат. логику Колмогорова, в котором он объясняет что выражение (терм-слева = терм-справа) возвращает либо истину, либо ложь.
Вот еще подтверждение моих слов (Т. Ю. Грацианова / ПРОГРАММИРОВАНИЕ в примерах и задачах МГУ-школе/ стр 9-10:
В математике знак равенства используется в двух случаях: когда надо проверить, равна ли правая часть левой (например, «если x = 0, то…»), когда надо подсчитать значение правой части и положить переменную в левой части равной этому значению (т. е. присвоить ей это значение). Чтобы избежать двойного толкования этого знака, будем в первом случае использовать знак равенства «=» и называть это действие сравнением, а во втором — знак присваивания «:=», а действие — присваиванием переменной нового значения.
В книге Грициановой явная опечатка. Книга полностью посвящена программированию (см. заглавие и весь контекст).
В приведённом вами абзаце ВСЁ СТАНОВИТСЯ на свои места, если замиенить одно только слово: "В математике" на "В программировании". Тогда становится ясным и знак ":=", которого в математике вообще не существует, но есть в языке Паскаль, где, кстати, операция сравнения задаётся одиночным знаком "=", в отличие от большинства других языков, в том числе и Питон, и С++.
У Колмогорова ничего не сказано о том, что знак "=" означает ВЫПОЛНЕНИЕ неких действий (операций).
Но всё же вы не ответили на мой вопрос, а ушли сразу в "несознанку".
Жаль, что в Википедии всё напутали. Причем, как в русской версии, так и в английской. Они не догадались спросить у настоящих математиков-программистов.
Ну, и под конец, поставьте последний штрих - сделайте это произведение окончательно гениальным. Ответьте всё-таки:
"==" - это оператор, а не утверждение равенства.
Это оператор утверждения равенства
А если нет равенства, то он (оператор) всё равно утверждит равенство?
Понял. Значит знак "==" в программировании УТВЕРЖДАЕТ РАВЕНСТВО. В том смыле, что иногда утверждает равенство, а иногда утверждает неравенство. Или короче - утверждает равенство в том смысле, что иногда утверждает, а иногда - нет.
Причём, наряду с этим знак "!=" УТВЕРЖДАЕТ НЕРАВЕНСТВО. Опять в том же смысле - иногда утверждает, а иногда - нет.
1) Если каждое Х есть, то не бывает, чтобы хотя бы одного Х не было.
2) Если хотя бы одного Х нет, то не бывает, чтобы каждое Х было.
3) Если каждого Х нет, то не бывает так, чтобы хотя бы одно Х было.
4) Если хотя бы одно Х есть, то не бывает так, чтобы каждого Х не было.
В Питоне я не бум-бум. Но всё же код мне кажется немного странным.
Ведь, если в языке существует тип данных set (множество), то очевидно на сам язык ложится ответственность за то, чтобы элементы множества были уникальными. Или я тогда не понимаю смысл типа данных set.
Но если это так (т.е. если это гарантируется языком), то странным выглядят циклы проверки.
Чтобы показать, что из двух множеств можно получить третье (по правилам: И, ИЛИ), используя только операции равно, не-равно (т.е. не используя эти И, ИЛИ). Что доказывает, что операции (равно, не-равно) являются базовыми для любых других лог. операций, включая операции со множествами.
Для множества, которое образуется в результате пересечения, делается так: берется первый элемент первого множества и проверяется на равно с каждым элементом из второго множества. Если этот первый элемент первого множества равен с каким-либо элементом второго множества, то добавляем его в результирующее множество. Аналогично поступаем с другими элементами первого множества.
Алгоритм мне был понятен и без этого объяснения. Тонкость же заключалась в том, насколько корректно язык Питон ведёт себя с математическим понятием множество. То есть, допускает ли он одинаковость элементов внутри множества? И что в языке предпринимается, если в загруженном множесте (т.е. с описанием set) есть два или более одинаковых элементов? Это и был мой вопрос.
Насколько я успел "одним глазом" уяснить, в языке что-то предусмотрено для решения этого вопроса: множество состоит из уникальных элементов.
Так вот, если это так, то ваш внутренний цикл, насколько я понимаю, ВСЕГДА сравнивает ВСЕ элементы второго множества с текущим элементом из первого. В этом-то и странность! Ведь если какой-нибудь элемент сравнился (и таким образом был занесён в результирующее множество), то надо ещё выполнить команду break, чтобы остановить внутренний цикл, т.к. второго такого же элемента не сыщите. То есть, дальнейший просмотр - это мартышкин труд. Это может быть огромное число лишних действий.
Мало того, не всё в порядке и с внешним циклом, т.к. если это множество с большим количеством элементов, и оно сопоставляется с небольшим множеством, то если количество найденных (сравнимых) элементов в какой-то момент уже достигло количество элементов во втором множестве, то ВСЕ дальнейшие проверки элементов первого множества становятся бессмысленными - надо выходить из цикла, потому что опять же получается мартышкин труд.
Представьте себе что это статистическая "избирательная система". И надо проверять входит ли данная группа избирателей в общее число избирателей... допустим, области (района, города и т.д.). Число элементов у таких множеств может быть сотни тысяч. Результаты в таком случае могут быть задержаны по времени так, что они уже никому не будут нужны.
ВСЕ дальнейшие проверки элементов первого множества становятся бессмысленными
Я и не старался сократить во времени алгоритм. Ваши замечания верны. ... Но, повторюсь, задача была показать логику, а не в оптимизировать скорость его выполнения.
Тогда зачем же вы взяли для пересечения именно множества (set)? Можно было пересекать обычные списки.
Но всё же на мой вопрос вы так и не ответили. А я не хочу умереть дураком ("родиться дураком не стыдно, стыдно умереть дураком"). Каким образом в языке Питон решается проблема одинаковости элементов в типе данных, которое называется "множество" (set) ? Когда, кто и как узнаёт, что в поступивших данных, которые описаны как множество, есть дупликаты элементов?
Спасибо за ответ. Вы своими ответами, таки, заставите меня на склоне лет выучить ещё один язык программирования. На этот раз - Питон. И тогда выражение "в гробу я видел ваш Питон" обретёт вполне логичный, и главное - полный, смысл. :)
Итак, что я вычитал о множествах в Питоне. Главная особенность именно заключается в том, что глупо моделировать работу с множествами при помощи циклов сравнения и т.д. Потому и введён в Питон такой тип данных как set. Элементы множества хранятся не в связанной (последовательной) области памяти, а особым специальным образом - таким, что основные операции с множествами будут делаться намного быстрее, чем перебор элементов "в лоб."
Поэтому всю прграмму, которая выполняет пересечение двух множеств путём перебора можно заменить на встроенный в язык Питон специальный оператор intersection с двумя операндами. И будет это выглядеть так:
В книге известного американского экономиста украинского происхождения Терещенко (50-60-е годы) есть поучительный пример на эту тему.
В одной слаборазвитой стране западная, так сказать, цивилизация решила наладить совремённую почтовую связь. Были установлены в отделениях связи специальные почтовые ящики для писем "Внутри", "В Европу", "В Америку"... Закуплены дорогие сортировочные машины - конвейерного типа, и т.д. Всё это хозяйство налаживалось несколько месяцев. Потом, как пишет Терещенко, наблюдали следующую картину: в конце дня приходил босой старик-туземец и сваливал всё отсортированное в один большой мешок и дальше всё шло по уже проверенному, отработанному алгоритму.
Это я к тому, что разработчики Питона - дураки - трудились над типом set напрасно.
P.S. Добавлю только, что в Pythone есть оператор is, который при проверке возвращает False для операндов, для которых верно ==, но они (как объекты) расположены в разных участках памяти.
Забыл дописать. Надо доказать не только то, что Х=Х в математике это то же, что Х==Х в Питоне, но ещё и то, что Х=Х в математике - это НЕ то же самое, что Х=Х в Питоне.
P.S. На всякий случай. Я настаиваю, что Х=Х в математике - это не то же самое, что Х==Х в Питоне и НЕ то же самое, что Х=Х в Питоне (или аналоичных языках программирования).
Вы выращиваете непризнанного гения. Помнится был персонаж, заявлявший что Абсолют должен содержать то, что он не может содержать, потому что он (по определению) должен содержать всё, а всё это даже то, что не может содержать Абсолют, потому что оно всё..железная "логика". К чему это я? Да, так вот задача подобного "гения" неявно свести дискуссию к обмену мнениями объявив, что никто не запрещает вам так думать .. против этого утверждения любые аргументы бессильны.Настаиваете? Он вам не запрещает..
В логике, если в отношении чего-то удается доказать, что оно как ложно, так и истинно, то это означает, что этого не существует.
Вот один из примеров. Так, если [в первой комнате находится принцесса], то [в первой комнате не находится принцесса]. .... Принцесса, находящаяся в первой комнате - это та же принцесса, не находящаяся в первой комнате. Следовательно, такой принцессы не бывает ... согласно (Х нет) == (Х != Х) == (Х == не-Х), где Х - "принцесса в первой комнате"
Предика́т (лат.praedicatum — заявленное, упомянутое, сказанное) — это утверждение, высказанное о субъекте. Субъектом высказывания называется то, о чём делается утверждение.
Предика́т (n-местный, или n-арный) — это функция с множеством значений {\displaystyle \{0,1\}} (или {ложь, истина})
Как же записать Х=Х в предикативной форме P(X)? Так: =(Х). И она возвращает True. Тогда записать Х≠Х можно записать ≠(Х), которая возвращает False. Эти формулы Х=Х, Х≠Х являются ничем иным, как (предикатом Х=Y), областью значений которых являются истина, ложь.
В примере с принцессой: Х=Х, Х≠Х. Следовательно, такого Х нет.
1.Табличка на 1-й комнате: "В этой комнате находится принцесса, а в другой комнате сидит тигр".
2. Табличка на 2-й комнате: "В одной из этих комнат находится принцесса; кроме того, в одной из этих комнат сидит тигр".
Вводим возможные условия для двух булевых переменных:
П (принцесса) не находится в 1-ой комнате (она во 2-й) – значение 0;
находится в 1-ой комнате (не во 2-й) – значение 1. Т (тигр) не находится в 1-ой комнате (он во 2-й) – значение 0;
находится в 1-ой комнате (не во 2-й) – значение 1.
Таким образом в принципе возможен любой из четырёх вариантов:
00 – П и Т не находятся в 1-ой комнате, т.е. они во 2-й комнате; 01 – П во 2-й комнате, а Т в 1-ой; 10 – П в 1-ой комнате, а Т во второй; 11 – П и Т находятся в 1-й комнате.
Согласно условию задачи табличка либо на 1-ой комнате истинная, либо – на 2-й (булево отношение «исключающее ИЛИ»).
Табличке на 1-й комнате с П и Т соответствует только вариант 10.
Табличке на 2-й комнате с П и Т может соответствовать любой из обусловленных вариантов, т.е.: 00, 01, 10, 11, то есть эта табличка не может быть ложна. Из чего следует, что ложна табличка на 1-й комнате. Значит вариант 10, который на ней написан - ложный.
Вывод: возможен любой из трёх вариантов: 00, 01 и 11.
Цитата: "Табличка на первой двери истинна. Тогда табличка на второй двери ложна. А так как табличка на второй двери утверждает, что в одной из комнат находится принцесса, то из её ложности следует, что принцессы там нет, что приходит в противоречие с истинностью первой таблички. Таким образом, мы, предположив, что табличка на первой двери истинна пришли к противоречию"
В приведённой вами цитате не упоминается тигр, который есть в условии задачи. Тот факт, что в данном случае тигр не играет роль, совсем не означает, что об этом можно умолчать. Наоборот - надо именно что доказать, что тигра можно не учитывать. Потому что при данных аргументах (принцессе и тигре) с учетом их состояния изложенных на табличках, может быть много аналогичных задач, где тигр вполне может играть роль в подаче решения..
Другими словами, предложенное решение, не учитывающее все заданные условия, не совсем корректно с точки зрения строгой логики.
Другими словами, предложенное решение, не учитывающее все заданные условия, не совсем корректно с точки зрения строгой логики.
На первой табл. сказано, что здесь принцесса, а тигр в не здесь. Поскольку было доказано, что принцесса в 2-комнате (если она в первой, то она же и во второй: чего быть не может), то первая табл. ложна. А поскольку ложна, то тигр не во второй, а в первой.
На первой табл. сказано, что здесь принцесса, а тигр в не здесь. Поскольку было доказано, что принцесса в 2-комнате (если она в первой, то она же и во второй: чего быть не может), то первая табл. ложна. А поскольку ложна, то тигр не во второй, а в первой.
Если вы всерьёз, то будем разбираться.
Из того, что 1-я табличка ложна, не обязательно следует, что она ложна из-за принцессы. Она может быть ложна из-за тигра. Другими словами, вариант, когда и принцесса и тигр находятся в 1-ой комнате (вариант 11 в моём доказательстве) как раз и не противоречит ложности 1-ой таблички.
Согласен с вами в том, что если соединить два высказывания (В этой комнате находится принцесса, в другой комнате сидит тигр) в одно, то действительно, ложь этого высказывания можно получить разными способами.
Однако, сказанное в этой задаче понимается обычно так, что каждому из этих высказываний (в этой комнате находится принцесса, в другой комнате сидит тигр) применяется либо верно к обоим, либо неверно опять же к обоим.
Но, повторюсь, трактовать можно и так, как делаете вы. В этом случае получаем, правда, множество решений. Обычно, это задачей не предполагается.
Согласен с вами в том, что если соединить два высказывания (В этой комнате находится принцесса, в другой комнате сидит тигр) в одно, то действительно, ложь этого высказывания можно получить разными способами.
Не могу избавиться от подсознательного чувства, что вы шутите. Альтернатива этому чувуству, к сожалению, это то, что вы специально издеваетесь.
Итак, на 1-й табличке написано: "В этой комнате находится принцесса, а в другой комнате сидит тигр". Согласно моему объяснению я это сложное высказывание разделил (а не соединил!) на два простых, каждое из которых может быть ложным или истинным. Это сделано в связи с тем, что в изначальном выражение имеется два субъекта (принцесса и тигр) и два предиката (комната, где сидит принцесса и комната, где сидит тигр).
И вот такое разделение сложного высказывания вы называете... соединением. Вопрос остаётся: вы шутите или потихоньку продолжаете издеваться, как и со знаком равенства в математике, которому вы приписываете функцию оператора?
Однако, сказанное в этой задаче понимается обычно так, что каждому из этих высказываний (в этой комнате находится принцесса, в другой комнате сидит тигр) применяется либо верно к обоим, либо неверно опять же к обоим.
Но похоже, что план по издевательству вы считаете недовыполненным. Для этого достаточно поглядеть на ваш метод доказательства, где не только НЕ УПОМИНАЕТСЯ "каждое из этих высказываний", а также нечто относящееся к "обоим"... но и вообще не используется такой субъект высказывания как тигр.
Цитирую ваше доказательство, а вы должны ткнуть меня носом в тигра, чтобы слово "каждое" и "оба" обрело смысл: "Табличка на первой двери истинна. Тогда табличка на второй двери ложна. А так как табличка на второй двери утверждает, что в одной из комнат находится принцесса, то из её ложности следует, что принцессы там нет, что приходит в противоречие с истинностью первой таблички. Таким образом, мы, предположив, что табличка на первой двери истинна пришли к противоречию".
По-моему, данное доказательство просто изъяло второй субъект из высказывания и выбросило его на помойку. Мол, составители задачи хватили излишку. Мы-то - знаем!
Итак вы решаете не первоначальную задачу, а следующую (без тигра, который путается у вас под ногами):
На 1-й комнате табличка, по сути, гласит: "Принцесса находится в этой - 1-й - комнате".
На 2-й комнате табличка, по сути, гласит: "Принцесса находится в 1-й или во 2-й комнате".
Задача: считая, что одна из табличек ложна, определить - какая.
В этом случае задача превращается в ничтожную, т.к. любой человек сразу видит, что 2-я табличка ложной быть не может. И если он знает, что альтернатива лжи есть истина, то он, считайте, задачу уже решил.
Согласно моему объяснению я это сложное высказывание разделил (а не соединил!) на два простых, каждое из которых может быть ложным или истинным.
Я же не возражаю против вашей трактовки. Я лишь сказал, что можно мыслить сначала эти два простых, соединяя затем их в сложное.
А можно не соединять, утверждая об обоих одновременно (либо истина, либо ложь). В этом случае:
В этом случае задача превращается в ничтожную, т.к. любой человек сразу видит, что 2-я табличка ложной быть не может. И если он знает, что альтернатива лжи есть истина, то он задачу решит.
Именно так.
И акцент в этом "ничтожном" решении сделан на " 2-я табличка ложной быть не может": на формальной сути этого "как выразить то, что не бывает"
P.S. Что означает, что (в 1-комнате ИЛИ в 2-комнате находится принцесса - ложно)?
Ложность сложного высказывания выполняется только тогда, когда оба простых ложны. А это означает, что (принцесса в 1-комнате - ложно) ИЛИ (принцесса в 2-комнате - ложно). ... Что получаем? Получаем: (принцесса НЕ в 1-комнате), (принцесса НЕ в 2-комнате). ... Получаем противоречие.
акцент в этом "ничтожном" решении сделан на " 2-я табличка ложной быть не может": на формальной сути этого "как выразить то, что не бывает"
Я понял, что вы сейчас спрашиваете насчёт укороченного варианта надписи на 2-й табличке: "Принцесса находится либо в 1-й, либо во 2-й комнате". Как формально выразить то, что данная табличка истинная, т.е., что она не может быть ложной.
Отвечаю. Не формально нам известно согласно условию, что принцесса находится в какой-то из двух комнат. Случай, когда этой принцессы вообще не существует, а также случай, когда составитель задачи держит за пазухой ещё одну - 3-ю комнату, но о ней не говорит, а также аналогичные "проблемы" условия задачи мы, надеюсь, не рассматриваем.
Следовательно нам надо определить каким формальным (булевым) оператором можно описать выражение "Принцесса сидит либо в 1-й, либо во 2-й комнате".
Для этого есть булева операция под названием антиэквивалентность. Математический идиотизм (я бы сказал - критинизм) заключается в том, что эта операция имеет кучу других названий-синонимов. [И это-то в науке, которая запрещает нам ковыряться в носу из-за неточности выражения мысли.] Этот оператор в разных областях называют а) исключающее ИЛИ; б) неравнозначность; в) Строгая дизъюнкция; г) антисолидарность; д) антикомплементарность; е) отрицание взаимозависимости; ж) отрицание равнозначности; з) сложение по модулю два; и) побитовый комплемет; . . .
Итак, этот булевый оператор имеет два операнда. В нашем случае обозначим их как К1 и К2, каждый из которых может быть истиной или ложью:
К1 = Ложь, если принцесса не сидит в 1-й комнате и К1 = Истина, если она сидит в 1-й комнате.
К2 = Ложь, если принцесса не сидит во 2-й комнате и К2 = Истина, если она сидит во 2-й комнате.
Результатом выполнения операции оператором антиэквивалентность (исключающее ИЛИ) есть значение Ложь, когда ОБА ОПЕРАНДА имеют одинаковое булево значение (оба Истина, или оба Ложь). Если же значения операндов различны, то результатом выполнения этой операции будет Истина.
Таким образом на формальном уровне эта булева операция вполне выражает здравый смысл, т.к. в нашем случае не может быть, чтобы принцесса была одновременно и в 1-й, и во 2-й комнатах (результат будет Ложь), а также не бывает, чтобы принцесса не сидела ни в 1-й, ни во 2-й комнате - результат тоже будет Ложь, т.к. операнды имеют одинаковые булевы значения.
Традиционный вопрос нашего диалога: где невыразимость? где противоречие?
Она (одновременно) находится в 1-комнате, находится в 2-комнате. Это и есть противоречие.
Результат булевой операции исключающее ИЛИ, когда оба операнда Истина, т.е. принцесса находится и в 1-й, и во 2-й комнате (одновременно), да, так вот результатом будет Ложь.
Вы с этим не согласны? Вы считаете, что для данной задачи одновременное нахождение принцессы в двух комнатах сразу, следует считать Истиной?
В математике, как я уже говорил, для этого используется операция исключающее ИЛИ:
К = К1 <операция исключающее ИЛИ> К2
в К будет результат: Ложь или Истина. [То же: False или True; 0 или 1, '0' или '1';...]
Что значит Ложь или Истина? А то и значит, что <операция исключающее ИЛИ> не различает перестановку местами К1 и К2, этот функтор "слепой" до некоторой степени. В свою очередь уже это означает, что результат булевой операции несёт смысловую нагрузку о самом функторе, нежели о принцах с принцессами и их комнатах. Грубо говоря, если конвейер отделяет рыбу от мяса, то он с таким же успехом сможет отделять фрукты от овощей.
<операция исключающее ИЛИ> не различает перестановку местами К1 и К2, этот функтор "слепой" до некоторой степени.
Присоединяюсь к вашему негодованию! Когда с этим преступлением от подлой булевой операции <исключающее ИЛИ> вы обратитесь в прокуратуру, то не забудьте с собой прихватить не менее безобразные арифметические операции <сложение> и <умножение>, которым тоже плевать на всё святое, а именно, на перестановку местами их операндов.
Короче, из двух независимых свидетелей обвинения, одного вы уже имеете в моём лице. К ногтю их - сволочей!
Вообще то криминалом пока не пахнет, мало ли кто чем кушает суши, я например предпочитаю вилку китайским палочкам. По этому заказываю суши на дом, да бы не обижать посетителей ресторанов. Но курицу и позы исключительно руками, даже в общественных местах. Мойте руки перед едой!
Согласно условию задачи: если высказывание 1-таблички истинно, то высказывание 2-таблички ложно. Ложь же исключающего ИЛИ (т.е. ложь 2-таблички) означает, что (А эквивалентно В). В свою очередь, это означает, что истинно как (принцесса в 1-комнате), так и (принцесса в 2-комнате).
где простые высказывания: А – принцесса в 1-комнате, В – принцесса в 2-комнате
Пришли к противоречию, о чем и говорилось первоначально (и не только мною).
Получим: (принцесса в 1-комнате) == (принцесса в 2-комнате), что вернет False
Согласно условию задачи: если высказывание 1-таблички истинно, то высказывание 2-таблички ложно.
В условии сказано, что только одна табличка истинна - либо 1-я, либо 2-я. Проверим что получится в результате этого "либо/либо", т.е. исключающего ИЛИ, т.е. или одно, или второе (но не оба). Таблица истинности для этой операции у вас приведена правильно. Подставляем ВСЕ возможные значения для 1-й комнаты и для 2-й, и смотрим что получаем в результате. Результатов может быть только четыре (см.табл.):
А -принцесса в 1-й комнате. В - принцесса во 2-й комнате.
А В Результат
0 0 0
0 1 1
1 0 1
1 1 0
Итак:
когда А=0 (т.е. если принцесса в 1-й комнате есть ложь), и В=0 (т.е. если принцесса во 2-й комнате есть ложь), то Результат - 0, т.е. ложь;
когда А=0 (т.е. если принцесса в 1-й комнате есть ложь), а В=1 (т.е. если принцесса во 2-й комнате есть истина), то Результат - 1, т.е. истина;
когда А=1 (т.е. если принцесса в 1-й комнате есть истина), а В=0 (т.е. если принцесса во 2-й комнате есть ложь), то Результат - 1, т.е. истина;
когда А=1 (т.е. если принцесса в 1-й комнате есть истина) и В=1 (т.е. если принцесса во 2-й комнате есть истина), то Результат - 0, т.е. ложь.
Тут операция исключающее ИЛИ точно фиксирует, что когда принцессы нет ни в 1-й, ни во 2-й комнате, то такая ситуация ложна. Точно так же, как и случай, когда принцесса одновременно сидит и в 1-й, и во 2-й комнатах.
С чем вы не согласны? Вы считаете, что принцесса может быть сразу в двух комнатах? Или вам не нравится, что принцессы нет ни в одной из них?
А – принцесса в 1-комнате, В – принцесса в 2-комнате
Пришли к противоречию, о чем и говорилось первоначально (и не только мною).
Получим: (принцесса в 1-комнате) == (принцесса в 2-комнате), что вернет False
Откуда, вдруг, приплыла операция "==" - сравнение на равенство??? А почему бы вам не впиндючить сюда, например, > - больше, или < - меньше? Или << - сдвиг влево?
Получим: (принцесса в 1-комнате) == (принцесса в 2-комнате), что вернет False
Откуда, вдруг, приплыла операция "=="
Это означает, что (принцесса в 1-комнате) - это тоже, что (принцесса в 1-комнате), а также (принцесса в 1-комнате) - это тоже, что (принцесса в 2-комнате)
Т.е. для субъекта высказывания (принцесса в 1-комнате):
В данном высказывании "Максим не занял 1-е место" субъектом высказывания является "Максим". Предикатом - то, что о нём говорится, а именно - "не занял 1-е место". Высказывание может быть только истинным или ложным.
Таким образом: Максим не занял 1-е место есть истина.
Если мы обозначим высказывание "Максим не занял 1-е место" буквой А, то можно записать: А=True.
Естественно, что утверждение можно записать и по-другому: "Максим занял 1-е место". Тогда, пометив это утверждение буквой А, можно записать А=False.
В свою очередь, это тоже, что: (Максим занял 1-е место != Максим занял 1-е место) есть ложь.
P.S. На любом языке программирования такая конструкция вернет (всегда) ложь.
Рассмотрим внимательно предложенную вами конструкцию (будь она на С, на Питоне, или на Паскале). Эта конструкция представляет собой операцию сравнения на неравенство двух переменных - слева и справа от знака "!=".
Иными словами, знак "!=" - это приказ компютеру: сравни, сука, на неравенство и выдай: Ложь (если равно) и Истина (если не равно).
(Максим занял 1-е место != Максим занял 1-е место)
В данном случае и слева, и справа вы расположили одну и ту же переменную, которую вы назвали "Максим занял 1-е место".
Название (подчёркиваю - название!!!) этой переменной затуманивает вам мозги. Если вместо предложенного вами названия мы возьмём нейтральную букву Х, то выражение примет вид (Х != Х).
Итак, при помощи операции "!=" вы приказываете компьютеру сравнить Х и Х на неравенство, и выдать на бочку результат - Ложь или Истина. Ясно, что какое бы значение не имела переменная Х (ложь или истина) - всегда результатом такого сравнения будет ложь, потому что вы взяли ОДИНАКОВЫЕ переменные слева и справа.
Вопрос, придёт ли вам в голову составлять программу, чтобы сравнивать Х и Х, 2 и 2, 7 и 7, и т.д. То есть, получается, что вы вроде как проверяете работу компьютера на правильность выполнения предусмотренных команд (операций). Может электронщики чего не так спаяли внутрях?
Ну вот и договорились, результаты булевых операций несут в себе информацию о функторе! Правда я добавил множественное число, но что от этого изменилось? Только когда всё протестировано на десять рядов и исчезли все тени сомнений, можно переходить на кроликов.
Что в программировании вы называете формулой? Может быть вы имеете в виду выражение или операция?
Потому что ваше фундаментальное False == (False != False) - это не формула а запись на языке Питон логического выражения состоящего из констант между которыми проделывается логическая операция. Результат выражение в скобках - True. Потом с этим True выполняется команад - сравнить с False. У этого идиота - компьютера - заложено, что результат сравнения на равенство двух разных величин (в данном случае False и True) будет ложью, т.е. False.
Но вы по-прежнему настаиваете. что это противоречиво, мол, результат сравнения двух РАЗНЫХ величины должен быть... что ли, истиной?
1) выражения языка
(такие, как 2 + 3, х + 3, х = у, х = 3, 2 = 3, 2 = 2
— в отличие от таких как + = х)
2) среди выражений выделяются так называемые формулы,
означающие при интерпретации «утверждения, зависящие,
быть может, от параметра» (такие, как х = 3, х = у, 2 = 3, 2 = 2)
3) среди формул выделяются так называемые замкнутые формулы,
или утверждения, не зависящие от параметра,
(такие, как 2 = 3,2 = 2)
4) среди утверждений выделяются истинные утверждения
(такие, как 2 = 2)
На сотый раз объяснения ОДНОГО и ТОГО ЖЕ я сделал опечатку. Вот правильный текст:
Потому что ваше фундаментальное False == (False != False) - это не формула а запись на языке Питон логического выражения состоящего из констант между которыми проделывается логическая операция. Результат выражение в скобках - False. Потом с этим False выполняется команад - сравнить с False. У этого идиота - компьютера - заложено, что результат сравнения на равенство двух равных величин (в данном случае False и False) будет истиной, т.е. True.
Но вы по-прежнему настаиваете. что это противоречиво, мол, результат сравнения двух РАВНЫХ величины должен быть... что ли, ложью?
Так это не на языке программирования? А что тогда на не языке программирования означает "!=" и "==".
Почему бы тогда не написать на русском языке.
Вы хотите сказать, что вы изначально всю эту конструкцию False == (False != False) записывали по правилам русской грамматики? А к Питону это не имело отношения?
Вы хотите сказать, что вы изначально всю эту конструкцию False == (False != False) записывали по правилам русской грамматики? А к Питону это не имело отношения?
Тогда вам нужно всё-таки ответить чётко и прямо на вопрос: знаки "==" и "!=" в Питоне означают операцию, т.е. команду "проверить на равенство [или неравенство]"? Или они являются утверждением равенства и неравентсва?
Вадим Владимирович, Вы действительно хотите договориться, или у Вас за пазухой только протест? Ну согласитесь, в конце концов, что функтор сравнения не может различить булевы константы. Когда сравниваются две истины, результат истина, когда сравниваются две лжи, результат опять истина. Почему? Получается логическое "неравноправие" булевых констант, где корень зла, в константах, или в функторе? И как результат такого перекоса, получается два вывода. Во-первых, парадокс лжеца работает только на лжи, то есть в дурную бесконечность уводит только утверждение "я лгу". И во-вторых, это означает не симметричность всего этого Мира (действие никогда не равно противодействию), то есть он куда то катится. В рай или в ад, но катится...
Ну согласитесь, в конце концов, что функтор сравнения не может различить булевы константы. Когда сравниваются две истины, результат истина, когда сравниваются две лжи, результат опять истина. Почему?
Функтор, который выполняет функцию (команду) сравнить, сравнивает два операнда (аргумента) между собой. Ему плевать на то, что именно вы заставляете его сравнивать пятёрку с шестёркой, или две тройки, или два каких-нибудь байта между собой, или два бита, и т.д. Ему также глубоко начхать на то, знаете ли вы заранее те значения, которые вы заставляете его (функтор) сравнивать, или эти сравниваемые значения в ваше программе являются переменными поступающими с внешнего носителя и они никогда наперёд не знаемы. Функтору приказано сравнить - и точка! Его задача выдать "Ложь", если не сравнилось то что вы ему приказали сравнивать, и выдать "Истина", если они совпали.
Так работает операция сравнения на равенство. Точно так же работает и операция сравнения на неравенство. Просто результат будет обратный: если сравнились - "Ложь", а если нет - "Истина".
Ведь и в жизни вас могут в суде спросить двояко: а) вы убийца? или б) вы не убийца? Если вы невиновны и хотите ответить однозначно, правильно, не таясь. То в первом случае вы ответите: это ложь (мол, я не убийца). А во втором случае вы ответите: это истина (мол, да. правильно - я не убийца).
Так всё же, что по-вашему мнению должен ответить наш подсудимый - функтор - когда его спрашивают: равны ли А и В, а он - функтор - сравнил их и определил, что они одинаковы? По-видимому, наш функтор должен ответить: "Истина", т.е. да, они одинаковы. Имеет ли значение тот факт, что вы намеренно ему подсунули два одинаковых объекта - в нашем случае две одинаковые логические константы (False)? А если бы вы подсунули ему два одинаковых числовых значения, например, 2 и 2, или две одинаковые буквы - 'G' и 'G' ? Неужели вы считатете. что формальная операция сранения должна кроме сравнения смотреть на суть самих букв, типа, если это буквы нормального русского алфавита, то получи правильный результат сравнения, а если это буквы из пиндосии, то фиг вам (сначала, мол, решите в нашу пользу суд по сбитому Боингу) !
Ведь вы, по сути, именно это и предлагаете - чтобы сравнение осуществлялось на основании лояльности к вам того, что сравнивается: если речь идёт о таких небожественных понятиях, как "ложь", то с ними, как с предателями...
P.S. Выше по ветке. где я был солидарен с вами в смысле того безобразия, что функтор сравнения не может даже опрокинуть себе внутрь стаканчик водяры, относится так же и к командующему парадом функторов. Перед командованием - не стоит опрокидывать во внутрь.
Функтор, который выполняет функцию (команду) сравнить, сравнивает два операнда (аргумента) между собой.
Когда Вы говорили про таможню, а там же про постановку задачи и собственно про функторы, Вы были гораздо чеснее. Фактически функтор может сравнивать всё что угодно, но не ложь и истину. Например, потенциал, высоту, толщину, длительность... то есть булевы константы в виде "Истина" и "Ложь" претерпевают целый ряд преобразований.
Ему плевать на то, что именно вы заставляете его сравнивать пятёрку с шестёркой, или две тройки, или два каких-нибудь байта между собой, или два бита, и т.д. Ему также глубоко начхать на то, знаете ли вы заранее те значения, которые вы заставляете его (функтор) сравнивать
Совершенно правильно! И реализуется само сравнение благодаря тем самым преобразованиям. Но это так же означает и то, что результат сравнения имеет весьма отдалённое отношение к самим булевым константам, результат имеет прямое отношенеие лишь к самому функтору, в данном случае к сравнению (пока без разницы, на равенство или неравенство). Можно сказать даже больше, результат булевой операции будет меняться, при изменении самого функтора (как Вы говорите, всего 16 вариантов), при неизменных аргументах.
Неужели вы считатете. что формальная операция сранения должна кроме сравнения смотреть на суть самих букв, типа, если это буквы нормального русского алфавита, то получи правильный результат сравнения, а если это буквы из пиндосии, то фиг вам (сначала, мол, решите в нашу пользу суд по сбитому Боингу) !
"Заметьте, не я это предложил!". Я всего лишь настаиваю на том, что компилятор сука, казачок засланный, ему бы операцию сравнения двух констант False взять да запретить, так ведь он вместо этого ещё результат выдаёт True! Я уже молчу, что он скажет в ответ на вопрос чему равно ноль умножить на бесконечность?
Ведь вы, по сути, именно это и предлагаете - чтобы сравнение осуществлялось на основании лояльности к вам того, что сравнивается: если речь идёт о таких небожественных понятиях, как "ложь", то с ними, как с предателями...
Я бы с Вами посидел на берегу с удочкой и бутылочкой самогона. Но это не имеет никого отношения к истине.
Перед командованием - не стоит опрокидывать во внутрь.
Боевые сто грамм всегда были законны! Если я для Вас враг, то на войне как на войне.
булевы константы в виде "Истина" и "Ложь" претерпевают целый ряд преобразований.
Следите за руками.
Можно сказать даже больше, результат булевой операции будет меняться, при изменении самого функтора (как Вы говорите, всего 16 вариантов), при неизменных аргументах.
Что вы говорит!? Ведь это ж надо! Однако, стоит заметить, что с этой подлостью мы уже сталкивались в арифметике, когда вместо одних знаков операций пробовали подставить другие (например, вместо знака операции сложения подставляли знак операции деления: вместо 10+2, ставили 10 : 2) и при этом вместо ожидаемого нами того же самого результата, эти, бля, пиндосы, подсовывали нам - разные. Но им, пиндосам, и этого показалось мало! Они теперь эти штучки-дрючки пытаются проделать и с булевыми знаками операций!!! Им плевать на то, что все операции должны быть равны, бля! То есть выдавать один и тот же - правильный - результат при одинаковых аргументах.
стоит заметить, что с этой подлостью мы уже сталкивались в арифметике, когда вместо одних знаков операций пробовали подставить другие (например, вместо знака операции сложения подставляли знак операции деления: вместо 10+2, ставили 10 : 2) и при этом вместо ожидаемого нами того же самого результата, эти, бля, пиндосы, подсовывали нам - разные
Вы уже опустились до уровня напёрсточника, а жаль. У этих "бля, пиндоссов" вряд ли получится подсунуть мне не мой результат, хотя умные, гады...
Так Вы согласны с тем, что булевы константы True и False, в компьютере (и в такой прикладной математике как программирование) не более чем двоичные числа единица и ноль? Или так и будем играть в истинность и ложь? В принципе я Вам могу сформулировать проблему, примерно так: деньги не есть всеобщее благо (бесформенное целое), у них есть ноги, соответственно и то место, откуда они растут.
Всё программирование в конце концов (в основе) представляет собой работу с битовыми нулями и единицами. Одни комбинации битов распознаются процессором как команды, другие, как адреса памяти, третьи - как содержимое по указвнным адресам, и т.д.
Константы False и True - могут представлять собой (внутри области памяти) совсем разные комбинации битов - в зависимости от "договоренности". В одних языках программирования эти константы хранятся как целые двухбайтовые числа 0 и 1, в других - как четырёхбайтовые, в третьих - как строка битов длиной 1 бит, в четвёртых - как целые числа -1 и +1, в пятых - как символы 'F' и 'T' и т.д.
Ну и что с этого? Какой вывод? В любом случае команда сравнения обязана сравнивать два операнда и выдавать результат - сравнились ли они, или нет. Независимо от того какого вы мнения о передаваемых для сравнения аргументах. Но вы продолжаете настаивать, что если передавать два одинаковых аргумента, то иногда пусть команда сравнения выдаёт сравнимость, а иногда ей это делать не следует (если я, мол, против). Причём, вы пишите это на полном серьёзе! Это примерно как если бы сказать: сравнивая 2 и 2 - пусть команда сравнения выдаст истину, а если я ей подсуну 7 и 7, то хер вам истина - я эту семёрку, бля, с детства не люблю! Короче, рекомендую меньше пить.
Все компы работают по переднему или заднему фронту импульса, по уровню напряжения, или фазовому сдвигу. Но Вы таки настаиваете на том, что безмозглое железо может оперировать понятиями? Такими как ложь и истина? Да будет Вам известно, что комп выдаст на If("пошоль нафиг досвидания") истину! Истину чего по Вашему? Того что строка не пустая, или это признание в любви? Рекомендую выпить. Даже обезьянам, которых в прошлом веке разводили на Кавказе, ввели в рацион Кинзмараули, что б не дохли.
Но Вы таки настаиваете на том, что безмозглое железо может оперировать понятиями?
Не надо с больной головы на здоровую. Я нигде не только этого, но и близко подобному не утверждал.
Мало того, компьютер вообще не оперирует понятиями. Понятиями оперирует человек, который пишет программу. Ну, или там... в российских судах.
Да будет Вам известно, что комп выдаст на If("пошоль нафиг досвидания") истину!
Компьютер вообще не выдаёт истин и лжи. Он выдаёт результат операции. А как интерпретировать результат - задача человека, которая ставилась ещё ДО(!) выполнения программы - во время её написания.
Истину чего по Вашему? Того что строка не пустая
Когда вы пишите такой оператор if, то вы обязаны знать что именно вы спрашиваете у компьютера. В данном случае вы спрашиваете: выдай значение True, если строка не пустая, и False, если пустая. Но так как вы в качестве строки, в данном конкретном случае, передаёте НЕ ПЕРЕМЕННУЮ, а КОНСТАНТУ, то в принципе, такая запись в программе - глупость, т.к. результат операции вы знаете заранее, и тогда само If абсолютно бессмысленно.
Не надо с больной головы на здоровую. Я нигде не только этого, но и близко подобному не утверждал.
Мало того, компьютер вообще не оперирует понятиями. Понятиями оперирует человек, который пишет программу. Ну, или там... в российских судах.
Прошу прощения, иногда эмоции прут через край. Конечно же понятиями не оперирует, и даже булевыми контантами, в судах может быть, а вот в железе нет даже булевых операций, как я уже говорил, есть две команды, одна записи, другая чтения, и комбинационная схема под назавнием АЛУ. Команды, константы переменные и процедуры это всё уже из области языка, например, С++.
Но так как вы в качестве строки, в данном конкретном случае, передаёте НЕ ПЕРЕМЕННУЮ, а КОНСТАНТУ, то в принципе, такая запись в программе - глупость, т.к. результат операции вы знаете заранее, и тогда само If абсолютно бессмысленно.
Так я Вам и говорю, как таможня пропустила гнилой компилятор? Мало ли чего я могу наплести, язык то он без костей. Тут ведь явный косяк, компилятор пропустит не только безссмыслицу, но поощрит константой True. И даже подтвердил примером из жизни, как вопреки здравому смыслу две лжи могут дать истину, оказывается проще простого, их надо только сравнить и всё. Но в жизни бывает и по хлеще, нужно только соврать первым, обделать аппонента гавном, пусть разгребается, потом в крайнем случае можно извиниться, а лучше и не извиняться, и так забудется, я же всё-равно уже герой!
Каждая формула является высказыванием. Каждое высказывание – то, о чем можно сказать истинно оно или ложно. Следовательно, каждая формула – то, о чем можно сказать истинна она или ложна.
Примеры формул: х = 3, х = у, 2 = 3, 2 = 2. О каждой из этих формул (для х=3, х=у нужна подстановка) можно сказать истинна она или ложна.
В математике для этого существует специальный термин: предикат равенства для которого областью определения может быть что угодно, а областью значений: истина, ложь. Часто предикат равенства пишут как х=y, упоминая при этом, что его область значений это истина или ложь.
Ваш вопрос: знаки "==" и "!=" в Питоне означают операцию, т.е. команду "проверить на равенство [или неравенство]"? Или они являются утверждением равенства и неравентсва?
Ответ:
2=3 это утверждение равенства (проверка равенства) разных термов, возвращающее ложь.
2=2 это утверждение равенства (проверка равенства) одного терма, возвращающее истину
2≠3 это утверждение неравенства (проверка неравенства) разных термов, возвращающее истину.
2≠2 это утверждение неравенства (проверка неравенства) одного терма, возвращающее ложь
Теперь о формулах, которые только истинны. Именно их мы имеем ввиду, когда пишем х=3, x=y. Присвоение – это равно для истинных формул. И поскольку 3 (для истинных формул) всегда равно 3, то вместо х пишем 3. Но это, повторюсь, является лишь частным случаем формул.
Ложные всегда формулы – это противоречия. Ничего ужасающего в них нет. Такие формулы – лишь отрицание всегда истинных формул.
Жаль, что нам так и не удалось заслушать начальника транспортного цеха.
М.Жванецкий.
Спокус Халепний:
Тогда вам нужно всё-таки ответить чётко и прямо на вопрос: знаки "==" и "!=" в Питоне означают операцию, т.е. команду "проверить на равенство [или неравенство]"? Или они являются утверждением равенства и неравентсва?
В вашем ответе даже не фигурируют знаки "==" и "!=", а также непонятно - говорите ли вы о языке Питон или о некоторых частных разделах математики, в которых используется свой жаргон.
В вашем ответе даже не фигурируют знаки "==" и "!=", а также непонятно - говорите ли вы о языке Питон или о некоторых частных разделах математики, в которых используется свой жаргон.
Да, заранее известно, что X и Y - целые числа, при этом область значений Y от 0 до 1000, а X от 0 до 500.
Задайте не диапазоном, а явно. Тогда и будете судить о истинности или ложности этой формулы. Пока лишь можно сказать, что она выполнима (не всегда ложна)
Вопрос остаётся прежним: запись Y = X + 1 в математике, и запись Y == X + 1 в программировании на языке Питон означает одно и то же
Вопрос остаётся прежним: запись Y = X + 1 в математике, и запись Y == X + 1 в программировании на языке Питон означает одно и то же
Одно и тоже.
Интересно ещё ваше мнение вот о чём. Как вы считаете, смысл записи на языке Питон Y = X + 1 и записи в математике Y = X + 1 - одно и то же или смысл разный?
Интересно ещё ваше мнение вот о чём. Как вы считаете, смысл записи на языке Питон Y = X + 1 и записи в математике Y = X + 1 - одно и то же или смысл разный?
В программировании (на python, в частности) присвоение - это частный случай формул: формул всегда истинных. Поэтому мой ответ: нет.
Эта формула (Y=X+1 на python) при каком-то Х вернет истину, поскольку левый и правый терм будут равны на том основании, что X+1=X+1. Уточню, не это X+1=X+1 вернет истину, а это X+1==X+1, где вместо Y будет подставлено X+1 при каком-то Х.
Повторюсь, формулы всегда истинные (тавтологии) - частный случай формул. Вот конкретный пример из школьной программы, где в наличии как как те, так и другие.
Задача Всероссийской проверочной работы 4 класса по математике:
Известно, что кустов малины в 5 раз больше кустов смородины. Садовник при подсчете кустов получил результаты: 84, 85, 89. Вопрос: какое число кустов в саду?
Решение. Из (М=5*С, К=М+С) следует К=6*С. Тогда формула С=К/6 будет истинна только при числе кустов 84 (в остальных случаях получим ложь).
Задача Всероссийской проверочной работы 4 класса по математике:
Известно, что кустов малины в 5 раз больше кустов смородины. Садовник при подсчете кустов получил результаты: 84, 85, 89. Вопрос: какое число кустов в саду?
Решение. Из (М=5*С, К=М+С) следует К=6*С. Тогда формула С=К/6 будет истинна только при числе кустов 84 (в остальных случаях получим ложь).
Это тоже, что и с принцессой. ... Не существует 85 кустов, т.к. (С=85/6) ложно. Не существует 89 кустов, т.к. (С=89/6) ложно. Но существует 84 куста, т.к. (84=6*С) истинно.
Задача Всероссийской проверочной работы 4 класса по математике:
Известно, что кустов малины в 5 раз больше кустов смородины. Садовник при подсчете кустов получил результаты: 84, 85, 89. Вопрос: какое число кустов в саду?
Решение. Из (М=5*С, К=М+С) следует К=6*С. Тогда формула С=К/6 будет истинна только при числе кустов 84 (в остальных случаях получим ложь).
Совершенно непонятно почему садовник получал результаты 85 и 89? Получается, что ему было трудно вести подсчёт и он ошибался. В таком случае, почему результат 84 также не может быть ошибочным, как и 85 и 89. Разница в трёх подсчетах достигла 5. Почему числу 84 доверия больше, чем числу, например, 90 или 78? Впрочем, есть ещё 96, 72, 66...
Сама формулировка задачи в этой части "Садовник при подсчете кустов получил результаты: 84, 85, 89. Вопрос: какое число кустов в саду?" уж очень некорректна.
Впрочем, безапелляционная формулировка в якобы "решении" задачи должна была бы просто возмутить строгого математика. Задумайтесь! Школьник читатет не детский рассказик, а математическую формулировку! И что же он вынесет из прочитанного? А вот что: "формула С=К/6 будет истинна только при числе кустов 84 (в остальных случаях получим ложь)". Сидит он и думает, а почему только 84? А если 78? Ведь 78/6 = 13. Получается, что само логическое высказывание о том что ТОЛЬКО ПРИ ЧИСЛЕ 84 в этом случае ложно. Ведь не только?
как вопреки здравому смыслу две лжи могут дать истину, оказывается проще простого, их надо только сравнить и всё.
Давайте поговорим о здравом смысле на вашем языке - языке электронщика.
Сначала согласимся, что состояние, например, какого-нибудь автоматического выключателя называть Истиной, если он включён, и Ложью, если он выключен. Нормльно? Здравый смысл пока на дыбы не встал? Тогда продолжим.
Согласимся также и со следующим. Пусть у нас есть датчики влажности. Если такой датчик начинает передавать сигнал Истина, то это означает что влажность начинает превышать 90%, а если влажность меньше, то такой сигнал не передаётся, а передаётся сигнал Ложь.
Теперь я формулирую жизненную задачу, которая может быть описана (и запрограммирована) при помощи булевой операции.
Итак, наши два датчика влажности воздуха расположены: один на чердаке, а другой - в подвале. С целью безопасности (чтоб не было короткого замыкания) сигнал Истина от любого из таких датчиков приводит состояние выключателя в положение Ложь (т.е. - выключает его, чтоб электрический ток не шёл по проводам в помещении).
Есть ли тут отступление от здравого смысла? Вроде как нет. Мы описали простейшее автоматическое устройство для предотвращения короткого замыкания.
Обозначим состояние датчика на чердаке булевой переменной А, а в подвале - В. Ясно, что каждая из этих переменных может принимать значение Истина (когда влажность превышает 90%) или Ложь (когда не превышает).
Датчики воздействуют на автоматический переключатель, который мы обозначим булевой переменной С. В зависимости от сигналов от датчика влажности (от А и В), состояние булевой переменной С будет Истина (состояние включен) или Ложь (переключатель выключен).
Описываем как должна работать эта булева схема. У нас две независимые булевы переменные: А и В. Результат будет в зависимой переменной С. То есть С - это результат работы некой булевой функции от двух аргументов А и В. Другими словами наша конструкция такая: С = А<булева операция>В
1. Ясно, что если А имеет значение Истина и В имеет значение Истина (т.е. оба датчика показывают превышение влажности), то переключатель должен быть переведён в положение выключен, чтоб ток не шёл, т.е. результат в С - Ложь.
2. Если АИстина, а В - Ложь, то всё равно следует переключатель устанавливать в положение выкл. - ток не должен идти по проводам, т.к. опасная влажность на чердаке т.е. С - Ложь.
3. Если АЛожь, а В - Истина, то это аналогично предыдущему пункту, но опасная влажность - в подвале. С снова-таки - Ложь (положение выкл.)
4. Если датчики не показывают превышение влажности, т.е. А - Ложь и В - Ложь, то ток по проводам может идти, т.е. положение переключателя - вкл., что означает С - Истина.
Итак мы видим ужасающую с точки зрения vlopuhin и автора данной темы ситуацию: две Лжи образуют Истину. Однако, следует ткнуть меня, как котёнка, носом в лужу и показать где тут нарушение обещанного vlopuhin здравого смысла.
Для полноты картины посмотрим какая из булевых функций была у нас выполнена, т.е. какая булева функция даёт именно такой результат. Составим таблицу истинности.
АВС
0 0 1
0 1 0
1 0 0
1 1 0
Это была булева операци Стрелка Пирса (см. Википедия).
Следовательно, не только операция сравнения даёт результат Истина от двух аргументов Ложь, но и булева операция "антидизъюнкция" (она же - стрелка Пирса).
По секрету... Среди 16 возможных различных булевых операций, 8 операций дают результат Истина, когда оба аргумента имеют значение Ложь. Какой кошмар!
Честно говоря, я в шоке! Вам действительно требуется растолковать, что такое функтор? Вы действитетельно не понимаете о чем речь, или прикидываетесь? Возьмём Ваш пример с Малазийским Боингом, сбитым над Украиной. По Вашему "кто первый прокукарекал, того и правда", по моему "на воре шапка горит". Будем спорить до посинения, или договариваться? Например, назначим объективное расследование? Вы же, не то умысленно, не то по недопониманию игнорировали введённые Булыгиным понятия области определения и обласли значения функции. Да и переменной, и даже константы. Почему/Зачем? Если же всё-таки придёт (упадёт хер знает откуда) идея договариваться, то предлагаю договарисаться на базе Теории Систем от Е.Волкова. Это значит договариваться на основании результатов объективного расследования, а не на том, чьи атомное бомбы ядрёнее.
Да хер я клал на пиндосов, а на америкосных пиндосов, замешанных с гитлировскими фашистами, вдвое!
Догадливый, блин... Масленичная неделя у нас в разгаре!
Так что же означает С - Истина в приведённом Вами выше примере с автоматическим выключателем тока при превышении влажности? Вы по прежнему настаиваете на том, что эта истина лезет из того, что два датчика выдали "Ложь"? Честно говоря, они могли бы выдать всё, что угодно, в том числе и две Истины, и тогда бы функтор пришлось бы впиндюрить другой, отличный от стрелки Пирса. И что, после этого пожар не надо тушить? Так вот С - Истина получилась не потому что из датчиков ложь прёт (датчики не умеют врать, они могут только ломаться), а потому что влажность не повысилась! Ну типа стек протоколов обмена данными, а на каждом уровне своя область значений. По этому я просто настаиваю на том, что результат булевой операции имеет непосредственное отношение к функтору, и косвенное к аргументам.
Кстати, приведённая Вами схема не имеет обратной связи, ни ООС, ни ПОС. Был у меня такой случай. Нужно было автоматический подогреватель поставить в тамбур, причем по дешмански, то есть почти за бесплатно, сам обогреватель уже имелся в наличии. Захожу в хозмаг с электротоварами, покупаю температурный датчик и рэле, обсудил с продавцом все детали, он меня таки убедил, мало того, уверил, что буквально на днях по такому сценарию мужик у него купил то же самое, и остался доволен. Так вот монтирую всю эту хрень, включаю. И надо же, пошло тепло, и датчик сработал, только обогреватель не выключился, схема оказалась с ПОС. Открываю дверь на распашку для охлаждения, обогреватель выключается, ну и соответственно больше не включается, на улице минус тридцать, в тамбуре плюс пять, а датчик, как и требовалось, я установил на плюс восемнадцать. Пришлось инвертор городить. Вы и теперь будете настаивать на том, что продавец не солгал?
В моём примере обратной связи не требуется. Она даже опасна. Электричество выключится при сверхвлажности (примерно так, как срабатывают предохранители) а дело человека устранить течь в подвале или на чердаке и пальчиками включить электричество.
что же означает С - Истина
Это означает то, к чему привыкли разработчики электро или релейных схем на протяжении почти ста лет, а именно - к УСЛОВНОСТИ, при которой положение Вкл. ассоциируется с Истиной или с '1', а Выкл. - с Ложью. Точно с такой же условностью как знак "+" на AA-батарейках ассоциируется с выпуклым шпиндельком на торце, а не с плоским - на другом конце.
Вы по прежнему настаиваете на том, что эта истина лезет из того, что два датчика выдали "Ложь"?
Эта истина лезет из того, что два датчика сообщили о том, что распространяемые некоторыми поцами (в лице... не будем говорить о присутствующих) слухами о том, что на чердаке или в подвале повышенная влажность - Ложь. И поэтому выключатель находится в положении Вкл. (т.е. Истина), что позволяет пользоваться электричеством в доме. Остаётся только спросить у жителей какой именно (от кого) здравый смысл они поддерживают?
Так вот С - Истина получилась не потому что из датчиков ложь прёт (датчики не умеют врать, они могут только ломаться), а потому что влажность не повысилась!
Это вы мне говорите? Это же вы всё время сравниваете определённое состояние датчика, выключателя или чёрт знает ещё чего... с ЧИСТО УСЛОВНЫМИ обозначениями этих состояний, которые ПРИНЯТО обознчать в программировании и логике как True и False, у инженеров - как Вкл. и Выкл., у других - как "+" и "-"... и т.д. И только поцы интерпретируют подобный True с божественной Истиной, а False - с происками дьявола.
Вот здесь ссылка Вы о чем говорили? Про договорную УСЛОВНОСТЬ, или про божественную истину? Надо полагать про УСЛОВНОСТЬ. А теперь растолкуйте мне дураку откуда она взялась? И какое имеют отношение к этой истине булевы константы? В частности две константы False, которыми было помечено то самое всё. По моему это разные ложь и истина, и различие их заключается в том, что они из разных областей определения. То есть сравнение двух констант False на равенство по логике должно дать False (или вообще ничего, то есть неопределённость). А то, что в программировании это сравнение даёт True, следует из договора между программистами, фактически речь идёт о разных системах, но кому то это по барабану. Собственно и я не против, за державу обидно!
Каким тоном вы спросили, т.е. в каком ракурсе, так я вам и ответил. Вы сросили: "Кругом одна ложь, а когда оду ложь сравнили с другой, появилась истина? Нет ребята демократы, так не бывает".
Я вам ответил: "Истина в том, что была задана кругом одна только ложь."
Вас удивляет как получается Истина, если кругом одна ложь? Отвечаю: ЭЛЕМЕНТАРНО !!! Потому что это зависит от задаваемого вопроса. Когда, например, вас судья спрашивает: является ли истиной, что вы не грабили, и не убивали (другими словами, что предъявляемые вам грабёж и убийства есть ложь)? И вы вполне резонно отвечаете: это Истина (что означает - ДА, подтверждаю, что предъвленные мне грабёж и убийство являются Ложью).
Как же так, бля!? Почему вы криком кричите, что из этой лжи возникает истина? Отвечаю: потому что становитесь сразу умным, когда вас за жопу берут!
Кстати, в этом случае вам за державу не обидно? Ведь вы её в жопу послали!
Никаких чудес тут нет. Тут можно объяснить из чистой психологии. Просто условные ЗНАКИИстина и Ложь давят на мозги, так сказать, божественным происхождением этих слов. А на самом деле они имеют происхождение из тривиальной логики как ответ на вопрос истинное ли суждение написано или ложное. Или по другому: согласны ли вы с написанным суждением "да" или "нет". И получается, что если вместо давящих на мозги сверху "истин" использовать более нейтральные да/нет, то психологическая нагрузка в осмыслении результатов резко спадает. А если вообще заменять на единички и нолики или на плюсики с минусами, то ментальное отдавание предпочтения одному или другому будет не более, чем предпочтение играющему в данный момент в шахматы белыми фигурами, перед играющим - чёрными.
Да нет тут никакой психологии. Тут есть пропасть, и это уже было в какой то из дискуссий, между теорией и практикой, между математикой и прикладной математикой в виде программирования. И, по моему, виной тому логика, или, если хотите, различные способы мышления. При столкновении с неопределённостями выход единственный - договариваться. А после договорённости необходимо о ней помнить. Однако система!
Что притихли, мальчики? Тут самое время задуматься, а правильно ли программисты поступили, договорившись о том, что Flse==False даёт True? Если капнуть глубже, то вопрос звучал бы так: что же здесь естественное, а что искусственное? Почему чистые математики скромно промолчали на такую наглость? Я не силён ни в истории математики, ни в истории программирования, но, как мне кажется, эта договорённость в программировании связана с тем, что в математике ноль стал обыкновенным числом! Не совсем конечно же, но кто нынче безгрешен? Есть четные числа, есть простые и замысловатые, как ряд Фибоначчи, а есть ноль. Тут и Кантор руку приложил с его трансфинитами. И даже Платон, в его пещере все места одинаковые, всё оплачено, проходи и смотри бесплатное кино. Но это же прорыв и в цифровой технике, и в измерительной! Какая прелесть, лишь бы чего то двигалось, какая-никакая стрелка, а шкалу я вам нарисую, хоть равномерную, хоть логарифмическую, и ноль забабахаю хоть в начало, хоть в конец, а могу и посередине, и диапазон сдвину, и, если пожелаете, расширю/сужу. В общем радикальный релятивизм, мракобесие сдулось, и все бабайки спрятались ниже уровня шумов. Есть правда один конфуз, цифровой технике бесконечность не по зубам, вот и приходится плодить гигатерабайты. В общем искусственный интеллект на этой хрени не вырастить...
правильно ли программисты поступили, договорившись о том, что False==False даёт True? Если капнуть глубже, то вопрос звучал бы так: что же здесь естественное, а что искусственное?
Чтобы ответить на эти вопросы, надо точно знать что вы понимаете под выражением False==False даёт True.
Для этого просто произнесите фразу на русском языке, где будет сказано что это такое, для чего оно служит, и главное - что означает знак ==.
Попробую изобразить то, что я понимаю под "выражением False==False даёт True".
1. Программисты. Результат сравнения на равенство двух булевых констант False даёт True. Коряво получилось, попробую ещё раз. Результатом булевой операции эквивалентности двух аргументов False и False будет True. Вроде бы получилось?
2. Чистая математика. Сравнение двух нулей невозможно, поскольку "потрогать" ноль невозможно, не за что. Но если признать ноль числом, то два ноля равны. Соответственно у чистых математиков два ряда натуральных чисел, один с нулём, другой без. Кстати у телефонистов десятка начинается с ноля, на плинтах пары "0", "10", "100" и т.д. находятся в начале, а не в конце, всё не как у людей.
3. Электронщики. Если потенциал на выходе ключа ниже 2.4V, то хоть засравнивайся, выше он не станет, сколько ни пробовал и мультиметром и осциллографом - ноль там, железный! То, что ниже уровня шумов, сравнить не получается, примерно как и в математике с нулём. Если "ниже 2.4V" принять за ноль или False, результатом сравнения соответственно будет ноль или False. Если же "ниже 2.4V" подать на инвертор (убрать потенциал, оставить только шумы), то на выходе инвертора получится выше 4V, соответственно будет единица или True. Другими словами, какую комбинационную схему закажете, такую я вам и забабахаю. Как я и говорил выше: "Не может научим, не хочет заставим. На то он и функтор!"
Получилось? Другими словами, если у программистов это так, то это не значит, что так везде, не надо мне серить прямо в голову (с третьего этажа на первый :) , это когда я работал на ВЦ БратскГэсСтрой, программисты сидели на третьем этаже, а электронщики на первом). Не знаю, как это будет по английски, но по русски по другому не умею.
Данное выражение написано на языке программирования. Поэтому пункты 2-3 отношение к этой записи не имеют.
Пункт 1 почти правильно интерпретирует написанное. "Почти", потому что не сказано, что знак "==" это команда! Команда компьютеру выполнить операцию сравнения того что слева от знака, с тем что справа, и выдать результат True (если сравнилось) и False (если нет).
Сама запись именно в таком виде False==False не является ошибкой... с формальной точки зрения, но является совершенно глупой. Ведь слева и справа стоит одна и та же КОНСТАНТА. Это всё равно, что спросить у математика: скажи-ка, паря, равно ли пять пяти. Нормальный математик ответит, что это даже более, чем равно - это тождественно. В этом смысле, если программист пишет в своей программе команду, которая спрашивает у компьютера: равны ли две одинаковые константы, то начальник у этого программиста должен вызывать психиатра.
Итак, думаю, перевалив за сотню сообщений в теме, мы, наконец. выяснили, что "шестикопеечная булочка стоит шесть копеек".
Это было понятно с самого начала. Выяснилось другое, программисты это секта, у них мозги по другому устроены. Я давно об этом догадывался, теперь я в этом уверен. Хотя две лжи дают истину и ложь, но в другой плоскости, это по сути и есть правило буравчика, так устроено информационное пространство. То есть на том, что Вы назвали глупостью, весь мир держится, по крайней мере булева математика точно. Переваливание за вторую сотню это всего лишь подтверждает, яркий пример того, как на пустом месте можно замутить целую тему.
Все парадоксы не имеют решения. В частности, не имеет решения парадокс Ахиллеса и черепахи. По той простой причине, что (Х не-равно Х) всегда ложно: Ахиллесс догонит черепаху, если он ее не догонит (что ложно); Ахиллес не догонит черепаху, если он ее догонит (что ложно).
Но это не означает, что оперируя конкретными числами нельзя ответить на то, Ахилесс догонит или не догонит черепаху. Возможны оба варианта.
Даже в вики написано: Если ложно, то истинность всего условного утверждения уже не зависит от истинности . То есть с помощью ложного утверждения можно обосновать всё что угодно. Пример: утверждение «если дважды два равно пяти, то снег красный» является истинным.
Суть одна (в любых парадоксах)
А -> B
0 1 1 Из лжи следует истина
0 1 0 Из лжи следует ложь
P.S. Догонит, если не догонит; заплатит, если не заплатит; поднимет, если не поднимет; Х, если не-Х
Комментарии
Этот же смысл ... с использованием формул: (Х есть) равно (Х равно Х), (Х нет) равно (Х не-равно Х) ... используется в программе расстановки ферзей на шахматной доске размерности=n, так чтобы они не были под боем.
Ссылка:
Что вас смущает? Почему это не имеет смысла в математике?
Потому что False - это совокупность свойств: {False == False, False != False. ... Потому что это противоречие.
И дабы избежать этого, в математике (эквивалентность, лог. И) разнесли по разным таблицам. Действие их отличается ТОЛЬКО по отношению к false, т.е. когда (а=False, b=False) ...И когда нужно вытащить на свет (False != False) говорят о (лог. И): a&b. ... Всего-то!
Ещё раз: False == (False != False) . В чём конкретно вы видите противоречие?
Еще раз: чтобы было верно (False == False) ... необходимо, чтобы (False != False)
P.S. (False != False) - тоже, что (False == True) ....т.е. (False - это False), а также (False - это True)
P.S. Импликация (из лжи следует как ложь,так и истина) - тоже, что сказано мною, но несколько иначе. Об этом ее свойстве иногда говорят, что из противоречия следует что-угодно. ... Но без этого ее свойства не будет и самой импликации:)
Выражение в скобках (False != False) имеет значение False. Ну, из-за тех же причин, что и "конь это не-конь!", "один это не один", два это не два"... и т.д. Все подобные выражения имееют значение "Ложь". Вы видите в этом несуразность? По-видимому, нет, всё в порядке. Да?
Итак, выражение в скобках имеет значение False.
Теперь в выражении, которое вынесено у вас в заглавие темы, а именно: False == (False != False)
вместо выражения в скобках мы можем подставить значение этого выражения, которое мы вычислили, то сесть - False.
У нас получится: False == False
Что вас тут смущает? Где противоречие? Ложь эквивалентна Лжи (Ложь равна Ложь), т.е. выражение истинно, т.к. один эквивалентно одному; ноль эквивалентен нулю, конь - коню... ну, есть ещё примеры (:они идут за дополнительную плату:)
Разумеется, имеет значение False. ...Но для этого предварительно нужно сказать, что (False - это не False).
Одновременно о чем-то (утверждать и отрицать) - значит иметь дело с противоречием.
P.S. Спросите у математиков о том, что: (False == False), (False != False). Они вас, мягко сказать, "не поймут".
Откуда вы взяли, что предварительно надо знать такую глупость, а именно, что False - это не False ?
1) О, у же смущает!
2) Выразите False=...
3) Приведите пример на любом языке программирования
4) Обычно, когда приводят пример типа А==А, то это пример бестолковости. Нужен пример вида Y=F(Х), где в определяющей части не фигурирует определяемое, т.е. не масло=масло
5) Мой пример: False = (True != True). Ложь - это неравенство истины с истиной.
Когда вы говорите об Y=F(X), то надо понимать, что в данном вами контексте (в контексте булевой алгебры) функцией будет "==" или "!=" или "AND" или "OR" или ... - всего 16 возможных булевых операций.
Итак, в нашем конкретном случае мы рассматриваем операцию "!=" . Это функция двух аргументов Х1 и Х2 - слева и справа от операции. Запишим это так Y = (Х1 != X2)
Х1 и Х2 - булевы переменные, которые могут принимать одно из двух значений True или False.
В частном случае Х1 и Х2 могут иметь одно и то же значение, например, False. В таких случаях результатом булевой операции "!=" (антиэквивалениция или отрицание эквиваленции) будет False. То есть, когда аргументы имеют равные значения - результатом будет Ложь, а когда аргументы имеют разные значения - результатом будет Истина. Что вполне логично, т.к. эта операция АНТИэквиваленция. В булевой операции "==" (эквиваленция) результат будет обратный: если равны аргументы - Истина, а если не равны - Ложь.
Вы в своём главном примере (из заголовка) вместо переменных Х1 и Х2 сразу поставили некие константы (значения переменных). Первая константа FALSE, и вторая константа FALSE. Между ними операция антиэквиваленция, т.е. "!=". Результат - согласно правилам булевой алгебры - FALSE. То есть - конкретное значение. В булевой алгебре конкретное значение может принимать вид только из двух возможных констант: FALSE или TRUE.
И в довершении (в примере из заголовка) вы используете булеву операцию эквиваленция "==". Вы проверяете - а действительно ли константа FALSE эквивалентна константе FALSE. Результат - да, еквивалентна, то есть - истина.
Где противоречие (голос из могилы Аристотеля)?
Где пример на любом языке программирования, такой чтобы в определяющей части не фигурировало определяемое, если задача состоит в том, чтобы выразить false?
Проблема в том, что мне не хватает опыта выполнить ваше задание. Я не знаю что такое определяющая часть и определяемая. А также не понимаю что означает выразить false. Слова "пример" и "язык программирования" я думаю, что понимаю.
P.S. На всякий случай. Я хоть и на пенсии уже, но всё же 45 лет программистского стаже у меня есть. Я программировал на двух ассемблерах, а также на Фортране, Коболе, PL/1, Паскале, C и C++. И еще две небольших программы пришлось написать в машинных кодах.
Вот конкретный пример E = m*(c^2) ...то,что слева - определяемое; то, что справа - определяющее.
Так же записывают в толковых словарях. Например, по Ожегову: АБАЖУР, -а, м. Колпак для лампы, светильника. Зеленый а. 11 прил.абажурный, -ая, -ое. [ссылка]
Так же в программировании [ссылка на online C++]: false = (true != true), т.е. справо от равно нет определяемого термина, нет false
#include <iostream>
int main()
{
bool x;
x = (true != true);
std::cout << x; //вернет 0, т.е. False
}
В программировании все "опредяляющие" и "определяемые" записываются при декларировании данных (int, bool, char,..). Возможно вы имеете в виду оператор присваивания какой либо переменной (например, E) находящейся слева от знака равенства (знака присваивания) того, что находится справа от этого знака (например, m*c^2 ).
В этом смысле ваше выражение false = (true != true) не совсем понятно, если под false и true вы имеете в виду булевы константы. Это всё равно что написать для арифметических констант оператор присваивания: 5 = 6-4. То есть, вы как бы претендуете на изменение константы 5. Отныне, мол, хочу, чтобы константа 5 стала 2 - хочу иметь две двойки в арифметике и ни одной пятёрки!
Если true это константы, то выражение вполне нормальное. Выполняется логическая операция в скобках. У вас там в скобках две константы. Представим себе такую запись х = (а != в)
Тогда х получит значение "истина", если а не равно в, или значение "ложно", если а равно в.
В вашей записи значение а - истина, и значение в - истина (true != true). Следовательно х получит значение ложно.
Где противоречие?
Противоречие, в общем виде, это (X == X), (Х == not Х) выделено жирным.
Для конкретного примера: преобразуем (true != true). Получаем (true != true) == (not false != not false) == (false != false)
Итого, вместо false == (true != true) получаем false == (false != false)
Далее. false == (false != false) это совокупность двух равенств:
false == false, false !=false ... или, что тоже ... false == false, false == not false
P.S. Где программа?
Мне не понятно как вы интерпретируете знак "==" и знак "!=" .
Мне не понятно что означают у вас true и false. Это константы? Или это переменные, которые вы обозначили "для ясности" как true и false (ну, вместо а и в, или х1 и х2, или ...)?
Если это булевы константы, то они не преобразовываемые.
Что значит "преобразуем"? Между скобками знак "==" - это что? Это присваивание? Или это логическая операция "эквиваленция"?
Так я же не знаю что такое "выразить false".
ГДЕ ПРОГРАММА?
равно, не-равно
false == какой-то фрагмент кода.
P.S. x = (False != False) ... в переменную х записываем то, что возвращает (False != False). После этого можно сказать, что (False == False), а до этого (False != False). ... Имеем два равенства, отрицающих друг друга: (False == False), (False != False)
Вы думаете, что то, что стоит слева от "==" будет приравнено тому, что справа от этого знака? То есть, вы считаете, что тем самым вы ВЫРАЖАЕТЕ false ?
Это не так! Знак "==" означает сравнение двух булевых значений - значение слева сравнивается со значением справа. Чтобы сравнить используется булево правило: если слева и справа булевы значения одинаковы, то результат сравнения будет истина, а если разные - ложь.
Таким образом, у вас слева от "==" находится АРГУМЕНТ (один - левый - аргумент операции сравнения, а справа - второй аргумент, значение которого образуется после выполнения фрагмента кода).
Итак, остаётся невыясненным где спрятолось противоречие и что означает выразить false ?
В первом случае выражение имеет значение истина (false == false), а во втором случае выражение имеет значение ложь (false != false). Что тут не ясного?
ГДЕ ПРОГРАММА?
Алексей Михайлович Семихатов - доктор физико-математических наук, ведущий научный сотрудник Отделения теоретической физики Физического института имени П.Н. Лебедева РАН (ФИАН): ... "противоречие - это что-то типа 0==1".
Почему? Потому что по всем правилам математики: 0 != 1. А это уже является противоречием: (0 == 1), (0 != 1)
Ссылка на: Кто и что управляет миром и техника предсказаний где об этом говорится (когда он рассказывает о Максвелле)
P.S. (0 == 1), (0 != 1) - это тоже, что (False == True), (False != True)
А когда операция сравнения стала тождественна равенству? Сравнение и приравнивание не одно и тоже. Мягко говоря. Нет никакого противоречия в сравнении чего угодно с иным чем-либо, как и с тем же самым. Про это и пытаются сказать вам.
В математике равно пишется как =, в программировании как == (по крайней мере в С++, Python). ... Соответственно, запись (False == True) читается как: (False равно True), что возвращает False
Ccылка: https://msdn.microsoft.com/ru-ru/library/c35t2ffz.aspx
Надо ещё и смысл записи понимать.
Бинарные операторы равенства сравнивают операнды для строгого равенства или неравенства.https://msdn.microsoft.com/ru-ru/library/c35t2ffz.aspx
Пишем равенство, понимаем сравнение..
Еще раз :равно в математике (=) это тоже, что равно (==) на С++, Python.
Любой математик и программист вам об этом скажет. Если считаете иначе, обратитесь на форум программистов или математиков.
P.S. Да, и чтоб вы знали. Когда говорят о нестрогом неравенстве, то имеют ввиду еще больше, меньше. Здесь же (имеется ввиду, равно, не-равно) эти больше или равно, меньше или равно не рассматриваются.
Как определяют оператор сравнения в С++ я вам ссылку привёл. Показать, что это тоже самое, что знак равенства(приравнивания) в математике (между переменными и числовыми выражениями, например), это ваша задача, а не моя. Тема ваша, вам и обосновывать..
Запись (False == True) в данном случае читается так:
False равно ли True?
Ответ очевиден: НЕТ, не равно, поэтому результат False.
В развернутой программе это будет функция с условием "Если".
Если равно ("=="), то True, а если не равно, то False.
Чего вы тут голову себе заморочили?
Если Вы "==" понимаете как присвоение или как утверждение, то в первом случае программа сообщит об ошибке при использовании константы (False) слева, ибо константа не может изменяться и принимать другие значения, а во втором случае - это Ваша личная проблема, потому что всегда 0 != 1, и по-другому быть не может.
По-другому часто бывает в философии, философы часто отождествляют неотождествимое, например, мышление и бытие. А в программировании всегда 0 != 1, иначе программа откажется работать и заставит программиста подумать о своих ошибках.
Точно также будет и с философам, ибо бытие работает иначе, чем представляют себе философы, поэтому бытие заставит всех через страдания исправлять свои знания и свое мышление.
def f(x, y):
z = (x == y)
print(z) #False возвращает
print(z == (x == y)) #True
f(0, 1)
Хитро! Вот уж философия здесь во всей красе и подмена операций с подменой понятий.
В данном случае подменена операция присвоения на операцию сравнения.
Уважаемый, это не одно и тоже:
1. z = (x == y)
2. z == (x == y)
Вы подменили присвоение сравнением.
Для ясности вы должны были ввести еще одну переменную, например "р".
Тогда будет всем понятно, где вы себя обманули.
1. z = (x == y).
2. р = (z == (x == y)).
Вот теперь печатайте спокойно z и р, и никаких противоречий не будет.
Я не подменяю. С точки зрения программирования - это разные операции. Но z как в 1 пункте, так и во 2 пункте - одно и тоже. Именно это показано.
Так математически, например: x=5+2 Следовательно, х=7 Далее, 7=5+2
Да, z - это одно и тоже, но программа будет печать в первом случае z, а во втором случае не z, а скрытую переменную, которую автоматически программа добавляет при выполнении функции "печать".
У Вас в программе есть еще функция "печать", а Вы как-то об этом скромно умалчиваете.
Функция печать к логике не относится, она лишь визуализирует логику.
Логика: (ложь равна не-лжи) - ложь.
Поскольку переменная z - это ложь, то (z == (x == y)) читается как: ложь равна тому, что ложь равна истине.
Получаем: ложь равна не-лжи, ложь равна лжи.
С какой стати печать тут к логике не относится? В одной "печати" показывается значение переменной z, а в другой "печати" показывается результат вычисления целой функции, в которой используется z в качестве АРГУМЕНТА функции, а не ЗНАЧЕНИЯ функции!
В одной печати показывается аргумент функции, а в другой печати показывается значение функции.
Повторяю: не относится.
первый print выводит на экран, что (False == True) т.е. выводит False
второй print выводит на экран, что (False == False) т.е. выводит True
Да Вы хоть вспотейте повторять, но перед тем, как вывести значение функции на печать, функция должна быть просчитана, а результат вычисления должен быть куда-то записан. Можно записать и в z, но это уже будет ДРУГОЕ z, отличное от первого.
У Вас подлог во втором выражении, ибо в нем нет оператора присвоения значения функции какой-то переменной. Введите опереатор присвоения и увидите, что вторая печать показывает не первую z.
Какого черта Вы в одном выражении используете оператор присвоения значения переменной, а во втором нет?
А на каком основании Х в формуле Х=5+2 записываем 7? На том, что 7=5+2 На том, что из 5+2 следует только 7 и ничто иное. Так равны ли (7 и 5+2)? Равны ли (7 и 7)? Равны.
Присвоение - вспомогательная конструкция. В математике ее нет.
Результат сравнения на равенство двух ОДИНАКОВЫХ констант даёт значение Истина. Это вас смущает? Вы считатете, что в этом есть противоречие? То есть, вы просите, чтобы компьютер ответил: равны ли две одинаковые константы (будь это константы числовые, логические, символьные, битовые и пр.). Для этого в компьютере (в языках программирования) предусмотрена специальная команда - сравнить на равенство (есть ещё, например, сравнить на неравенство, на больше/меньше и пр.).
Итак, главный вопрос остаётся у вас неотвеченным - какой ответ вы ожидаете от компьютера, заставляя его сравнить на равенство две ОДИНАКОВЫЕ константы? Он, падла, отвечает вам, что у него результат истина. А вы говорите, что это противоречие. Пусть так. Согласимся на минутку. Тогда получается, что если бы компьютер ответил вам, что две одинаковые константы... не равны между собой, то противоречия можно было бы избежать?
Я вам уже отвечал.
Противоречие в том, что False как равно False, так и не равно False: (False == False), (False != False)
Противоречие в том, что Максим как занял первое место, так и не занял первое место. Такого Максима (который занял разные места одновременно) не бывает
Противоречие в том, что принцесса как находится в первой комнате, так и не находится в первой комнате. Такой принцессы (которая находится в разных местах сразу) не существует.
Это не противоречие! Это функтор такой противоречивый, ну не может он различить два состояния, хоть тресни:
1. Принцесса находится в первой комнате.
2. Принцесса находится во второй комнате.
А вот состояние "принцесса дома" (в одной из комнат) от состояния "принцесса где угодно кроме первой и второй комнаты" и даже "в обоих комнатах сразу" может!
Так и надо этому функтору "глаз набить" ( "Всё-таки надо [ему] дать коленом. Н-надо!").
Угу!
Да, он не может этого сделать. Особенно, если у него об этом не спрашивать.
И чтобы два раза не бегать, сразу вам сообщаю, что этот функтор не может даже по-человечески стакан с водкой опрокинуть внутрь. Это противоречит всей сущности народа российского. А эти америкосы лезут со своими функторами! Жизни, бля, не знают!
Не может - научим, не хочет - заставим! На то он и функтор.
Кругом одна ложь, а когда оду ложь сравнили с другой, появилась истина? Нет ребята демократы, так не бывает.
Истина в том, что была задана кругом одна только ложь.
Вы сейчас уверены, что говорите о булевых константах? Как можно ноль сравнивать с чем бы то ни было, если этот ноль даже потрогать не за что? Другое дело, когда компилятор всё знает, не даст ошибиться, ни шагу влево, ни шагу вправо. А без компилятора как быть?
Итак, главный вопрос остаётся у вас неотвеченным - какой ответ вы ожидаете от компьютера, заставляя его сравнить на равенство две ОДИНАКОВЫЕ константы?
это не главный вопрос.
True
Итак, вы согласились, что записывая свой вопрос к компьютеру о сравнении на равенство двух одинаковых констант, результат должен быть True, т.е. да - они равны.
Тогда само мобой разумеещимся следует считать, что когда вы спрашиваете о сравнении на НЕ равенство этих же двух одинаковых констант, результат должен быть False. Это как раз тот результат, который получается от действия, заключенного в скобки в вашем исходном выражении False == (False != False).
Совершенно логично вы рассуждаете, да результат действия (сравнение на не равенство двух одинаковых констант) в скобках - False.
Остаётся сравнить False c результатом полученным в скобках, т.е. False с False. Для этого вы и записали команду сравнения на равенство: False == False.
Но то, что сравнение на равенство двух одинаковых констант даёт True, вы с этим уже согласились (см.первое предложение данного сообщения). Да они равны - это истина.
Где в этих, по сути, ВАШИХ разъяснения закралось противоречие?
(False != False) (False == False)
Можете к этим выводам прийти иначе. (Х != Х) - это формула. Эта формулы всегда ложна. Она является отрицанием тавтологии (Х == Х). Отрицание тавтологии - это противоречие.
Если это запись на языке программирования, то она означает: выполнить сравнение на неравенство двух одинаковых переменных. Можете называть это формулой или хуёвиной, но компьютер будет интерпретировать её (хуёвину) как команду сравнить на неравенство и выдать результат: истина или ложь.
Результат сравнение одинаковых величин вы интерпретируете правильно (см. сообщение выше по ветке). Совершенно очевидно, что такое сравнение на неравенство двх ОДИНАКОВЫХ величин даст ложь. А сравнение на равенство - истину.
Ещё раз. Последний. Вам уже все говорят об одном и том же. Вы неверно прочитываете (вслух или про себя) запись на языке программирования Х != Х. Вы прочитываете это как Икс не равно Икс. И таким неверным прочитыванием вы туманите себе мозги. Правильным будет такое чтение: Сравнить Икс с Икс на неравенство и выдать результат - истина или ложь.
Это именно (Икс не-равно Икс) , что ложно.
Никаких дополнительных слов здесь не требуется.
P.S. Также как не требуется никаких дополнительных слов, читая: 2=3. Это формула. Она ложна. Поскольку 2=3 не тавтология, то это противоречие. Как и является противоречием формула 0=1, указанное Семихатовым.
То, что всегда ложь - то противоречие.
Бывают: всегда истинные формулы (тавтологии), выполнимые формулы (иногда истинные), всегда ложные формулы (отрицание тавтологии)
"Икс не равно Икс" - это утверждение, которое говорит, что икс не равно икс. А то что это утверждение ложно - это вы додумываете сами. Потому что вы ни хера не смогли бы додумать о ложности или истинности, если бы было записано: Икс не равно Игреку. Оно может быть и истинным и ложным в зависимости от текущих значений Икса и Игрека.
И у вас получается, что ОДНУ и ТУ ЖЕ конструкцию на языке программирования, а именно:
<операнд1> != <операнд2>
вы намереваетесь прочитывать по-разному - в зависимости от того, нравятся ли вам операнды или они не симпатичные. О, смотрите - попались на этот раз одинаковые операнды!!! Мы тогда эту запись прочтём Икс не равно Икс - противоречиво. А если второй операнд Y, то мы будем читать эту же конструкцию, как Икс надо проверить на неравентсво с Y. Но если перед произнесением этой фразы вам кто-то шепнёт на ухо, что, мол, Икс и Игрек равны (зуб на вылет даю), то вы опять с радостью произнесёте: Икс не равно Игрек - это противоречие, потому что мне тут один поц зуб на вылет давал, что они равны.
Где я говорил о формуле (Х не-равно Y) как о противоречии, если область определения их различна?
Не приписывайте мне то, что вам кажется. Цитируйте и не будет проблем.
Вообще, Ваша логика такая:
х=1
принт х
х=х+2
принт х
Батюшки! Парадокс! Х один и тот же, а печатает х=1 и х=3.
Доказано - З=1 !!!
Вы бы хоть потрудились точно цитировать, что я говорю, а не использовать свои интерпретации.
Что касается именно вашего примера, то 3=1 означает, что нет такой 3, которая бы равнялась 1. И нет такой 1, которая бы равнялась 3.
Такие (всегда ложные) конструкции позволяют выражать, что (Х не существует).
Цитирую! Это Ваша программа?
А теперь смотрим, как Вы должны были честно написать ее:
def f(x, y):
z = (x == y)
print (x == y) #False возвращает
print (z == (x == y)) #True
f(0, 1)
Первый и второй принты отличаются или нет? Чего Вы дуру гоните? "Принты" печатают разное, а не одно и то же.
Здесь z вообще можно выкинуть, заменив на (x == y).
Я вам русским языком сказал, что 1-принт возвращает False, а второй возвращает True
Именно потому, что print(False == True) возвращает False, а print(False == False) возвращает True
(False == (False == True)) , что читается: ложь равно (ложь равно истина)
Вы можете людям объяснить, в чем противоречие?
Это Вы зачем написали, если сами пишете тут:
Далее
Как Вы это читаете - это Ваши личные проблемы, потому что Вы читаете неправильно. Здесь нет утверждения, что ложь равно (ложь равно истина). Здесь есть вопрос:
Истинно ли общее выражение, которое содержит в себе вложенный вопрос об истинности другого выражения.
Если читать по-вашему, то есть досконально буквально, то читать нужно так:
Скобка ложь равно равно скобка ложь равно равно истина скобка скобка.
Можете заменить тут слова на свое усмотрение и на свой вкус без всякого смысла, ибо в вашем прочтении смысла нет. Вы неправильно интерпретируете символы.
ложь равно тому, что ложь равно истина
Или, что тоже: ложь равно тому, что ложь не равно ложь
def f(x, y):
z = (x != y)
print(z) #(False != False)
print(z == (x == y)) #(False == False)
#Причем, х y z - это одно и тоже, а не разное.
print({x, y, z}) #вернет {False}
f(False, False)
Капец! В чем противоречие?!!
1. Ложь есть не ложь - это ложь.
2. Ложь есть истина - это ложь.
В чем тут противоречие?
А вот тут у Вас хрень написана, ибо (z == (x == y)) #(False == True).
Повнимательней нужно в программировании.
Да, неправильно. Я с суток.
Правильно так
Не в этом противоречие:
А в этом: (False == False), (False != False)
Какое противоречие может быть в вопросах?
У Вас в скобках стоят не утверждения, а вопросы для сравнения! Зачем Вы путаете вопрос с утверждением (присвоением)?
Вы постоянно тут пишете False == (False != False), и говорите, что нужно прежде, чем решить это выражение, нужно утверждать (сказать), что ложь не равно ложь, и вроде тут есть какое-то противоречие. Но сначала нужно не сказать, а решить выражение в скобках, которое читается как вопрос, а не как утверждение.
В вопросах не может быть противоречий, если там нет утверждений. Противоречивыми бывают только утверждения!
Если я напишу 3=2, то это будет противоречие, потому что здесь утверждается, что 3 будет равно 2. А если я напишу 3==2, то противоречия никакого нет, потому что тут не утверждение, а вопрос "равно ли три двум?" или по-другому "истинно ли, что 3=2?".
Вы нифига не понимаете суть операторов сравнения, если я напишу в программе 3 != 3, это не означает, что три не равно три, это означает вопрос, а не утверждение.
Если я напишу в программе 3>5, то это не означает, что три больше пяти.
Вы написали здесь, что False=0, но и это ерунда. False - это смысловая, а не цифровая константа, и многие программные среды выводят на печать именно False, а не ноль.
Есть три логики:
1. Смысловая.
2. Численная.
3. Цифровая.
Единица может означать смысл, команду, число и логику. В этом списке "смысл" означает связь с реальностью, то есть с ее законами. Не нужно мешать всё кучу. Все интерпретируется контекстом (смыслом программы).
Если программная среда несовершенна, то это не проблема Лжи и Истины, а проблема программистов. Если программисты что-то напортачили, то это их личная проблема. Калькуляторы тоже часто имеют глюки, как были глюки в Экселе. Винда тоже постоянно обновляется, выгребая баги.
Никакого противоречия Вы не показали, а лишь читаете неправильно код программы, подобно софизму (парадоксу) лжеца, или Вы просто умиляетесь программным глюкам.
Интерпретация "исключающего или" тоже у Вас неверно написана. Там стоит инверсия, а никакой инверсии исключающее или по смыслу не дает, это просто побочный эффект "исключающего или", а не смысл. Цифровая логика всегда должна даваться только в матрицах, а не в формулах.
Если использовать "исключающее или" как инверсию при второй единице, то на практике может получиться, что вместо того, чтобы выбрать из вариантов "1 или 0" получится выбирать из "1 или -1". И когда вы будете думать, что Вам возможно выдадут заплату или не выдадут, а получится так, что должны будете заплатить Вы, а не Вам.
Посмотрите по этой ссылке. Мне кажется, что более подробно разъяснить ошибку уже будет трудновато. Не?
не
Какие вопросы, блин. Процитируйте хоть один учебник, где Х==Х означало бы вопрос.
Ждемс!
1) в математике: 2=3 - ложь Никаких вопросительных конструкций здесь нет. Это формула, которая всегда ложна. И все
2) в программировании: 2==3 - ложь Никаких вопросительных конструкций здесь нет. Это формула, которая всегда ложна. И все
Я прослушал популярную лекцию д.ф-м.н Семихатова. Там действительно в коротком отрывке после 15 мин. 50 сек., говоря об УРАВНЕНИИ(!!!) Максвелла он использует слово "противоречие" и для пояснения этого понятия (противоречие) говорит: ну, мол, это когда в результате получается, что-то типа, ноль равно единице.
Всё это НИКАКОГО ОТНОШЕНИЯ к вашему фрагменту FALSE == (FALSE != FALSE) НЕ ИМЕЕТ!!! Причём, не имеет по многим причинам. Например потому, что в программировании знаки "==" и "!=" это далеко НЕ ТО ЖЕ САМОЕ, что знак "=" в уравнениях математики. Ещё раз. Знаки "==" и "!=" - это операции сравнения, которые возвращают булево значение True или False. В разных языках по-разному осуществляется ВНУТРЕННЕЕ хранение булевых переменных: в одних языках в виде integer представлении нуля и единицы; в других - в виде ОДНО-битового нуля или единицы; в третьих - в виде char символов, т.е. букв T и F; в четвёртых - и т.д.
Тем не менее, практически во всех языках программирования смысл операции сравнения тот же самый - это выдача "на-гора" булевого значения "истина" или "ложь". Максвелл в своих векторно-дифференциальных уравнениях не оперировал булевыми выражениями и у него знак равенства означал то, что он означает в математических УРАВНЕНИЯХ.
Для простоты объяснения, в математике знак "=" означает УТВЕРЖДЕНИЕ равенства (которое, иногда, ещё надо доказать). В программировании знак "==" означает конкретную операцию сравнение двух аргументов - слева и справа от знака "==". Хотя это тоже не принципиально где именно расположены аргументы такой булевой операции. Например в записи Лукашевича (известный польский логик) сначала записывается сама операция, а за ней в скобках - два аргумента через запятую. Причём, есть языки программирования, в которых именно так записывается сравнение, типа: Сравн (A,B). То есть знака "=" или "==" - нет вообще.
Итак, в приведённом вами выражении FALSE == (FALSE != FALSE) путаница возникает в вашей голове из-за многозначности слова "равно" естественного языка (русского, например). Подставьте туда интерпретацию слова "равно" в смысле "все равны перед законом" и вы получите ещё один вихрь в голове, который затуманивает смысл операции "==" в программировании.
Нет, это тоже самое (= в математике - тоже, что == в программировании)
Вот вам пример, как учат ребятишек в школе.
Цель: вспомнить высказывания, представленные языком математики, и научиться определять истинные высказывания.
Приложение 1.
Определи истинные высказывания.
Выполнение задания в тетради №3.
Цель: повторить и закрепить знания о ложных высказываниях, умения различать истинные и ложные высказывания.
Приложение 1.
– Укажи ложные суждения:
Из этих школьных примеров:
2 + 2 = 4 возвращает True
2 + 2 = 5 возвращает False
2 + 3 = 5 возвращает True
10 делится на 3 без остатка возвращает False
P.S. Или вот вам пример из вики, ... где говорится, что ...
Из этой записи выходит, что конструкция "==" в языке программирования означает "есть". Вы это серьёзно? Потому что с таким же успехом вы можете утверждать, что она означает "кушать". Впрочем, хозяин - барин: "что захочу, то и буду воображать!"
Примечание: на "хозяин - барин" у меня никаких возражений нет. Свобода слова, бля!
В обыденно речи вместо (равно) говорим (есть). Если же читать математикой, то ..
Ложь равна тому, что ложь не равна лжи.
P.S. Кроме того, она употребляется, когда говорят о каком-нибудь свойстве. Например, (белый снег - белый), что истинно по той причине, что белый(белый снег) == белый. Здесь используется предикативная запись P(x), означающая, что Х обладает свойством P.
Вы написали FALSE == (FALSE != FALSE)
Это на обыденной речи? Математической? Птичей? Или это фрагмент программного кода на языке ПИТОН?
На python: False == (False != False)
На С++: false == (false != false)
Математика: false = (false ≠ false)
И по вашему выходит, что на ПИТОНЕ и на С++ знак "==" означает... есть. Мне кажется, что тут уместнее сказать "пить". Причём, не в сокращённой форме, а в полной: "пить надо меньше!"
Спокус, мне начинает надоедать ваше хамство.
Ссылка: на толковый словарь Ожегова
связка, то же, что есть2 (в 1 знач.) (разговорное). Ложь и есть ложь. Друг он и есть друг. Так и есть (разговорное) - в самом деле, действительно так. Поезд опаздывает? - Так и есть!.
Отсюда: Ложь и есть ложь это false = false
Воистину истинное хамство заключается в том, что на мою (сотую) просьбу объяснить что вы понимаете под КОНСТРУКЦИЕЙ "==" В ЯЗЫКЕ ПРОГРАММИРОВАНИЯ ПИТОН ИЛИ С++, вы приводите мне разъяснение из... словаря русского языка Ожегова. Хорошо, что не Даля или Брокгауза и Ефрона! Потому что если из Даля, то в приличном обществе (за преферансом) следует обычно - подсвечником по голове.
Итак, последний раз: является ли конструкция "==" в указанных языках программирования оператором сравнения? Или эта конструкция служит лишь для утверждения, типа А есть А ? Мол, знай и заруби себе на носу. Или как пел Высоцкий: выучи, вызубри, не забывай, и повторяй, как заклинанье...
Равно (=) в математике - это тоже, что равно (==) в программировании.
Если в программировании написать, например, (Х = 2 + 3), то потом (Х == 2 + 3) всегда вернет True.
В более общем виде для программирования: Y = F(Х), где F - какая-то операция над Х, то Y == F(Х) всегда вернет True
Кто вернёт True? Кто возвращает True ? Куда возвращает?
Сто первый раз спрашиваю: что означает конструкция "==" в программировании на ПИТОН или С++ ? Что это за зверЪ такой?
В сто первый раз отвечаю:
"==" в программировании - это тоже, что "=" в математике.
True тоже, что 1:
True = 1 (в математике), True == 1 (в программировании)
P.S. Когда для С++ резервируется память под int, то это просто означает, что резервируется под число n-сложности. Для самого первого натурального числа, достаточно и одного бита. Т.е. вместо записи, например, (00000000001) можно зарезервировать только (1). И эти величины (00000000001) , (1) будут равны.
Поэтому python складывает: (е == e) + 4 + (y == u) + (r == r), возвращая число (6) поскольку (y == u) является false, т.е нулем.
Но вы ведь своими собственными руками ДВА РАЗА привели мне таблицу, где сказано, что "==" - это оператор (знак "==" находится в колонке, которая называется "оператор").
Значит так... медленно повторяйте за мной - по слогам: о-пе-ра-тор. Среди многих других операторов есть "==". Его можно назвать "сравнение на равенство". То есть - ОСУЩЕСТВЛЯЕТ ОПЕРАЦИЮ сравнения. Есть и обратный ему оператор "!=" - этот оператор сравнивает на неравенство. Есть арифметические операторы, например "+", "-", "*"... Они - эти операторы - осуществляют арифметическое сложение, вычитание, умножение...
У операторов есть, так называемые, операнды - то с чем именно производится сложение, вычитание... или сравнение на равенство, на неравенство, на больше или меньше...
Так вот, заканчивая ликбез, надо наконец усвоить, что аналогом таких программистских операторов в математике являются арифметические операции сложения, вычитания, умножения, возведение в степень и пр. Аналогом программистских операторов сравнения (на равенство или неравенство) в математике являются булевы операции. Они же являются аналогом программистских операторов AND, OR и т.д.
Итак, оператор (например "==") ВЫПОЛНЯЕТ ДЕЙСТВИЕ с операндами. В этом смысле математический знак равенства в элементарном выражении : 2+2=4 НЕ ЯВЛЯЕТСЯ оператором. Зато в этом выражении (2+2=4) именно знак "+" яваляется точным аналогом оператора в программировании (оператора сложения, который тоже имеет обозначение "+"). То есть, мы установили, что "==" - не аналогичен математическому "=", но аналогичен математическим операциям ("+", "-", или булевым). В то время как математический знак "=" в выражении 2+2=4 действительно означает то, что вы говорите , то есть он нечто утверждает , мол, то что слева равно тому, что справа или говоря на жаргоне (другими словами - кося под математика) можно сказать: А есть А или 2+2 есть 4. Здесь знак "=" НИКАКОЙ ОПЕРАЦИИ НЕ ВЫПОЛНЯЕТ!!! [В отличие от "==" в программировании.]
Математически 2+2=4 операция возвращает True (истинно). Истинно может быть возвращено только для случая, когда операнд-слева равно операнду-справа. Но такое может быть только по отношению к самому себе: только для Х=Х. Когда Х не-равен себе это означает, что такого Х не существует.
Из учебника Колмогорова (математическая логика): пустое множество, т.е множество в котором нет Х - это {Х | Х не-равно Х}. Соответственно, непустое множество - это множество {Х | Х равно Х}.
Итого (при любых подстановках вместо Х):
X=Х возвращает (в математике) True, Х==Х возвращает (в программировании) True, Х≠Х возвращает (в математике) False, Х!=Х возвращает (в программировании) False.
P.S. Пример как учат ребятишек в школе уже приводил: 2+2=4 - это истинное высказывание (т.е возвращает True), 2+2=5 - это ложное высказывание (т.е. возвращает False).
P.S. Колмогоров / Математическая логика /стр 130.
Тяжёлый случай.
Вы не сможете записать как строчку кода математическое выражение X=X. С участием только X и оператора ==.. транслятор не поймёт вашего гениального творчества..
# математическое Х=Х это
# тоже, что в программировании:
def f(X):
return X==X
#Вместо Х можно подставлять
#любое значение
#Это же верно для программирования
Все будет работать.
С участием только X и оператора ==
У вас два лишних оператора. Увы. Кое-кто тут утверждал что:
Операторов больше написать понадобилось.. какая неожиданность.
И что? То, что объявление функции резервирует точку входа для возвращения Х==Х, что в в математике в явном виде не делается, сути дела, т.е. логику не меняет: (X=X в математике) тоже, что (Х==Х в программировании). В конце концов, закон тождества Х=Х тоже в книжке по логике на какой-то странице пишется: аналог объявления функции.
То есть без доп. операторов у вас не получится заменить знак = на "тот же самый" оператор сравнения ==. То что вы должны показать объявив их тождество. Вне дополнительных условий. Вот к X таких вопросов нет, переменная она и есть переменная.. Приведите запись равенства = через сравнение == согласно собственному утверждению, а не объясняйте какая логика позволяет вам противоречить самому себе.
Слава богу, что мы дошли до случая, когда ХОТЬ В ЧЁМ-ТО получили обоюдное согласие. Я имею в виду, что:
1) Вы согласны, не возражаете, что в программировании знак "==" - это оператор!!! [Согласно приведённой вами в качестве подтверждения таблицы. Причём, два раза, чтобы такие тупоголовые, как я - наконец зазубрили.]
2) Вы также не возражаете, что оператор осуществляет операцию над операндами. Оператор "==" имеет два операнда (слева и справа от знака "=="), которые, собственно, и сравниваются (не нами, а с помощью машинных команд).
3) Вы также не возражаете, что результатом сравнения в данном случае является булева конструкция True или False (причём, как говаривал тов.Аристотель: третьего не дано).
4) Вы снова-таки согласны, что аналогично оператору "==" в программировании есть оператор "!=", который работает точно так же с двумя операндами, но сравнивает их на неравенство.
Теперь делаем выводы из перечисленных 4-х пунктов нашего мирного соглашения, демонстрируя их на приведённом вами же (в заголовке) выражении: False == (False != False)
а) Рассматриваем выражениен в скобках (False != False). Слева от оператора "!=" стоит один операнд - булева константа; такая же константа стоит справа от оператора в качестве второго операнда. Оператор осуществляет операцию сравнения двух операндов. В данном случае операнды сравниваются на неравенство, т.к. оператор "!=". Совершенно естественно, что результатом сравнения на неравенство двух одинаковых констант будет Ложь, т.е. False. Действительно, любой человек (от пациента в дурдоме и до акад.Колмогорова, о присутствующих - ни слова) на вопрос: истиной или ложью является утверждение, что пять не равно пяти - ответит, что это ложь. Притом он - отвечающий - может даже удивиться (чего, мол, приеб...ся - легавый ты, что ли?)
б) Значиццца, вместо выражения в скобках мы можем подставить с большущим трудом вычисленный оператором "!=" результат, а именно False (cм.предыдущий пункт). Теперь наша конструкция упростилась: False == False . Осталось только выполнить оператор "==" над двумя операндами, которые являются булевыми константами. Слева и справа от оператора расположены одинаковые константы. Естественно, что результатом сравнения одинаковых констант на равенство, будет истина, т.е. True.
Отсюда не ясен ваш ключевой вопрос о противоречии. Где тут запрятано противоречие и в чём оно состоит? Другими словами, укажите хотя бы пункт 1), 2), 3), 4), а) или б), с которым вы не согласны, что вызывает у вас возражение. [Гражданина Колмогорова с его пустым множеством на стр.130 оставим пока в покое.]
Все верно. Согласен со всеми пунктами, включая буквенные: 1), 2), 3), 4), а) б)
И с Колмогоровым я тоже согласен. Поскольку ... (Х нет) == (Х != Х) ... и ... {X | X ≠ X} ... отображают тот же смысл: X нет, если Х не равен себе.
Хочу только добавить, что для этого не обязательно (для передачи смысла, что Х нет) использовать множество. ... (Х != Х) в программировании и (X ≠ X) в математике - одно и тоже.
Вы, когда вместо (False != False) подставляете False:
1) с одной стороны совершенно правы (и я так делаю в силу присваивания), получая (False == False), где выделенное жирным есть то, что возвращает неравенство (False != False)
2) но с другой стороны запись [False == (False != False)] в ее полном виде означает: ложь равна тому, что ложь не равна лжи. Эти два утверждения отрицают друг друга: (False == False), (False != False).
Ссылка1: Если сложное высказывание истинно для всех значений входящих в него переменных, то такое высказывание называется ТОЖДЕСТВЕННО ИСТИННЫМ или тавтологией ... Все математические, физические и др. законы являются тавтологиями
Комментарий к ссылке1: (False == False) - это пример тавтологии
Ссылка2: Тождественно-ложные формулы являются ложными при всех наборах истинностных значений входящих в них переменных. Тождественно-ложные формулы представляют собой отрицание тождественно-истинных формул и являются нарушением логических законов.
Комментарий к ссылке2: (False != False) - это пример отрицания тавтологии, т.е это (not (False == False) ). В более общем виде: формула (Х != Х) при каких угодно значениях вместо Х всегда ложна.
Итог: (False == False) всегда истинна, (False != False) всегда ложна.
Это мне напоминает анекдот почти 100-летней давности, когда мужику в деревне несколько дней объясняли устройство трактора, и когда под конец его спросили понял ли он, тот ответил, что всё понял, но осталось неясным куда всё-таки надо лошадей цеплять.
Итак, о противоречии. Оно заключается в том, что согласно закону Аристотеля, вы не можете одновременно соглашаться с моим объяснением и с представленным своим уточнением. Потому что одно противоречит другому.
Или вы согласны, что знаки "==" и "!=" в программировании есть операторы, которые выполняют операции сравнения на равенство и неравенство, или вы продолжаете считать, что это не сокращённые названия операторов сравнить, а знаки равенства и неравенства, тем более "...в силу присваивания". Знак присваивания во многих языках изображается как "=". Поэтому знак операции сравнения другой, а именно - "==". В языке Паскаль знак присваивания ":=", поэтому там знак сравнения - просто "=". В некоторых языках знак присваивания имеет вид "стрелки влево", т.е. указание на то, что переменной слева присваивается то, что находится справа.
В вашем выражении False == (False != False) нет никакого присваивания. Там есть лишь недоступные (в спрятанной рабочей области) результаты операций сравнения. Итоговый результат можно было бы сохранить, присвоив его какой-нибудь переменной, например, Х. Тогда запись с оператором присваивания была бы такой: Х = False == (False != False). В эту булеву переменную Х попал бы результат. В нашем случае - True.
Комментарий неверен. Потому что тавтология говорит об истинности логической конструкции, для всех значений ПЕРЕМЕННЫХ(!!!) входящих в неё. В вашем же изначальном выражении False == (False != False) нет ни одной переменной! Ваша конструкция состоит только из констант.
Когда вы пишите False == False, то главной причиной САМОзатуманивания мозгов является непроизвольная попытка прочтения этого выражения на естественном языке, а именно: False равно False. Но (в сотый раз) этот знак не есть "равно". Это выражение следует читать как: False сравнить на равенство с False.
Когда мы говорим "равно", то мы утверждаем (или допускаем), что то, что слева равно тому, что справа. Но в данном случае "==" мы не утверждаем, а СПРАШИВАЕМ - а ну-ка, ответь: равно или не равно!
Думаю, что именно в неправильном, но непроизвольном (подсознательном) ПРОЧТЕНИИ выражения False == (False != False) кроется дальнейшие неправильные выводы о каком-то противоречии. То есть, проблема, думаю, чисто психологическая. На вас давит схожесть знаков "==" и "=" в программировании и довольно-таки многозначных интерпретаций знака "=" в разных разделах математики.
Ну, так подставьте в формулу (X != X) или, что тоже в формулу (Х ≠ Х) эту False. При этом учтите, что количество элементов множества, которые будут подставлены в эту формулу, произвольно. Этим множеством может быть и множество, в котором только один элемент, например, False
Если сомневаетесь, то спросите у математиков/программистов:
1) формула в математике (Х = Х) - это тоже, что формула в программировании (Х == Х)?
2) формула в математике (Х ≠ Х) - это тоже, что формула в программировании (Х != Х)?
Вам ответят "да"
Есть. Вот это (False != False) вернет False. Возвращаемое значение означает операцию присвоения и для этого не обязательно (но можно) выделять переменную.
Например, так:
def f(X):
Y = (X != X)
Y == (X != X)
Ранее вы согласились, что в программировании знаки "==" и "!=" являются операторами, которые выпоняют операции сравнения.
Теперь вы должны показать, что в математике знак "=" тоже выполняет операцию.
Для этого предлагаю для начала открыть страницу в Википедии со статьёй "Операция (математика)".
Там, в нижней части страницы указаны арифметические операции, операции матанализа и логические операции. Даются к тому же ссылки.
Отыщите там операцию, которая обозначается знаком "=".
В математике (=) есть то, что при подстановке операнда-слева и операнда-справа, позволяет говорить об истинности или ложности всего высказывания.
Операнд - это атрибут оператора. Нет оператора - нет и операндов. Оператор же служит для выполнения неких операций. Причём, все эти термины из области кибернетики.
Таким образом вам сначала требуется доказать, что в математике знак "=" обозначает какую-нибудь операцию, а потом уже можно заняться поиском того, с чем именно выполняется эта операция (с операндами, аргументами, или с хером собачим).
Откуда вы взяли, что математический знак "=" есть операция?
Например, в Википедии, есть статья "Знак равенства"
Там сказано, что в математике этот знак пишется между двумя идентичными выражениями. И нет ни слова об операции. Больше того, именно для ПРОТИВОПОСТАВЛЕНИЯ математического и программистского в этой статье специально оговорено применение такого или похожего знака в ИНФОРОМАТИКЕ - именно как ОПЕРАЦИЯ сравнения.
Более точно математический знак "=" дан в английском варианте ЭТОЙ ЖЕ статьи: "Equals sign"
Определение гласит: The equals sign or equality sign (=) is a mathematical symbol used to indicate equality.
Что переводится на русский как: знак равенства (=) - это математический символ, используемый для ОБОЗНАЧЕНИЯ равенства.
Далее, в английском варианте, есть специальный подраздел об использовании этого символа в математике и в компьтерном деле. Именно, чтобы подчеркнуть разницу, чтоб люди не путались, и правильно УЧИТЫВАЛИ КОНТЕКСТ использования этого знака.
Впрочем, аналогичные "проблемы" могут встретиться и со знаком "+" : "Коммунизм - это советская власть плюс электрификация всей страны". Или вы будете настаивать, что здесь "плюс" - точный эквивалент математической операции сложения? Если да, то у вас выйдет, что электрификация - это коммунизм минус советская власть. Впрочем, с выражением False == (False != False) вы поступаете аналогично.
В математике операция (равно) трактуется и как присвоение, что соответствует (=) присвоению в программировании и как равенство двух термов, что соответствует (==) в программировании.
Оператор присваивание вообще впервые появился при разработке первых языков программирование. Широко начал использоваться с появлением Фортрана в 1954 г. Такого понятия в математике нет - см. Википедия, статья "Присваивание".
Но ведь вы же уже согласились, и сами привели таблицу, что в программировании "==" - это оператор, а не утверждение равенства. То есть прямо-противоположное - не утверждение, а вопрос - равны ли? И результат будет истина, если равны, и ложь, если не равны. К тому же, вы должны показать какой-нибудь нормальный источник, в котором фигурирует МАТЕМАТИЧЕСКИЙ знак "=" именно как оператор, который выполняет операцию сравнения на равенство.
Кроме того, вас не смущает, что один и тот же знак в математике ("=") трактуется И КАК присваивание, И КАК... непонятно что. Потому что терм это понятие не самой математики, а скорее - МЕТАматематики. Он служит для описания математической аксиоматики, которая нуждается в проверке на непротиворечивость при модификациях или добавлении аксиом.
Это оператор утверждения равенства
Нет, не смущает. Если вы сначала присвоите (Х = 5 + 2), то потом получите (Х == 5 + 2)
А если нет равенства, то он всё равно утверждает равенство?
Я вам приводил скин на мат. логику Колмогорова, в котором он объясняет что выражение (терм-слева = терм-справа) возвращает либо истину, либо ложь.
Вот еще подтверждение моих слов (Т. Ю. Грацианова / ПРОГРАММИРОВАНИЕ в примерах и задачах МГУ-школе/ стр 9-10:
В математике знак равенства используется в двух случаях: когда надо проверить, равна ли правая часть левой (например, «если x = 0, то…»), когда надо подсчитать значение правой части и положить переменную в левой части равной этому значению (т. е. присвоить ей это значение). Чтобы избежать двойного толкования этого знака, будем в первом случае использовать знак равенства «=» и называть это действие сравнением, а во втором — знак присваивания «:=», а действие — присваиванием переменной нового значения.
В книге Грициановой явная опечатка. Книга полностью посвящена программированию (см. заглавие и весь контекст).
В приведённом вами абзаце ВСЁ СТАНОВИТСЯ на свои места, если замиенить одно только слово: "В математике" на "В программировании". Тогда становится ясным и знак ":=", которого в математике вообще не существует, но есть в языке Паскаль, где, кстати, операция сравнения задаётся одиночным знаком "=", в отличие от большинства других языков, в том числе и Питон, и С++.
У Колмогорова ничего не сказано о том, что знак "=" означает ВЫПОЛНЕНИЕ неких действий (операций).
Но всё же вы не ответили на мой вопрос, а ушли сразу в "несознанку".
Где сказано, что опечатка? Там явно говорится о применении математики в программировании.
1.1 Присвоение в математике: x = 5 + 2
1.2 Присвоение в С++: х = 5 = 2
1.3 Присвоение на паскале: х := 5 + 2
2.1 Возвращает True в математике: 7 = 7
2.2 Возвращает True в С++ : 7 == 7
2.3 Возвращает True на паскале: 7 = 7
P.S Еще раз: спросите мнение математиков/программистов. Я уже мнение программиста приводил
Жаль, что в Википедии всё напутали. Причем, как в русской версии, так и в английской. Они не догадались спросить у настоящих математиков-программистов.
Ну, и под конец, поставьте последний штрих - сделайте это произведение окончательно гениальным. Ответьте всё-таки:
А если нет равенства, то он (оператор) всё равно утверждит равенство?
7= 7 вернет True
7 = 8 вернет False
Так в чём же смысл УТВЕРЖДЕНИЯ РАВЕНСТВА? В том, что его иногда утверждают, а иногда - нет?
Что при равенстве термов возвращает верно, при неравенстве термов возвращает неверно
Понял. Значит знак "==" в программировании УТВЕРЖДАЕТ РАВЕНСТВО. В том смыле, что иногда утверждает равенство, а иногда утверждает неравенство. Или короче - утверждает равенство в том смысле, что иногда утверждает, а иногда - нет.
Причём, наряду с этим знак "!=" УТВЕРЖДАЕТ НЕРАВЕНСТВО. Опять в том же смысле - иногда утверждает, а иногда - нет.
Всё. Закончили. Занавес! Хорошего вам программирования!
Всего хорошего!
-Вы утверждаете, что это так?
-Да,утверждаю.
-Это так?
-Да,так.
-А если это не так?
-Все равно утверждаю!
-Что?
-Утверждаю,что не так.
Случай действительно скорее психологический..
Настя (СОШ 4-класс) кванторы
https://www.youtube.com/watch?v=yHq8SyRcYgE
1) Если каждое Х есть, то не бывает, чтобы хотя бы одного Х не было.
2) Если хотя бы одного Х нет, то не бывает, чтобы каждое Х было.
3) Если каждого Х нет, то не бывает так, чтобы хотя бы одно Х было.
4) Если хотя бы одно Х есть, то не бывает так, чтобы каждого Х не было.
P.S. Только скобку забыла закрыть:)
Нечто существует, если равно себе (что имеет прямое отношение к законам де Моргана)
Если нечто не равно себе, то это уже иное нечто
В Питоне я не бум-бум. Но всё же код мне кажется немного странным.
Ведь, если в языке существует тип данных set (множество), то очевидно на сам язык ложится ответственность за то, чтобы элементы множества были уникальными. Или я тогда не понимаю смысл типа данных set.
Но если это так (т.е. если это гарантируется языком), то странным выглядят циклы проверки.
Можете разъяснить?
Чтобы показать, что из двух множеств можно получить третье (по правилам: И, ИЛИ), используя только операции равно, не-равно (т.е. не используя эти И, ИЛИ). Что доказывает, что операции (равно, не-равно) являются базовыми для любых других лог. операций, включая операции со множествами.
Для множества, которое образуется в результате пересечения, делается так: берется первый элемент первого множества и проверяется на равно с каждым элементом из второго множества. Если этот первый элемент первого множества равен с каким-либо элементом второго множества, то добавляем его в результирующее множество. Аналогично поступаем с другими элементами первого множества.
Алгоритм мне был понятен и без этого объяснения. Тонкость же заключалась в том, насколько корректно язык Питон ведёт себя с математическим понятием множество. То есть, допускает ли он одинаковость элементов внутри множества? И что в языке предпринимается, если в загруженном множесте (т.е. с описанием set) есть два или более одинаковых элементов? Это и был мой вопрос.
Насколько я успел "одним глазом" уяснить, в языке что-то предусмотрено для решения этого вопроса: множество состоит из уникальных элементов.
Так вот, если это так, то ваш внутренний цикл, насколько я понимаю, ВСЕГДА сравнивает ВСЕ элементы второго множества с текущим элементом из первого. В этом-то и странность! Ведь если какой-нибудь элемент сравнился (и таким образом был занесён в результирующее множество), то надо ещё выполнить команду break, чтобы остановить внутренний цикл, т.к. второго такого же элемента не сыщите. То есть, дальнейший просмотр - это мартышкин труд. Это может быть огромное число лишних действий.
Мало того, не всё в порядке и с внешним циклом, т.к. если это множество с большим количеством элементов, и оно сопоставляется с небольшим множеством, то если количество найденных (сравнимых) элементов в какой-то момент уже достигло количество элементов во втором множестве, то ВСЕ дальнейшие проверки элементов первого множества становятся бессмысленными - надо выходить из цикла, потому что опять же получается мартышкин труд.
Представьте себе что это статистическая "избирательная система". И надо проверять входит ли данная группа избирателей в общее число избирателей... допустим, области (района, города и т.д.). Число элементов у таких множеств может быть сотни тысяч. Результаты в таком случае могут быть задержаны по времени так, что они уже никому не будут нужны.
Я и не старался сократить во времени алгоритм. Ваши замечания верны. ... Но, повторюсь, задача была показать логику, а не в оптимизировать скорость его выполнения.
Тогда зачем же вы взяли для пересечения именно множества (set)? Можно было пересекать обычные списки.
Но всё же на мой вопрос вы так и не ответили. А я не хочу умереть дураком ("родиться дураком не стыдно, стыдно умереть дураком"). Каким образом в языке Питон решается проблема одинаковости элементов в типе данных, которое называется "множество" (set) ? Когда, кто и как узнаёт, что в поступивших данных, которые описаны как множество, есть дупликаты элементов?
Можно
Как и в математике (как именно внутри языка это написано мне не известно)
x = set()
x.add(3)
x.add(3)
print(x) #вернет {3}, а не {3, 3}
Спасибо за ответ. Вы своими ответами, таки, заставите меня на склоне лет выучить ещё один язык программирования. На этот раз - Питон. И тогда выражение "в гробу я видел ваш Питон" обретёт вполне логичный, и главное - полный, смысл. :)
Итак, что я вычитал о множествах в Питоне. Главная особенность именно заключается в том, что глупо моделировать работу с множествами при помощи циклов сравнения и т.д. Потому и введён в Питон такой тип данных как set. Элементы множества хранятся не в связанной (последовательной) области памяти, а особым специальным образом - таким, что основные операции с множествами будут делаться намного быстрее, чем перебор элементов "в лоб."
Поэтому всю прграмму, которая выполняет пересечение двух множеств путём перебора можно заменить на встроенный в язык Питон специальный оператор intersection с двумя операндами. И будет это выглядеть так:
Y=A.intersection(B)
Результат пересечения множеств А и В будет в Y.
Что для логики вечность ... и какие-то там +- времени? ... Ничто:)
В книге известного американского экономиста украинского происхождения Терещенко (50-60-е годы) есть поучительный пример на эту тему.
В одной слаборазвитой стране западная, так сказать, цивилизация решила наладить совремённую почтовую связь. Были установлены в отделениях связи специальные почтовые ящики для писем "Внутри", "В Европу", "В Америку"... Закуплены дорогие сортировочные машины - конвейерного типа, и т.д. Всё это хозяйство налаживалось несколько месяцев. Потом, как пишет Терещенко, наблюдали следующую картину: в конце дня приходил босой старик-туземец и сваливал всё отсортированное в один большой мешок и дальше всё шло по уже проверенному, отработанному алгоритму.
Это я к тому, что разработчики Питона - дураки - трудились над типом set напрасно.
x = 'x'
print(x != (not x)) #вернтет True: да, элементы различаются
Ссылка на лекцию: Основы математики / Александр Храбров https://www.youtube.com/watch?v=FXtxcGne8S0
Из той же лекции Храброва (о предикате равенства) ... Х=Х, что на Python пишется как Х==Х
Как раз это-то и надо доказать! А именно, что Х==Х на Питоне - это Х=Х в матенматике.
Не буду повторяться.
P.S. Добавлю только, что в Pythone есть оператор is, который при проверке возвращает False для операндов, для которых верно ==, но они (как объекты) расположены в разных участках памяти.
Забыл дописать. Надо доказать не только то, что Х=Х в математике это то же, что Х==Х в Питоне, но ещё и то, что Х=Х в математике - это НЕ то же самое, что Х=Х в Питоне.
P.S. На всякий случай. Я настаиваю, что Х=Х в математике - это не то же самое, что Х==Х в Питоне и НЕ то же самое, что Х=Х в Питоне (или аналоичных языках программирования).
Ваше право так думать
Вы выращиваете непризнанного гения. Помнится был персонаж, заявлявший что Абсолют должен содержать то, что он не может содержать, потому что он (по определению) должен содержать всё, а всё это даже то, что не может содержать Абсолют, потому что оно всё..железная "логика". К чему это я? Да, так вот задача подобного "гения" неявно свести дискуссию к обмену мнениями объявив, что никто не запрещает вам так думать .. против этого утверждения любые аргументы бессильны.Настаиваете? Он вам не запрещает..
В логике, если в отношении чего-то удается доказать, что оно как ложно, так и истинно, то это означает, что этого не существует.
Вот один из примеров. Так, если [в первой комнате находится принцесса], то [в первой комнате не находится принцесса]. .... Принцесса, находящаяся в первой комнате - это та же принцесса, не находящаяся в первой комнате. Следовательно, такой принцессы не бывает ... согласно (Х нет) == (Х != Х) == (Х == не-Х), где Х - "принцесса в первой комнате"
Предика́т (лат. praedicatum — заявленное, упомянутое, сказанное) — это утверждение, высказанное о субъекте. Субъектом высказывания называется то, о чём делается утверждение.
Предикат в программировании — выражение, использующее одну или более величину с результатом булева типа.
Предика́т (n-местный, или n-арный) — это функция с множеством значений {\displaystyle \{0,1\}} (или {ложь, истина})
Как же записать Х=Х в предикативной форме P(X)? Так: =(Х). И она возвращает True. Тогда записать Х≠Х можно записать ≠(Х), которая возвращает False. Эти формулы Х=Х, Х≠Х являются ничем иным, как (предикатом Х=Y), областью значений которых являются истина, ложь.
В примере с принцессой: Х=Х, Х≠Х. Следовательно, такого Х нет.
P.S. Из Х≠Х следует Х=Х, Х≠Х
Сколько принцесс находится в первой комнате? Ноль.
Нет принцессы в первой комнате == (принцесса в первой комнате == принцесса не в первой комнате)
print("Принцесса в первой комнате" == "Принцесса не в первой комнате")
#вернет False, т.е. ноль принцесс в первой комнате
Вводим возможные условия для двух булевых переменных:
П (принцесса) не находится в 1-ой комнате (она во 2-й) – значение 0;
находится в 1-ой комнате (не во 2-й) – значение 1.
Т (тигр) не находится в 1-ой комнате (он во 2-й) – значение 0;
находится в 1-ой комнате (не во 2-й) – значение 1.
Таким образом в принципе возможен любой из четырёх вариантов:
00 – П и Т не находятся в 1-ой комнате, т.е. они во 2-й комнате;
01 – П во 2-й комнате, а Т в 1-ой;
10 – П в 1-ой комнате, а Т во второй;
11 – П и Т находятся в 1-й комнате.
Согласно условию задачи табличка либо на 1-ой комнате истинная, либо – на 2-й (булево отношение «исключающее ИЛИ»).
Табличке на 1-й комнате с П и Т соответствует только вариант 10.
Табличке на 2-й комнате с П и Т может соответствовать любой из обусловленных вариантов, т.е.: 00, 01, 10, 11, то есть эта табличка не может быть ложна. Из чего следует, что ложна табличка на 1-й комнате. Значит вариант 10, который на ней написан - ложный.
Вывод: возможен любой из трёх вариантов: 00, 01 и 11.
Где противоречие – опять осталось неизвестным.
http://refeteka.ru/r-89346.html
Цитата: "Табличка на первой двери истинна. Тогда табличка на второй двери ложна. А так как табличка на второй двери утверждает, что в одной из комнат находится принцесса, то из её ложности следует, что принцессы там нет, что приходит в противоречие с истинностью первой таблички. Таким образом, мы, предположив, что табличка на первой двери истинна пришли к противоречию"
P.S. Информатика. Углубленный уровень 10 класс. стр-210 / Поляков, Еремин ... Параграф-25 Логические задачи.
Тоже решаем задачи, используя противоречие.
В приведённой вами цитате не упоминается тигр, который есть в условии задачи. Тот факт, что в данном случае тигр не играет роль, совсем не означает, что об этом можно умолчать. Наоборот - надо именно что доказать, что тигра можно не учитывать. Потому что при данных аргументах (принцессе и тигре) с учетом их состояния изложенных на табличках, может быть много аналогичных задач, где тигр вполне может играть роль в подаче решения..
Другими словами, предложенное решение, не учитывающее все заданные условия, не совсем корректно с точки зрения строгой логики.
На первой табл. сказано, что здесь принцесса, а тигр в не здесь. Поскольку было доказано, что принцесса в 2-комнате (если она в первой, то она же и во второй: чего быть не может), то первая табл. ложна. А поскольку ложна, то тигр не во второй, а в первой.
Вы шутите?
нет
Если вы всерьёз, то будем разбираться.
Из того, что 1-я табличка ложна, не обязательно следует, что она ложна из-за принцессы. Она может быть ложна из-за тигра. Другими словами, вариант, когда и принцесса и тигр находятся в 1-ой комнате (вариант 11 в моём доказательстве) как раз и не противоречит ложности 1-ой таблички.
Согласен с вами в том, что если соединить два высказывания (В этой комнате находится принцесса, в другой комнате сидит тигр) в одно, то действительно, ложь этого высказывания можно получить разными способами.
Однако, сказанное в этой задаче понимается обычно так, что каждому из этих высказываний (в этой комнате находится принцесса, в другой комнате сидит тигр) применяется либо верно к обоим, либо неверно опять же к обоим.
Но, повторюсь, трактовать можно и так, как делаете вы. В этом случае получаем, правда, множество решений. Обычно, это задачей не предполагается.
Не могу избавиться от подсознательного чувства, что вы шутите. Альтернатива этому чувуству, к сожалению, это то, что вы специально издеваетесь.
Итак, на 1-й табличке написано: "В этой комнате находится принцесса, а в другой комнате сидит тигр". Согласно моему объяснению я это сложное высказывание разделил (а не соединил!) на два простых, каждое из которых может быть ложным или истинным. Это сделано в связи с тем, что в изначальном выражение имеется два субъекта (принцесса и тигр) и два предиката (комната, где сидит принцесса и комната, где сидит тигр).
И вот такое разделение сложного высказывания вы называете... соединением. Вопрос остаётся: вы шутите или потихоньку продолжаете издеваться, как и со знаком равенства в математике, которому вы приписываете функцию оператора?
Но похоже, что план по издевательству вы считаете недовыполненным. Для этого достаточно поглядеть на ваш метод доказательства, где не только НЕ УПОМИНАЕТСЯ "каждое из этих высказываний", а также нечто относящееся к "обоим"... но и вообще не используется такой субъект высказывания как тигр.
Цитирую ваше доказательство, а вы должны ткнуть меня носом в тигра, чтобы слово "каждое" и "оба" обрело смысл: "Табличка на первой двери истинна. Тогда табличка на второй двери ложна. А так как табличка на второй двери утверждает, что в одной из комнат находится принцесса, то из её ложности следует, что принцессы там нет, что приходит в противоречие с истинностью первой таблички. Таким образом, мы, предположив, что табличка на первой двери истинна пришли к противоречию".
По-моему, данное доказательство просто изъяло второй субъект из высказывания и выбросило его на помойку. Мол, составители задачи хватили излишку. Мы-то - знаем!
Итак вы решаете не первоначальную задачу, а следующую (без тигра, который путается у вас под ногами):
На 1-й комнате табличка, по сути, гласит: "Принцесса находится в этой - 1-й - комнате".
На 2-й комнате табличка, по сути, гласит: "Принцесса находится в 1-й или во 2-й комнате".
Задача: считая, что одна из табличек ложна, определить - какая.
В этом случае задача превращается в ничтожную, т.к. любой человек сразу видит, что 2-я табличка ложной быть не может. И если он знает, что альтернатива лжи есть истина, то он, считайте, задачу уже решил.
Я же не возражаю против вашей трактовки. Я лишь сказал, что можно мыслить сначала эти два простых, соединяя затем их в сложное.
А можно не соединять, утверждая об обоих одновременно (либо истина, либо ложь). В этом случае:
Именно так.
И акцент в этом "ничтожном" решении сделан на " 2-я табличка ложной быть не может": на формальной сути этого "как выразить то, что не бывает"
P.S. Что означает, что (в 1-комнате ИЛИ в 2-комнате находится принцесса - ложно)?
Ложность сложного высказывания выполняется только тогда, когда оба простых ложны. А это означает, что (принцесса в 1-комнате - ложно) ИЛИ (принцесса в 2-комнате - ложно). ... Что получаем? Получаем: (принцесса НЕ в 1-комнате), (принцесса НЕ в 2-комнате). ... Получаем противоречие.
Я понял, что вы сейчас спрашиваете насчёт укороченного варианта надписи на 2-й табличке: "Принцесса находится либо в 1-й, либо во 2-й комнате". Как формально выразить то, что данная табличка истинная, т.е., что она не может быть ложной.
Отвечаю. Не формально нам известно согласно условию, что принцесса находится в какой-то из двух комнат. Случай, когда этой принцессы вообще не существует, а также случай, когда составитель задачи держит за пазухой ещё одну - 3-ю комнату, но о ней не говорит, а также аналогичные "проблемы" условия задачи мы, надеюсь, не рассматриваем.
Следовательно нам надо определить каким формальным (булевым) оператором можно описать выражение "Принцесса сидит либо в 1-й, либо во 2-й комнате".
Для этого есть булева операция под названием антиэквивалентность. Математический идиотизм (я бы сказал - критинизм) заключается в том, что эта операция имеет кучу других названий-синонимов. [И это-то в науке, которая запрещает нам ковыряться в носу из-за неточности выражения мысли.] Этот оператор в разных областях называют а) исключающее ИЛИ; б) неравнозначность; в) Строгая дизъюнкция; г) антисолидарность; д) антикомплементарность; е) отрицание взаимозависимости; ж) отрицание равнозначности; з) сложение по модулю два; и) побитовый комплемет; . . .
Итак, этот булевый оператор имеет два операнда. В нашем случае обозначим их как К1 и К2, каждый из которых может быть истиной или ложью:
К1 = Ложь, если принцесса не сидит в 1-й комнате и К1 = Истина, если она сидит в 1-й комнате.
К2 = Ложь, если принцесса не сидит во 2-й комнате и К2 = Истина, если она сидит во 2-й комнате.
Результатом выполнения операции оператором антиэквивалентность (исключающее ИЛИ) есть значение Ложь, когда ОБА ОПЕРАНДА имеют одинаковое булево значение (оба Истина, или оба Ложь). Если же значения операндов различны, то результатом выполнения этой операции будет Истина.
Таким образом на формальном уровне эта булева операция вполне выражает здравый смысл, т.к. в нашем случае не может быть, чтобы принцесса была одновременно и в 1-й, и во 2-й комнатах (результат будет Ложь), а также не бывает, чтобы принцесса не сидела ни в 1-й, ни во 2-й комнате - результат тоже будет Ложь, т.к. операнды имеют одинаковые булевы значения.
Традиционный вопрос нашего диалога: где невыразимость? где противоречие?
Она (одновременно) находится в 1-комнате, находится в 2-комнате. Это и есть противоречие.
Как это выражается в математике? Нулем: (Она одновременно находится в 1-комнате, находится в 2-комнате - ложь)
Результат булевой операции исключающее ИЛИ, когда оба операнда Истина, т.е. принцесса находится и в 1-й, и во 2-й комнате (одновременно), да, так вот результатом будет Ложь.
Вы с этим не согласны? Вы считаете, что для данной задачи одновременное нахождение принцессы в двух комнатах сразу, следует считать Истиной?
В математике, как я уже говорил, для этого используется операция исключающее ИЛИ:
К = К1 <операция исключающее ИЛИ> К2
в К будет результат: Ложь или Истина. [То же: False или True; 0 или 1, '0' или '1';...]
К1 К2 К
1 0 1
0 0 0
1 1 0
0 1 1
Что значит Ложь или Истина? А то и значит, что <операция исключающее ИЛИ> не различает перестановку местами К1 и К2, этот функтор "слепой" до некоторой степени. В свою очередь уже это означает, что результат булевой операции несёт смысловую нагрузку о самом функторе, нежели о принцах с принцессами и их комнатах. Грубо говоря, если конвейер отделяет рыбу от мяса, то он с таким же успехом сможет отделять фрукты от овощей.
Присоединяюсь к вашему негодованию! Когда с этим преступлением от подлой булевой операции <исключающее ИЛИ> вы обратитесь в прокуратуру, то не забудьте с собой прихватить не менее безобразные арифметические операции <сложение> и <умножение>, которым тоже плевать на всё святое, а именно, на перестановку местами их операндов.
Короче, из двух независимых свидетелей обвинения, одного вы уже имеете в моём лице. К ногтю их - сволочей!
Вообще то криминалом пока не пахнет, мало ли кто чем кушает суши, я например предпочитаю вилку китайским палочкам. По этому заказываю суши на дом, да бы не обижать посетителей ресторанов. Но курицу и позы исключительно руками, даже в общественных местах. Мойте руки перед едой!
Согласно условию задачи: если высказывание 1-таблички истинно, то высказывание 2-таблички ложно. Ложь же исключающего ИЛИ (т.е. ложь 2-таблички) означает, что (А эквивалентно В). В свою очередь, это означает, что истинно как (принцесса в 1-комнате), так и (принцесса в 2-комнате).
где простые высказывания: А – принцесса в 1-комнате, В – принцесса в 2-комнате
Пришли к противоречию, о чем и говорилось первоначально (и не только мною).
Получим: (принцесса в 1-комнате) == (принцесса в 2-комнате), что вернет False
P.S. Или вот еще пример: http://philosophystorm.ru/false-false-false-0#comment-292664
В условии сказано, что только одна табличка истинна - либо 1-я, либо 2-я. Проверим что получится в результате этого "либо/либо", т.е. исключающего ИЛИ, т.е. или одно, или второе (но не оба). Таблица истинности для этой операции у вас приведена правильно. Подставляем ВСЕ возможные значения для 1-й комнаты и для 2-й, и смотрим что получаем в результате. Результатов может быть только четыре (см.табл.):
А -принцесса в 1-й комнате. В - принцесса во 2-й комнате.
А В Результат
0 0 0
0 1 1
1 0 1
1 1 0
Итак:
когда А=0 (т.е. если принцесса в 1-й комнате есть ложь), и В=0 (т.е. если принцесса во 2-й комнате есть ложь), то Результат - 0, т.е. ложь;
когда А=0 (т.е. если принцесса в 1-й комнате есть ложь), а В=1 (т.е. если принцесса во 2-й комнате есть истина), то Результат - 1, т.е. истина;
когда А=1 (т.е. если принцесса в 1-й комнате есть истина), а В=0 (т.е. если принцесса во 2-й комнате есть ложь), то Результат - 1, т.е. истина;
когда А=1 (т.е. если принцесса в 1-й комнате есть истина) и В=1 (т.е. если принцесса во 2-й комнате есть истина), то Результат - 0, т.е. ложь.
Тут операция исключающее ИЛИ точно фиксирует, что когда принцессы нет ни в 1-й, ни во 2-й комнате, то такая ситуация ложна. Точно так же, как и случай, когда принцесса одновременно сидит и в 1-й, и во 2-й комнатах.
С чем вы не согласны? Вы считаете, что принцесса может быть сразу в двух комнатах? Или вам не нравится, что принцессы нет ни в одной из них?
Откуда, вдруг, приплыла операция "==" - сравнение на равенство??? А почему бы вам не впиндючить сюда, например, > - больше, или < - меньше? Или << - сдвиг влево?
Ссылка показывает на саму себя, т.е. на это же ваше сообщение.
Всё остальное верно.
Это означает, что (принцесса в 1-комнате) - это тоже, что (принцесса в 1-комнате), а также (принцесса в 1-комнате) - это тоже, что (принцесса в 2-комнате)
Т.е. для субъекта высказывания (принцесса в 1-комнате):
1) утверждается, что (принцесса в 1-комнате)
2) утверждается, что (принцесса в 2-комнате)
.... что False
Субъект – это то, о чём/о ком говорится в утверждении.
Предикат – это то, что именно говорится о субъекте.
Наш субъект – принцесса. Предикат – то, где она находится.
Итак, у нас есть ДВА утверждения, КАЖДОЕ ИЗ КОТОРЫХ может быть истинным или ложным:
А. Принцесса (субъект) находится в 1-ой комнате (предикат). Это утверждение может быть истинным или ложным (третьего не дано).
В. Принцесса (субъект) находится во 2-й комнате (предикат). Это утверждение может быть истинным или ложным.
Между утверждением А и утверждением В выполняется логическая операция «исключающее ИЛИ».
Все возможные (четыре) результата описаны в полном объёме в моём предыдущем сообщении, где поставлен КОНКРЕТНЫЙ вопрос – с чем именно вы не согласны?
Или вот еще пример. Взят из учебника по информатике Полякова.
1-е Коля; 2-е Борис; 3-е Дима; 4-е Максим
Задача решена. И никаких противоречий нет.
Но это также означает, что Максим не занял первое место. Как это выразить? Так (Максим занял первое место не-равно Максим занял первое место)
P.S. Также хочу заменить, что упоминание о противоречии в задаче о местах по шахматам НЕ МОИ. Они процитированы из учебника информатики
В данном высказывании "Максим не занял 1-е место" субъектом высказывания является "Максим". Предикатом - то, что о нём говорится, а именно - "не занял 1-е место". Высказывание может быть только истинным или ложным.
Таким образом: Максим не занял 1-е место есть истина.
Если мы обозначим высказывание "Максим не занял 1-е место" буквой А, то можно записать: А=True.
Естественно, что утверждение можно записать и по-другому: "Максим занял 1-е место". Тогда, пометив это утверждение буквой А, можно записать А=False.
Это тоже, что: Максим занял 1-е место есть ложь.
В свою очередь, это тоже, что: (Максим занял 1-е место != Максим занял 1-е место) есть ложь.
P.S. На любом языке программирования такая конструкция вернет (всегда) ложь.
Рассмотрим внимательно предложенную вами конструкцию (будь она на С, на Питоне, или на Паскале). Эта конструкция представляет собой операцию сравнения на неравенство двух переменных - слева и справа от знака "!=".
Иными словами, знак "!=" - это приказ компютеру: сравни, сука, на неравенство и выдай: Ложь (если равно) и Истина (если не равно).
(Максим занял 1-е место != Максим занял 1-е место)
В данном случае и слева, и справа вы расположили одну и ту же переменную, которую вы назвали "Максим занял 1-е место".
Название (подчёркиваю - название!!!) этой переменной затуманивает вам мозги. Если вместо предложенного вами названия мы возьмём нейтральную букву Х, то выражение примет вид (Х != Х).
Итак, при помощи операции "!=" вы приказываете компьютеру сравнить Х и Х на неравенство, и выдать на бочку результат - Ложь или Истина. Ясно, что какое бы значение не имела переменная Х (ложь или истина) - всегда результатом такого сравнения будет ложь, потому что вы взяли ОДИНАКОВЫЕ переменные слева и справа.
Вопрос, придёт ли вам в голову составлять программу, чтобы сравнивать Х и Х, 2 и 2, 7 и 7, и т.д. То есть, получается, что вы вроде как проверяете работу компьютера на правильность выполнения предусмотренных команд (операций). Может электронщики чего не так спаяли внутрях?
Ну вот и договорились, результаты булевых операций несут в себе информацию о функторе! Правда я добавил множественное число, но что от этого изменилось? Только когда всё протестировано на десять рядов и исчезли все тени сомнений, можно переходить на кроликов.
Придет.
Именно всегда-ложная-формула и всегда-истинная-формула мне и нужна.
Пример использования: https://github.com/bulygin69/exist/blob/master/l2.py
Что в программировании вы называете формулой? Может быть вы имеете в виду выражение или операция?
Потому что ваше фундаментальное False == (False != False) - это не формула а запись на языке Питон логического выражения состоящего из констант между которыми проделывается логическая операция. Результат выражение в скобках - True. Потом с этим True выполняется команад - сравнить с False. У этого идиота - компьютера - заложено, что результат сравнения на равенство двух разных величин (в данном случае False и True) будет ложью, т.е. False.
Но вы по-прежнему настаиваете. что это противоречиво, мол, результат сравнения двух РАЗНЫХ величины должен быть... что ли, истиной?
Тоже, что и в математике.
Далее
1) выражения языка
(такие, как 2 + 3, х + 3, х = у, х = 3, 2 = 3, 2 = 2
— в отличие от таких как + = х)
2) среди выражений выделяются так называемые формулы,
означающие при интерпретации «утверждения, зависящие,
быть может, от параметра» (такие, как х = 3, х = у, 2 = 3, 2 = 2)
3) среди формул выделяются так называемые замкнутые формулы,
или утверждения, не зависящие от параметра,
(такие, как 2 = 3,2 = 2)
4) среди утверждений выделяются истинные утверждения
(такие, как 2 = 2)
Теперь остаётся самая малость. Записать приведённую вами формулу предела (со знаком "=") на языке программирования. И сравнить записи.
Не о пределе идет речь, а о том, что формулой является.
Формулы - это: x=2, 2=3, 2=2
На сотый раз объяснения ОДНОГО и ТОГО ЖЕ я сделал опечатку. Вот правильный текст:
Потому что ваше фундаментальное False == (False != False) - это не формула а запись на языке Питон логического выражения состоящего из констант между которыми проделывается логическая операция. Результат выражение в скобках - False. Потом с этим False выполняется команад - сравнить с False. У этого идиота - компьютера - заложено, что результат сравнения на равенство двух равных величин (в данном случае False и False) будет истиной, т.е. True.
Но вы по-прежнему настаиваете. что это противоречиво, мол, результат сравнения двух РАВНЫХ величины должен быть... что ли, ложью?
сравнение равных - True
противоречие в этом: (False == False), (False != False)
А запятая между выражениями в скобках - это что? Потому что я на Питоне не программировал.
К программированию это не относится. Это просто однородные члены в русском предложении, разделенные запятой.
Так это не на языке программирования? А что тогда на не языке программирования означает "!=" и "==".
Почему бы тогда не написать на русском языке.
Вы хотите сказать, что вы изначально всю эту конструкцию False == (False != False) записывали по правилам русской грамматики? А к Питону это не имело отношения?
Х !=Х это на python
X == X это на python
Запятая же между ними, к python не относится.
False == (False != False) это на python
Тогда вам нужно всё-таки ответить чётко и прямо на вопрос: знаки "==" и "!=" в Питоне означают операцию, т.е. команду "проверить на равенство [или неравенство]"? Или они являются утверждением равенства и неравентсва?
Вадим Владимирович, Вы действительно хотите договориться, или у Вас за пазухой только протест? Ну согласитесь, в конце концов, что функтор сравнения не может различить булевы константы. Когда сравниваются две истины, результат истина, когда сравниваются две лжи, результат опять истина. Почему? Получается логическое "неравноправие" булевых констант, где корень зла, в константах, или в функторе? И как результат такого перекоса, получается два вывода. Во-первых, парадокс лжеца работает только на лжи, то есть в дурную бесконечность уводит только утверждение "я лгу". И во-вторых, это означает не симметричность всего этого Мира (действие никогда не равно противодействию), то есть он куда то катится. В рай или в ад, но катится...
Функтор, который выполняет функцию (команду) сравнить, сравнивает два операнда (аргумента) между собой. Ему плевать на то, что именно вы заставляете его сравнивать пятёрку с шестёркой, или две тройки, или два каких-нибудь байта между собой, или два бита, и т.д. Ему также глубоко начхать на то, знаете ли вы заранее те значения, которые вы заставляете его (функтор) сравнивать, или эти сравниваемые значения в ваше программе являются переменными поступающими с внешнего носителя и они никогда наперёд не знаемы. Функтору приказано сравнить - и точка! Его задача выдать "Ложь", если не сравнилось то что вы ему приказали сравнивать, и выдать "Истина", если они совпали.
Так работает операция сравнения на равенство. Точно так же работает и операция сравнения на неравенство. Просто результат будет обратный: если сравнились - "Ложь", а если нет - "Истина".
Ведь и в жизни вас могут в суде спросить двояко: а) вы убийца? или б) вы не убийца? Если вы невиновны и хотите ответить однозначно, правильно, не таясь. То в первом случае вы ответите: это ложь (мол, я не убийца). А во втором случае вы ответите: это истина (мол, да. правильно - я не убийца).
Так всё же, что по-вашему мнению должен ответить наш подсудимый - функтор - когда его спрашивают: равны ли А и В, а он - функтор - сравнил их и определил, что они одинаковы? По-видимому, наш функтор должен ответить: "Истина", т.е. да, они одинаковы. Имеет ли значение тот факт, что вы намеренно ему подсунули два одинаковых объекта - в нашем случае две одинаковые логические константы (False)? А если бы вы подсунули ему два одинаковых числовых значения, например, 2 и 2, или две одинаковые буквы - 'G' и 'G' ? Неужели вы считатете. что формальная операция сранения должна кроме сравнения смотреть на суть самих букв, типа, если это буквы нормального русского алфавита, то получи правильный результат сравнения, а если это буквы из пиндосии, то фиг вам (сначала, мол, решите в нашу пользу суд по сбитому Боингу) !
Ведь вы, по сути, именно это и предлагаете - чтобы сравнение осуществлялось на основании лояльности к вам того, что сравнивается: если речь идёт о таких небожественных понятиях, как "ложь", то с ними, как с предателями...
P.S. Выше по ветке. где я был солидарен с вами в смысле того безобразия, что функтор сравнения не может даже опрокинуть себе внутрь стаканчик водяры, относится так же и к командующему парадом функторов. Перед командованием - не стоит опрокидывать во внутрь.
Когда Вы говорили про таможню, а там же про постановку задачи и собственно про функторы, Вы были гораздо чеснее. Фактически функтор может сравнивать всё что угодно, но не ложь и истину. Например, потенциал, высоту, толщину, длительность... то есть булевы константы в виде "Истина" и "Ложь" претерпевают целый ряд преобразований.
Совершенно правильно! И реализуется само сравнение благодаря тем самым преобразованиям. Но это так же означает и то, что результат сравнения имеет весьма отдалённое отношение к самим булевым константам, результат имеет прямое отношенеие лишь к самому функтору, в данном случае к сравнению (пока без разницы, на равенство или неравенство). Можно сказать даже больше, результат булевой операции будет меняться, при изменении самого функтора (как Вы говорите, всего 16 вариантов), при неизменных аргументах.
"Заметьте, не я это предложил!". Я всего лишь настаиваю на том, что компилятор сука, казачок засланный, ему бы операцию сравнения двух констант False взять да запретить, так ведь он вместо этого ещё результат выдаёт True! Я уже молчу, что он скажет в ответ на вопрос чему равно ноль умножить на бесконечность?
Я бы с Вами посидел на берегу с удочкой и бутылочкой самогона. Но это не имеет никого отношения к истине.
Боевые сто грамм всегда были законны! Если я для Вас враг, то на войне как на войне.
Следите за руками.
Что вы говорит!? Ведь это ж надо! Однако, стоит заметить, что с этой подлостью мы уже сталкивались в арифметике, когда вместо одних знаков операций пробовали подставить другие (например, вместо знака операции сложения подставляли знак операции деления: вместо 10+2, ставили 10 : 2) и при этом вместо ожидаемого нами того же самого результата, эти, бля, пиндосы, подсовывали нам - разные. Но им, пиндосам, и этого показалось мало! Они теперь эти штучки-дрючки пытаются проделать и с булевыми знаками операций!!! Им плевать на то, что все операции должны быть равны, бля! То есть выдавать один и тот же - правильный - результат при одинаковых аргументах.
Вы уже опустились до уровня напёрсточника, а жаль. У этих "бля, пиндоссов" вряд ли получится подсунуть мне не мой результат, хотя умные, гады...
Так Вы согласны с тем, что булевы константы True и False, в компьютере (и в такой прикладной математике как программирование) не более чем двоичные числа единица и ноль? Или так и будем играть в истинность и ложь? В принципе я Вам могу сформулировать проблему, примерно так: деньги не есть всеобщее благо (бесформенное целое), у них есть ноги, соответственно и то место, откуда они растут.
Всё программирование в конце концов (в основе) представляет собой работу с битовыми нулями и единицами. Одни комбинации битов распознаются процессором как команды, другие, как адреса памяти, третьи - как содержимое по указвнным адресам, и т.д.
Константы False и True - могут представлять собой (внутри области памяти) совсем разные комбинации битов - в зависимости от "договоренности". В одних языках программирования эти константы хранятся как целые двухбайтовые числа 0 и 1, в других - как четырёхбайтовые, в третьих - как строка битов длиной 1 бит, в четвёртых - как целые числа -1 и +1, в пятых - как символы 'F' и 'T' и т.д.
Ну и что с этого? Какой вывод? В любом случае команда сравнения обязана сравнивать два операнда и выдавать результат - сравнились ли они, или нет. Независимо от того какого вы мнения о передаваемых для сравнения аргументах. Но вы продолжаете настаивать, что если передавать два одинаковых аргумента, то иногда пусть команда сравнения выдаёт сравнимость, а иногда ей это делать не следует (если я, мол, против). Причём, вы пишите это на полном серьёзе! Это примерно как если бы сказать: сравнивая 2 и 2 - пусть команда сравнения выдаст истину, а если я ей подсуну 7 и 7, то хер вам истина - я эту семёрку, бля, с детства не люблю! Короче, рекомендую меньше пить.
Все компы работают по переднему или заднему фронту импульса, по уровню напряжения, или фазовому сдвигу. Но Вы таки настаиваете на том, что безмозглое железо может оперировать понятиями? Такими как ложь и истина? Да будет Вам известно, что комп выдаст на If("пошоль нафиг досвидания") истину! Истину чего по Вашему? Того что строка не пустая, или это признание в любви? Рекомендую выпить. Даже обезьянам, которых в прошлом веке разводили на Кавказе, ввели в рацион Кинзмараули, что б не дохли.
Не надо с больной головы на здоровую. Я нигде не только этого, но и близко подобному не утверждал.
Мало того, компьютер вообще не оперирует понятиями. Понятиями оперирует человек, который пишет программу. Ну, или там... в российских судах.
Компьютер вообще не выдаёт истин и лжи. Он выдаёт результат операции. А как интерпретировать результат - задача человека, которая ставилась ещё ДО(!) выполнения программы - во время её написания.
Когда вы пишите такой оператор if, то вы обязаны знать что именно вы спрашиваете у компьютера. В данном случае вы спрашиваете: выдай значение True, если строка не пустая, и False, если пустая. Но так как вы в качестве строки, в данном конкретном случае, передаёте НЕ ПЕРЕМЕННУЮ, а КОНСТАНТУ, то в принципе, такая запись в программе - глупость, т.к. результат операции вы знаете заранее, и тогда само If абсолютно бессмысленно.
Прошу прощения, иногда эмоции прут через край. Конечно же понятиями не оперирует, и даже булевыми контантами, в судах может быть, а вот в железе нет даже булевых операций, как я уже говорил, есть две команды, одна записи, другая чтения, и комбинационная схема под назавнием АЛУ. Команды, константы переменные и процедуры это всё уже из области языка, например, С++.
Так я Вам и говорю, как таможня пропустила гнилой компилятор? Мало ли чего я могу наплести, язык то он без костей. Тут ведь явный косяк, компилятор пропустит не только безссмыслицу, но поощрит константой True. И даже подтвердил примером из жизни, как вопреки здравому смыслу две лжи могут дать истину, оказывается проще простого, их надо только сравнить и всё. Но в жизни бывает и по хлеще, нужно только соврать первым, обделать аппонента гавном, пусть разгребается, потом в крайнем случае можно извиниться, а лучше и не извиняться, и так забудется, я же всё-равно уже герой!
Каждая формула является высказыванием. Каждое высказывание – то, о чем можно сказать истинно оно или ложно. Следовательно, каждая формула – то, о чем можно сказать истинна она или ложна.
Примеры формул: х = 3, х = у, 2 = 3, 2 = 2. О каждой из этих формул (для х=3, х=у нужна подстановка) можно сказать истинна она или ложна.
В математике для этого существует специальный термин: предикат равенства для которого областью определения может быть что угодно, а областью значений: истина, ложь. Часто предикат равенства пишут как х=y, упоминая при этом, что его область значений это истина или ложь.
Ответ:
2=3 это утверждение равенства (проверка равенства) разных термов, возвращающее ложь.
2=2 это утверждение равенства (проверка равенства) одного терма, возвращающее истину
2≠3 это утверждение неравенства (проверка неравенства) разных термов, возвращающее истину.
2≠2 это утверждение неравенства (проверка неравенства) одного терма, возвращающее ложь
Теперь о формулах, которые только истинны. Именно их мы имеем ввиду, когда пишем х=3, x=y. Присвоение – это равно для истинных формул. И поскольку 3 (для истинных формул) всегда равно 3, то вместо х пишем 3. Но это, повторюсь, является лишь частным случаем формул.
Ложные всегда формулы – это противоречия. Ничего ужасающего в них нет. Такие формулы – лишь отрицание всегда истинных формул.
Нужны ли всегда ложные формулы, если нужно выразить истину? Нет.
Нужны ли всегда ложные формулы, если нужно выразить ложь? Да. Более того, без них не обойтись.
Жаль, что нам так и не удалось заслушать начальника транспортного цеха.
М.Жванецкий.
Я вам ответил
В вашем ответе даже не фигурируют знаки "==" и "!=", а также непонятно - говорите ли вы о языке Питон или о некоторых частных разделах математики, в которых используется свой жаргон.
Я о математике. И неоднократно, что:
В математике "=" - тоже, что на python "=="
В математике "≠" - тоже, что на python "!="
Значицца, Если в математике мы напишем Y=X+1 это будет то же, что в Питоне Y == X+1 ?
Да.
Разумеется, область определения Х в этих формулах должна быть той же. Это же касается области определения Y.
Тогда областью значения будет (ложь, истина)
Да, заранее известно, что X и Y - целые числа, при этом область значений Y от 0 до 1000, а X от 0 до 500.
Вопрос остаётся прежним: запись Y = X + 1 в математике, и запись Y == X + 1 в программировании на языке Питон означает одно и то же или разное?
Задайте не диапазоном, а явно. Тогда и будете судить о истинности или ложности этой формулы. Пока лишь можно сказать, что она выполнима (не всегда ложна)
Одно и тоже.
Интересно ещё ваше мнение вот о чём. Как вы считаете, смысл записи на языке Питон Y = X + 1 и записи в математике Y = X + 1 - одно и то же или смысл разный?
В программировании (на python, в частности) присвоение - это частный случай формул: формул всегда истинных. Поэтому мой ответ: нет.
Эта формула (Y=X+1 на python) при каком-то Х вернет истину, поскольку левый и правый терм будут равны на том основании, что X+1=X+1. Уточню, не это X+1=X+1 вернет истину, а это X+1==X+1, где вместо Y будет подставлено X+1 при каком-то Х.
Повторюсь, формулы всегда истинные (тавтологии) - частный случай формул. Вот конкретный пример из школьной программы, где в наличии как как те, так и другие.
Решение. Из (М=5*С, К=М+С) следует К=6*С. Тогда формула С=К/6 будет истинна только при числе кустов 84 (в остальных случаях получим ложь).
Это тоже, что и с принцессой. ... Не существует 85 кустов, т.к. (С=85/6) ложно. Не существует 89 кустов, т.к. (С=89/6) ложно. Но существует 84 куста, т.к. (84=6*С) истинно.
Совершенно непонятно почему садовник получал результаты 85 и 89? Получается, что ему было трудно вести подсчёт и он ошибался. В таком случае, почему результат 84 также не может быть ошибочным, как и 85 и 89. Разница в трёх подсчетах достигла 5. Почему числу 84 доверия больше, чем числу, например, 90 или 78? Впрочем, есть ещё 96, 72, 66...
Сама формулировка задачи в этой части "Садовник при подсчете кустов получил результаты: 84, 85, 89. Вопрос: какое число кустов в саду?" уж очень некорректна.
Впрочем, безапелляционная формулировка в якобы "решении" задачи должна была бы просто возмутить строгого математика. Задумайтесь! Школьник читатет не детский рассказик, а математическую формулировку! И что же он вынесет из прочитанного? А вот что: "формула С=К/6 будет истинна только при числе кустов 84 (в остальных случаях получим ложь)". Сидит он и думает, а почему только 84? А если 78? Ведь 78/6 = 13. Получается, что само логическое высказывание о том что ТОЛЬКО ПРИ ЧИСЛЕ 84 в этом случае ложно. Ведь не только?
Короче, тихий ужас!
Я перенёс сюда продолжение ветки с vlopuhin
Давайте поговорим о здравом смысле на вашем языке - языке электронщика.
Сначала согласимся, что состояние, например, какого-нибудь автоматического выключателя называть Истиной, если он включён, и Ложью, если он выключен. Нормльно? Здравый смысл пока на дыбы не встал? Тогда продолжим.
Согласимся также и со следующим. Пусть у нас есть датчики влажности. Если такой датчик начинает передавать сигнал Истина, то это означает что влажность начинает превышать 90%, а если влажность меньше, то такой сигнал не передаётся, а передаётся сигнал Ложь.
Теперь я формулирую жизненную задачу, которая может быть описана (и запрограммирована) при помощи булевой операции.
Итак, наши два датчика влажности воздуха расположены: один на чердаке, а другой - в подвале. С целью безопасности (чтоб не было короткого замыкания) сигнал Истина от любого из таких датчиков приводит состояние выключателя в положение Ложь (т.е. - выключает его, чтоб электрический ток не шёл по проводам в помещении).
Есть ли тут отступление от здравого смысла? Вроде как нет. Мы описали простейшее автоматическое устройство для предотвращения короткого замыкания.
Обозначим состояние датчика на чердаке булевой переменной А, а в подвале - В. Ясно, что каждая из этих переменных может принимать значение Истина (когда влажность превышает 90%) или Ложь (когда не превышает).
Датчики воздействуют на автоматический переключатель, который мы обозначим булевой переменной С. В зависимости от сигналов от датчика влажности (от А и В), состояние булевой переменной С будет Истина (состояние включен) или Ложь (переключатель выключен).
Описываем как должна работать эта булева схема. У нас две независимые булевы переменные: А и В. Результат будет в зависимой переменной С. То есть С - это результат работы некой булевой функции от двух аргументов А и В. Другими словами наша конструкция такая: С = А <булева операция> В
1. Ясно, что если А имеет значение Истина и В имеет значение Истина (т.е. оба датчика показывают превышение влажности), то переключатель должен быть переведён в положение выключен, чтоб ток не шёл, т.е. результат в С - Ложь.
2. Если А Истина, а В - Ложь, то всё равно следует переключатель устанавливать в положение выкл. - ток не должен идти по проводам, т.к. опасная влажность на чердаке т.е. С - Ложь.
3. Если А Ложь, а В - Истина, то это аналогично предыдущему пункту, но опасная влажность - в подвале. С снова-таки - Ложь (положение выкл.)
4. Если датчики не показывают превышение влажности, т.е. А - Ложь и В - Ложь, то ток по проводам может идти, т.е. положение переключателя - вкл., что означает С - Истина.
Итак мы видим ужасающую с точки зрения vlopuhin и автора данной темы ситуацию: две Лжи образуют Истину. Однако, следует ткнуть меня, как котёнка, носом в лужу и показать где тут нарушение обещанного vlopuhin здравого смысла.
Для полноты картины посмотрим какая из булевых функций была у нас выполнена, т.е. какая булева функция даёт именно такой результат. Составим таблицу истинности.
А В С
0 0 1
0 1 0
1 0 0
1 1 0
Это была булева операци Стрелка Пирса (см. Википедия).
Следовательно, не только операция сравнения даёт результат Истина от двух аргументов Ложь, но и булева операция "антидизъюнкция" (она же - стрелка Пирса).
По секрету... Среди 16 возможных различных булевых операций, 8 операций дают результат Истина, когда оба аргумента имеют значение Ложь. Какой кошмар!
Честно говоря, я в шоке! Вам действительно требуется растолковать, что такое функтор? Вы действитетельно не понимаете о чем речь, или прикидываетесь? Возьмём Ваш пример с Малазийским Боингом, сбитым над Украиной. По Вашему "кто первый прокукарекал, того и правда", по моему "на воре шапка горит". Будем спорить до посинения, или договариваться? Например, назначим объективное расследование? Вы же, не то умысленно, не то по недопониманию игнорировали введённые Булыгиным понятия области определения и обласли значения функции. Да и переменной, и даже константы. Почему/Зачем? Если же всё-таки придёт (упадёт хер знает откуда) идея договариваться, то предлагаю договарисаться на базе Теории Систем от Е.Волкова. Это значит договариваться на основании результатов объективного расследования, а не на том, чьи атомное бомбы ядрёнее.
Да хер я клал на пиндосов, а на америкосных пиндосов, замешанных с гитлировскими фашистами, вдвое!
Опять выпил?
Догадливый, блин... Масленичная неделя у нас в разгаре!
Так что же означает С - Истина в приведённом Вами выше примере с автоматическим выключателем тока при превышении влажности? Вы по прежнему настаиваете на том, что эта истина лезет из того, что два датчика выдали "Ложь"? Честно говоря, они могли бы выдать всё, что угодно, в том числе и две Истины, и тогда бы функтор пришлось бы впиндюрить другой, отличный от стрелки Пирса. И что, после этого пожар не надо тушить? Так вот С - Истина получилась не потому что из датчиков ложь прёт (датчики не умеют врать, они могут только ломаться), а потому что влажность не повысилась! Ну типа стек протоколов обмена данными, а на каждом уровне своя область значений. По этому я просто настаиваю на том, что результат булевой операции имеет непосредственное отношение к функтору, и косвенное к аргументам.
Кстати, приведённая Вами схема не имеет обратной связи, ни ООС, ни ПОС. Был у меня такой случай. Нужно было автоматический подогреватель поставить в тамбур, причем по дешмански, то есть почти за бесплатно, сам обогреватель уже имелся в наличии. Захожу в хозмаг с электротоварами, покупаю температурный датчик и рэле, обсудил с продавцом все детали, он меня таки убедил, мало того, уверил, что буквально на днях по такому сценарию мужик у него купил то же самое, и остался доволен. Так вот монтирую всю эту хрень, включаю. И надо же, пошло тепло, и датчик сработал, только обогреватель не выключился, схема оказалась с ПОС. Открываю дверь на распашку для охлаждения, обогреватель выключается, ну и соответственно больше не включается, на улице минус тридцать, в тамбуре плюс пять, а датчик, как и требовалось, я установил на плюс восемнадцать. Пришлось инвертор городить. Вы и теперь будете настаивать на том, что продавец не солгал?
В моём примере обратной связи не требуется. Она даже опасна. Электричество выключится при сверхвлажности (примерно так, как срабатывают предохранители) а дело человека устранить течь в подвале или на чердаке и пальчиками включить электричество.
Это означает то, к чему привыкли разработчики электро или релейных схем на протяжении почти ста лет, а именно - к УСЛОВНОСТИ, при которой положение Вкл. ассоциируется с Истиной или с '1', а Выкл. - с Ложью. Точно с такой же условностью как знак "+" на AA-батарейках ассоциируется с выпуклым шпиндельком на торце, а не с плоским - на другом конце.
Эта истина лезет из того, что два датчика сообщили о том, что распространяемые некоторыми поцами (в лице... не будем говорить о присутствующих) слухами о том, что на чердаке или в подвале повышенная влажность - Ложь. И поэтому выключатель находится в положении Вкл. (т.е. Истина), что позволяет пользоваться электричеством в доме. Остаётся только спросить у жителей какой именно (от кого) здравый смысл они поддерживают?
Это вы мне говорите? Это же вы всё время сравниваете определённое состояние датчика, выключателя или чёрт знает ещё чего... с ЧИСТО УСЛОВНЫМИ обозначениями этих состояний, которые ПРИНЯТО обознчать в программировании и логике как True и False, у инженеров - как Вкл. и Выкл., у других - как "+" и "-"... и т.д. И только поцы интерпретируют подобный True с божественной Истиной, а False - с происками дьявола.
Вот здесь ссылка Вы о чем говорили? Про договорную УСЛОВНОСТЬ, или про божественную истину? Надо полагать про УСЛОВНОСТЬ. А теперь растолкуйте мне дураку откуда она взялась? И какое имеют отношение к этой истине булевы константы? В частности две константы False, которыми было помечено то самое всё. По моему это разные ложь и истина, и различие их заключается в том, что они из разных областей определения. То есть сравнение двух констант False на равенство по логике должно дать False (или вообще ничего, то есть неопределённость). А то, что в программировании это сравнение даёт True, следует из договора между программистами, фактически речь идёт о разных системах, но кому то это по барабану. Собственно и я не против, за державу обидно!
Каким тоном вы спросили, т.е. в каком ракурсе, так я вам и ответил. Вы сросили: "Кругом одна ложь, а когда оду ложь сравнили с другой, появилась истина? Нет ребята демократы, так не бывает".
Я вам ответил: "Истина в том, что была задана кругом одна только ложь."
Вас удивляет как получается Истина, если кругом одна ложь? Отвечаю: ЭЛЕМЕНТАРНО !!! Потому что это зависит от задаваемого вопроса. Когда, например, вас судья спрашивает: является ли истиной, что вы не грабили, и не убивали (другими словами, что предъявляемые вам грабёж и убийства есть ложь)? И вы вполне резонно отвечаете: это Истина (что означает - ДА, подтверждаю, что предъвленные мне грабёж и убийство являются Ложью).
Как же так, бля!? Почему вы криком кричите, что из этой лжи возникает истина? Отвечаю: потому что становитесь сразу умным, когда вас за жопу берут!
Кстати, в этом случае вам за державу не обидно? Ведь вы её в жопу послали!
Ну да, я и говорю, что ещё и не такие чудеса бывают, ухо нужно востро держать. Вы случайно школу агитации и пропаганды при КГБ не заканчивали?
Никаких чудес тут нет. Тут можно объяснить из чистой психологии. Просто условные ЗНАКИ Истина и Ложь давят на мозги, так сказать, божественным происхождением этих слов. А на самом деле они имеют происхождение из тривиальной логики как ответ на вопрос истинное ли суждение написано или ложное. Или по другому: согласны ли вы с написанным суждением "да" или "нет". И получается, что если вместо давящих на мозги сверху "истин" использовать более нейтральные да/нет, то психологическая нагрузка в осмыслении результатов резко спадает. А если вообще заменять на единички и нолики или на плюсики с минусами, то ментальное отдавание предпочтения одному или другому будет не более, чем предпочтение играющему в данный момент в шахматы белыми фигурами, перед играющим - чёрными.
Да нет тут никакой психологии. Тут есть пропасть, и это уже было в какой то из дискуссий, между теорией и практикой, между математикой и прикладной математикой в виде программирования. И, по моему, виной тому логика, или, если хотите, различные способы мышления. При столкновении с неопределённостями выход единственный - договариваться. А после договорённости необходимо о ней помнить. Однако система!
Что притихли, мальчики? Тут самое время задуматься, а правильно ли программисты поступили, договорившись о том, что Flse==False даёт True? Если капнуть глубже, то вопрос звучал бы так: что же здесь естественное, а что искусственное? Почему чистые математики скромно промолчали на такую наглость? Я не силён ни в истории математики, ни в истории программирования, но, как мне кажется, эта договорённость в программировании связана с тем, что в математике ноль стал обыкновенным числом! Не совсем конечно же, но кто нынче безгрешен? Есть четные числа, есть простые и замысловатые, как ряд Фибоначчи, а есть ноль. Тут и Кантор руку приложил с его трансфинитами. И даже Платон, в его пещере все места одинаковые, всё оплачено, проходи и смотри бесплатное кино. Но это же прорыв и в цифровой технике, и в измерительной! Какая прелесть, лишь бы чего то двигалось, какая-никакая стрелка, а шкалу я вам нарисую, хоть равномерную, хоть логарифмическую, и ноль забабахаю хоть в начало, хоть в конец, а могу и посередине, и диапазон сдвину, и, если пожелаете, расширю/сужу. В общем радикальный релятивизм, мракобесие сдулось, и все бабайки спрятались ниже уровня шумов. Есть правда один конфуз, цифровой технике бесконечность не по зубам, вот и приходится плодить гигатерабайты. В общем искусственный интеллект на этой хрени не вырастить...
Чтобы ответить на эти вопросы, надо точно знать что вы понимаете под выражением False==False даёт True.
Для этого просто произнесите фразу на русском языке, где будет сказано что это такое, для чего оно служит, и главное - что означает знак ==.
Попробую изобразить то, что я понимаю под "выражением False==False даёт True".
1. Программисты. Результат сравнения на равенство двух булевых констант False даёт True. Коряво получилось, попробую ещё раз. Результатом булевой операции эквивалентности двух аргументов False и False будет True. Вроде бы получилось?
2. Чистая математика. Сравнение двух нулей невозможно, поскольку "потрогать" ноль невозможно, не за что. Но если признать ноль числом, то два ноля равны. Соответственно у чистых математиков два ряда натуральных чисел, один с нулём, другой без. Кстати у телефонистов десятка начинается с ноля, на плинтах пары "0", "10", "100" и т.д. находятся в начале, а не в конце, всё не как у людей.
3. Электронщики. Если потенциал на выходе ключа ниже 2.4V, то хоть засравнивайся, выше он не станет, сколько ни пробовал и мультиметром и осциллографом - ноль там, железный! То, что ниже уровня шумов, сравнить не получается, примерно как и в математике с нулём. Если "ниже 2.4V" принять за ноль или False, результатом сравнения соответственно будет ноль или False. Если же "ниже 2.4V" подать на инвертор (убрать потенциал, оставить только шумы), то на выходе инвертора получится выше 4V, соответственно будет единица или True. Другими словами, какую комбинационную схему закажете, такую я вам и забабахаю. Как я и говорил выше: "Не может научим, не хочет заставим. На то он и функтор!"
Получилось? Другими словами, если у программистов это так, то это не значит, что так везде, не надо мне серить прямо в голову (с третьего этажа на первый :) , это когда я работал на ВЦ БратскГэсСтрой, программисты сидели на третьем этаже, а электронщики на первом). Не знаю, как это будет по английски, но по русски по другому не умею.
Данное выражение написано на языке программирования. Поэтому пункты 2-3 отношение к этой записи не имеют.
Пункт 1 почти правильно интерпретирует написанное. "Почти", потому что не сказано, что знак "==" это команда! Команда компьютеру выполнить операцию сравнения того что слева от знака, с тем что справа, и выдать результат True (если сравнилось) и False (если нет).
Сама запись именно в таком виде False==False не является ошибкой... с формальной точки зрения, но является совершенно глупой. Ведь слева и справа стоит одна и та же КОНСТАНТА. Это всё равно, что спросить у математика: скажи-ка, паря, равно ли пять пяти. Нормальный математик ответит, что это даже более, чем равно - это тождественно. В этом смысле, если программист пишет в своей программе команду, которая спрашивает у компьютера: равны ли две одинаковые константы, то начальник у этого программиста должен вызывать психиатра.
Итак, думаю, перевалив за сотню сообщений в теме, мы, наконец. выяснили, что "шестикопеечная булочка стоит шесть копеек".
Это было понятно с самого начала. Выяснилось другое, программисты это секта, у них мозги по другому устроены. Я давно об этом догадывался, теперь я в этом уверен. Хотя две лжи дают истину и ложь, но в другой плоскости, это по сути и есть правило буравчика, так устроено информационное пространство. То есть на том, что Вы назвали глупостью, весь мир держится, по крайней мере булева математика точно. Переваливание за вторую сотню это всего лишь подтверждает, яркий пример того, как на пустом месте можно замутить целую тему.
Все парадоксы не имеют решения. В частности, не имеет решения парадокс Ахиллеса и черепахи. По той простой причине, что (Х не-равно Х) всегда ложно: Ахиллесс догонит черепаху, если он ее не догонит (что ложно); Ахиллес не догонит черепаху, если он ее догонит (что ложно).
Но это не означает, что оперируя конкретными числами нельзя ответить на то, Ахилесс догонит или не догонит черепаху. Возможны оба варианта.
P.S. Комментарий Насти (4 класс СОШ) законов де Моргана
Вы взяли не импликацию, а чёрт знает что.
Переставьте 2 и 3 столбики импликации, раз вы явно это не видите.
Здесь: из True следует True, из True не-следует False, из False следует True, из False следует False
P.S. Вторая строчка: (True -> False) = False ... означает, что из True не-следует False
Это просто парадокс материальной импликации:
A B ->
0 1 1
0 0 1
Даже в вики написано: Если ложно, то истинность всего условного утверждения уже не зависит от истинности . То есть с помощью ложного утверждения можно обосновать всё что угодно. Пример: утверждение «если дважды два равно пяти, то снег красный» является истинным.
Суть одна (в любых парадоксах)
А -> B
0 1 1 Из лжи следует истина
0 1 0 Из лжи следует ложь
P.S. Догонит, если не догонит; заплатит, если не заплатит; поднимет, если не поднимет; Х, если не-Х