Обсуждение:Логическая операция
Эта статья тематически связана с вики-проектом «Информационные технологии», цель которого — создание и улучшение статей по темам, связанным с информационными технологиями. Вы можете её отредактировать, а также присоединиться к проекту, принять участие в его обсуждении.
Статью ещё никто не оценил по шкале оценок проекта |
ПримерПравить
Пример, который Вы привели любопытен, но не совсем понятно, что он иллюстрируеют. Хм...Лично я не понимаю, чем вызванна эта разница, но в любом случае это касается лишь С, и не факт, что в других языках такое тоже наблюдается. Хацкер 17:36, 24 июня 2007 (UTC)Ответить[ответить]
- Прежде всего профилактика некромерджистских поползновений. Вот отвлекусь я недели на 2, а в это время подвалит какой-нть новый <удалено> и ляпнет шаблон что-де ежу понятно что логические операции это то же самое что булевы и посему давайте мы всё это сольём в одну статью.
- Если по существу, то в Википедии (под влиянием засилья парадигм теории множеств и классической логики в мировом математическом образовании) сложилось однобокое и, в принципе, неверное представление об том, что исчисление высказываний сводится к алгебре логики. Понимание матлогики у большинства людей находится на уровне того же Буля, т.е. 140-летней давности. На самом деле, разговор о связках отличается от разговора о системах типа булевых алгебр тем, что связки служат для построения не термов, а суждений, к которым положены правила вывода. В программировании аналогом суждений являются управляющие конструкции, нетрудно видеть что их работа сильно отличается от работы цифровых логических элементов. Incnis Mrsi 17:57, 24 июня 2007 (UTC)Ответить[ответить]
- Не вполне понимаю о чём Вы говорите, но согласен с тем, что синтаксические и семантические понятия должны быть явно разделены. В любом случае, пример, приведённый Вами не уместен, т.к. он построен на тонкостях реализации, и не иллюстрирует фундаментальной разницы между логическими и битовыми опрерациями. Разница же между ними состоит в том, что логические операции — это синтаксические формы, которые могут встречатся в разных контекстах, в то время как битовые операции чётко привязаны к своей реализации на булевой алгебре (и не любой, а двухэлементной). Хацкер 18:41, 24 июня 2007 (UTC)Ответить[ответить]
- Чушь. Булева алгебра битовых операций содержит элементов (где N — размер слова), т.е. все состояния слова. В этом-то и суть дела, что побитные операции используют математическую структуру булевой алгебры. Incnis Mrsi 18:52, 24 июня 2007 (UTC)Ответить[ответить]
- Суть дела вовсе не в этом. Моё замечание относилось к случаю одиночных битов, то есть относилельно алгебры . Естественно, если Вы применяете битовые операции к векторам, их можно расматривать как унарные над алгеброй , где — размерность векторов. В любом случае — это далеко не общий случай булевой алгебры, отсюда и моё уточнение. Хацкер 19:31, 24 июня 2007 (UTC)Ответить[ответить]
- как раз и является общим случаем конечной булевой алгебры, конечной, понимаете? Бесконечные множества ещё не научились хорошо представлять на компьютерах ;) По поводу логических операций как синтаксических форм возражать не стану, и построенный мною пример как раз очень даже уместен — он показывает что реализация логической операции может быть очень далека от логического элемента 2И. Incnis Mrsi 20:37, 24 июня 2007 (UTC)Ответить[ответить]
- Верно! Я этого не знал. Чесно говоря, мне казалось, что конечных булевых алгебр гораздо больше. Хацкер 21:35, 24 июня 2007 (UTC)Ответить[ответить]
- Но то, что не во всех языках это так - это тоже важно. Например, VB.Net: там оператор AND "честно" вычисляет левую и правую часть, а вот AndAlso - действует именно так, как в C. Какое-то есть для этого умное слово, касающееся разбора выражений. Хорошо бы это умное слово найти и упомянуть... MarLex 21:32, 24 июня 2007 (UTC)Ответить[ответить]
- IMHO имелось в виду англ. lazy computation (отложенное вычисление) — термин точно существует, хотя в en.wiki я его не вижу. Но знатоки функционального программирования, со своей стороны, поднимут на смех мой жалкий C. Incnis Mrsi 06:45, 25 июня 2007 (UTC)Ответить[ответить]
- как раз и является общим случаем конечной булевой алгебры, конечной, понимаете? Бесконечные множества ещё не научились хорошо представлять на компьютерах ;) По поводу логических операций как синтаксических форм возражать не стану, и построенный мною пример как раз очень даже уместен — он показывает что реализация логической операции может быть очень далека от логического элемента 2И. Incnis Mrsi 20:37, 24 июня 2007 (UTC)Ответить[ответить]
- Суть дела вовсе не в этом. Моё замечание относилось к случаю одиночных битов, то есть относилельно алгебры . Естественно, если Вы применяете битовые операции к векторам, их можно расматривать как унарные над алгеброй , где — размерность векторов. В любом случае — это далеко не общий случай булевой алгебры, отсюда и моё уточнение. Хацкер 19:31, 24 июня 2007 (UTC)Ответить[ответить]
- Чушь. Булева алгебра битовых операций содержит элементов (где N — размер слова), т.е. все состояния слова. В этом-то и суть дела, что побитные операции используют математическую структуру булевой алгебры. Incnis Mrsi 18:52, 24 июня 2007 (UTC)Ответить[ответить]
- Вобще, конечно, тут еще нужно навести порядок, со всеми этими разделами, типа битовые операции, булева алгебра, алгебра логики и т.д., и везде конкретно оговорить особенности и взаимосвязь с другими объектами. Хацкер 18:41, 24 июня 2007 (UTC)Ответить[ответить]
- Коллеги, надо встретиться на каком-нибудь пространстве и обсудить это всё (например, на математическом портале). А то несколько параллельных обсуждений - это глупо. MarLex 21:32, 24 июня 2007 (UTC)Ответить[ответить]
- +1 :) Хацкер 21:37, 24 июня 2007 (UTC)Ответить[ответить]
- Сделано, Проект:Математика/Булева логика. Incnis Mrsi 13:59, 25 июня 2007 (UTC)Ответить[ответить]
- Коллеги, надо встретиться на каком-нибудь пространстве и обсудить это всё (например, на математическом портале). А то несколько параллельных обсуждений - это глупо. MarLex 21:32, 24 июня 2007 (UTC)Ответить[ответить]
- Не вполне понимаю о чём Вы говорите, но согласен с тем, что синтаксические и семантические понятия должны быть явно разделены. В любом случае, пример, приведённый Вами не уместен, т.к. он построен на тонкостях реализации, и не иллюстрирует фундаментальной разницы между логическими и битовыми опрерациями. Разница же между ними состоит в том, что логические операции — это синтаксические формы, которые могут встречатся в разных контекстах, в то время как битовые операции чётко привязаны к своей реализации на булевой алгебре (и не любой, а двухэлементной). Хацкер 18:41, 24 июня 2007 (UTC)Ответить[ответить]
subj vs битовые операцииПравить
Вкратце я выразил бы различие так (как я понимаю интуицией программиста и математика).
- Битовые, они же булевы операции имеют результатом значения регистров данных (тесно связано с логическими элементами в цифровой схемотехнике).
- Логические операции связаны с управлением выполнения программы — по какой ветви она направится (тесно связано с суждениями и выводами в матлогике).
Incnis Mrsi 19:13, 24 июня 2007 (UTC)Ответить[ответить]
- Вы всё время толкуете про разницу между синтаксисом и семантикой. Всё верно — разница фундаментальная. Единственная проблема — Вы вводите свою терминологию. В логике, это различие выражается по-разному. Например семантическому понятию отношение отвечает синтаксическое понятие предикат. Операциям соответствуют функциональные символы. Булевым (или логическим, если угодно) операциям соответсвуют логические связки. Речь идёт конечно только про несколько конкретных операций: и, или, отрицание, и возможно импликация. Для произвольных же булевых функций нет стандартного синтаксического эквивалента, т.к. они обычно не отделимы от своей интерпретации. Хацкер 19:47, 24 июня 2007 (UTC)Ответить[ответить]
- Написано частично верно. По поводу терминологии у меня действительно возникли проблемы, причём я обнаружил это уже в процессе написания и редактирования этих проблемных статей. Однако, синтаксических эквивалентов для булевых функций полно (ДНФ хотя бы) — в том ли проблема? Вами было верно замечено, что интерпретация булевых функций довольно жёстко фиксирована — это пресловутые булевы алгебры. А вот логические связки допускают много интерпретаций, и алгебра логики всего лишь одна из них, да, важная в программировании, но не единственная и пожалуй даже и не самая важная. Чем приведённый мною пример на C не пример интерпретации «синтаксического» понятия конъюнкции? Incnis Mrsi 20:37, 24 июня 2007 (UTC)Ответить[ответить]
- То, что битовые и логические операции в С интерпретируются по-разному ничего не доказывает. Чесно говоря, для меня это было сюрпризом, и я смотрю на это как на некий курьёз. Почему, например, выражение (0 & 1/f()), где f возвращает 0, выдаёт 0, а (0 & f(1,0))), где f реализует деление, выдаёт ошибку деления на ноль. Можете проверить. Такое впечатление, что при битовом умножении вычисляются все функции, входящие в операнды, но сами операнды не вычисляются (иначе первое выражение тоже выдавало бы ошибку).
- Ваш пример демонстрирует тот факт, что в Си, как и во многих других языках, при вычислении логических выражений используется ленивая модель вычислений. Иначе, можно сказать, что используется другая логика, а именно частичная некоммутативная. Но он не объясняет, почему битовые операции вычисляются по-другому. Лично я не понимаю, почему. Хацкер 21:10, 24 июня 2007 (UTC)Ответить[ответить]
- Написано частично верно. По поводу терминологии у меня действительно возникли проблемы, причём я обнаружил это уже в процессе написания и редактирования этих проблемных статей. Однако, синтаксических эквивалентов для булевых функций полно (ДНФ хотя бы) — в том ли проблема? Вами было верно замечено, что интерпретация булевых функций довольно жёстко фиксирована — это пресловутые булевы алгебры. А вот логические связки допускают много интерпретаций, и алгебра логики всего лишь одна из них, да, важная в программировании, но не единственная и пожалуй даже и не самая важная. Чем приведённый мною пример на C не пример интерпретации «синтаксического» понятия конъюнкции? Incnis Mrsi 20:37, 24 июня 2007 (UTC)Ответить[ответить]
ОпределениеПравить
Давайте так прежде чем откатывать - Вы обоснуете !!! — Эта реплика добавлена участником SergeyJ (о • в)
- Простите, я подумал, что это вандализм. А вы это серьёзно, оказывается. Для начала, я попросил бы вас указать, откуда определение вестимо. В любом случае, оно не подходит для того места, где вы его поставили, т.к. не является самым общим. Это из какой области? В философии что ли так принято определять логические операции? Хацкер 22:57, 24 марта 2008 (UTC)Ответить[ответить]
- Вначале то что я написал до Вашего комментария :
- Так я кое что понял ... у нас столкнулись несколько дисцеплин - логика и программирование. Но это лишь означает, что нужно описать более точно данный термин. Поэтому приглашаю к обсуждению - что Вы хотите здесь написать, с какой стороны это показать ? При этом не забывайте, что все битовые, и булевые операции, о которых вы говорите подчиняются логике, и берут начало в философии. умаю нам нужно согласовать эти цели. Моей конечной целью является привязка этого к ИИ, а Ваша ?
- Теперь ответ - это определений из формальной логики точь в точь, а у Вас ? Я программист поэтому знаний у меня хватит и в этой области :) — Эта реплика добавлена участником SergeyJ (о • в)
- Собственно, я тоже могу себя причислить к программистам. Но ИИ никогда не касался. Самый короткий путь — это просто добавить раздел, типа "понятие ЛИ в ИИ", и привести там ваше определение. В глобальной перспективе, конечно, хотелось бы чтобы статья была целостной, а не просто сборником определений, который пополняет каждый вновь пришедший. Изначально, планировалось, что статья будет посвящена именно операциям формальной логики — я не думал что будут разночтения. В общем, предстоит решить, нужна ли одна общая статья для разных дисциплин, или нет. Хацкер 23:12, 24 марта 2008 (UTC)Ответить[ответить]
- Теперь ответ - это определений из формальной логики точь в точь, а у Вас ? Я программист поэтому знаний у меня хватит и в этой области :) — Эта реплика добавлена участником SergeyJ (о • в)
- Желательно, конечно иметь одну статью, т.к. она хорошо показывает пересечения разных дисциплин, что по идеи и должно убрать разночтения. Что такое ЛИ ? Что-же касается формальной логики, то есть два близких, но тем ни менее очень разных понятий:
- собственно понятие ! и операции на ними ...
- и суждения -
- Думаю - то что Вам нужно - это Сложные суждения - связки, позволяющие объединить несколько исходных суждений в одно ! Отсюда легко перейти - напр., Соединительные суждения - конъюнкция - логическое И, и дальше уже к программированию ... — Эта реплика добавлена участником SergeyJ (о • в)
- Вас не затруднит подписываться с помощью четырех тильд и выстраивать сообщения "лесенкой" с помощью двоеточия? ЛИ — это я просто сократил так "логическая операция". Далее, я тут погуглил, и не нашел определение более широких, чем моё. вот, напимер, определение из БЭС. Хотелось бы, все-таки, знать откуда вы взяли ваше. Хацкер 23:28, 24 марта 2008 (UTC)Ответить[ответить]
- Думаю - то что Вам нужно - это Сложные суждения - связки, позволяющие объединить несколько исходных суждений в одно ! Отсюда легко перейти - напр., Соединительные суждения - конъюнкция - логическое И, и дальше уже к программированию ... — Эта реплика добавлена участником SergeyJ (о • в)
- Источник "Формальная логика" Учебное пособие для высшей школы. В.П. Малахов. М.2001 . Ваш результат гугла не удивительный - это понятие из программирования, и к логике не имеет отношения. Хотя к нему сводится, правда довольно сложно. Попробую набросать схему. Понятие - Логические операции над понятиями (Цель образование понятий) - Суждение как связь понятий - с помощью логических связок (! а не операций !!) образуются сложные суждения. Отсюда конъюнкция, дизъюнкция и т.д. НО над суждениями, а не над цифрами. Когда же мы переходим к программированию нас интересуют только цифры, поэтому слово операция преобретает другой оттенок (математический) и все сокращается до Булевых операций. Поэтому Ваше определение - сильно частное, и не показывает над чем происходят действия - в программировании вопросов не возникает, так как над семантическими словами действия производить пока не научились - и тут вмешивается ИИ ... SergeyJ 23:45, 24 марта 2008 (UTC)Ответить[ответить]
- Что-же касается вашего словаря - какой-то он мизерный, а не Большой :), там даже слово Суждение отсутствует ... SergeyJ 23:50, 24 марта 2008 (UTC)Ответить[ответить]
- Мне не верится что в книге с названием "формальная логика", приводится такое определение. Потому что определение это как раз самое что ни наесть неформальное. Не могли бы вы буквально процитировать, что там написано? Насчёт словаря — это просто пример. Гугл не выдал мне ни одного определения, похожего на ваше. А их было много. Хацкер 23:55, 24 марта 2008 (UTC)Ответить[ответить]
- А поиск найти в гугле зависит от желания :) http://www.neuch.ru/referat/24634.html SergeyJ 23:53, 24 марта 2008 (UTC)Ответить[ответить]
- Вот еще http://old.tspu.edu.ru/vlasov/shautsukova/theory/chapter5/1_5_1.html Думаю, в статье нужно указывать над чем происходит логическая операция - это и будет основой классификации. SergeyJ 00:00, 25 марта 2008 (UTC)Ответить[ответить]
- Вот неплохие определения http://mixport.ru/referat/referat/45835/ правда гугл тем и отличается, что все вырванно из контекста ... Конечно, я прав :) нас все-таки целый семестр этому учили в свое время ... Думаю справедливы оба определения. При этом отличием является то, над чем производится операции ... Кстати, даже предикаты определенны над понятиями и являются основой Экспертных систем ... Думаю, нужно давать определение из логики, объединять это со статьей Суждения, а в качестве определения для программистов давать выжимку от суждений - конъюнкции и т.д. - в итоге получится цельная статья. Согласны ? SergeyJ 00:12, 25 марта 2008 (UTC)Ответить[ответить]
- Добавил определение. Жду критику. Только имейте в виду, что любое расширение должно иметь смысл для всех специализаций. Я вам предлагаю теперь добавить специальный раздел, и внести ту информацию, которую вы хотели. Хацкер 00:20, 25 марта 2008 (UTC)Ответить[ответить]
- Со статьёй суждение эту объединять нельзя, т.к. опять же, логические операции имеют смысл в программировании (я имею в виду вообще в программировании а не в ИИ), и там они применяются к числам а не к суждениям. Хацкер 00:25, 25 марта 2008 (UTC)Ответить[ответить]
- Думаю, пока нормально. Детали буду думать. Можно не объединять, но сослаться нужно, тем самым будет видно отличие в определениях, и понятно откуда ростут ноги. Психологию я выкинул, т.к. это не ее дело. Единственно, есть подозрение, что мы слово "формализация" можем понимать немного по разному ... SergeyJ 00:32, 25 марта 2008 (UTC)Ответить[ответить]
- Вот неплохие определения http://mixport.ru/referat/referat/45835/ правда гугл тем и отличается, что все вырванно из контекста ... Конечно, я прав :) нас все-таки целый семестр этому учили в свое время ... Думаю справедливы оба определения. При этом отличием является то, над чем производится операции ... Кстати, даже предикаты определенны над понятиями и являются основой Экспертных систем ... Думаю, нужно давать определение из логики, объединять это со статьей Суждения, а в качестве определения для программистов давать выжимку от суждений - конъюнкции и т.д. - в итоге получится цельная статья. Согласны ? SergeyJ 00:12, 25 марта 2008 (UTC)Ответить[ответить]
В общем, неплохо получилось по-моему. Хацкер 00:36, 25 марта 2008 (UTC) Да, насчет «формализации» — все относительно. Но «формальную логику» я согласен оставить, так как среди философов термин, очевидно, сложился. Хотя по-мне она как раз недостаточно формальна. Хацкер 00:39, 25 марта 2008 (UTC)Ответить[ответить]
Думаю, к этому относится еще это http://ru.wikipedia.org/wiki/Операции_над_множествами, и это математизация логический операций но в смысле обобщения и т.п. Но оставим это на потом (тут Вы сможете насладится формализацией :) ) ... На сегодня думаю хватит ... в общем не плохо ... SergeyJ 00:42, 25 марта 2008 (UTC)Ответить[ответить]
Кто-нибудь сделает шаблон? Fractaler 14:40, 9 декабря 2011 (UTC)Ответить[ответить]