Лямбда это что такое в физике
λ-исчисление. Часть первая: история и теория
Идею, короткий план и ссылки на основные источники для этой статьи мне подал хабраюзер z6Dabrata, за что ему огромнейшее спасибо.
UPD: в текст внесены некоторые изменения с целью сделать его более понятным. Смысловая составляющая осталась прежней.
Вступление
Возможно, у этой системы найдутся приложения не только
в роли логического исчисления. (Алонзо Чёрч, 1932)
Вообще говоря, лямбда-исчисление не относится к предметам, которые «должен знать каждый уважающий себя программист». Это такая теоретическая штука, изучение которой необходимо, когда вы собираетесь заняться исследованием систем типов или хотите создать свой функциональный язык программирования. Тем не менее, если у вас есть желание разобраться в том, что лежит в основе Haskell, ML и им подобных, «сдвинуть точку сборки» на написание кода или просто расширить свой кругозор, то прошу под кат.
Начнём мы с традиционного (но краткого) экскурса в историю. В 30-х годах прошлого века перед математиками встала так называемая проблема разрешения (Entscheidungsproblem), сформулированная Давидом Гильбертом. Суть её в том, что вот есть у нас некий формальный язык, на котором можно написать какое-либо утверждение. Существует ли алгоритм, за конечное число шагов определяющий его истинность или ложность? Ответ был найден двумя великими учёными того времени Алонзо Чёрчем и Аланом Тьюрингом. Они показали (первый — с помощью изобретённого им λ-исчисления, а второй — теории машины Тьюринга), что для арифметики такого алгоритма не существует в принципе, т.е. Entscheidungsproblem в общем случае неразрешима.
Так лямбда-исчисление впервые громко заявило о себе, но ещё пару десятков лет продолжало быть достоянием математической логики. Пока в середине 60-х Питер Ландин не отметил, что сложный язык программирования проще изучать, сформулировав его ядро в виде небольшого базового исчисления, выражающего самые существенные механизмы языка и дополненного набором удобных производных форм, поведение которых можно выразить путем перевода на язык базового исчисления. В качестве такой основы Ландин использовал лямбда-исчисление Чёрча. И всё заверте…
λ-исчисление: основные понятия
Синтаксис
В основе лямбда-исчисления лежит понятие, известное ныне каждому программисту, — анонимная функция. В нём нет встроенных констант, элементарных операторов, чисел, арифметических операций, условных выражений, циклов и т. п. — только функции, только хардкор. Потому что лямбда-исчисление — это не язык программирования, а формальный аппарат, способный определить в своих терминах любую языковую конструкцию или алгоритм. В этом смысле оно созвучно машине Тьюринга, только соответствует функциональной парадигме, а не императивной.
Мы с вами рассмотрим его наиболее простую форму: чистое нетипизированное лямбда-исчисление, и вот что конкретно будет в нашем распоряжении.
Процесс вычисления
Рассмотрим следующий терм-применение:
Существует несколько стратегий выбора редекса для очередного шага вычисления. Рассматривать их мы будем на примере следующего терма:
который для простоты можно переписать как
(напомним, что id — это функция тождества вида λx.x )
В этом терме содержится три редекса:
Недостатком стратегии вызова по значению является то, что она может зациклиться и не найти существующее нормальное значение терма. Рассмотрим для примера выражение
(λx.λy. x) z ((λx.x x)(λx.x x))
Этот терм имеет нормальную форму z несмотря на то, что его второй аргумент такой формой не обладает. На её-то вычислении и зависнет стратегия вызова по значению, в то время как стратегия вызова по имени начнёт с самого внешнего терма и там определит, что второй аргумент не нужен в принципе. Вывод: если у редекса есть нормальная форма, то «ленивая» стратегия её обязательно найдёт.
На этом закончим вводную в лямбда-исчисление. В следующей статье мы займёмся тем, ради чего всё и затевалось: программированием на λ-исчислении.
Объяснение лямбда-выражений
У меня возникли вопросы о лямбда-выражениях и RxJava. Эти вопросы в основном касаются не полного понимания лямбда-выражений или RxJava. Я попытаюсь объяснить лямбда-выражения как можно проще. RxJava я опишу отдельно.
Лямбда-выражения и RxJava
Что такое лямбда-выражения? Лямбда-выражения – это «всего лишь» новый способ сделать то же самое, что мы всегда могли сделать, но в более чистом и менее многословном новом способе использования анонимных внутренних классов.
Анонимный внутренний класс в Java – это класс без имени, он должен использоваться, если вам необходимо переопределить методы класса или интерфейса. Анонимный внутренний класс может быть создан из класса или интерфейса.
В Android мы обычно используем анонимный внутренний класс в качестве слушателя, например, для кнопок такого рода:
Вернемся к лямбда-выражениям. Это следующая часть, которая является частью предыдущего кода, который считается анонимным внутренним классом.
Лямбда-выражения могут использоваться только в том случае, если вам нужно переопределить не более одного метода. К счастью для нас, View.OnClickListener содержит только один. Посмотрите на код ниже. Как думаете, какую его часть нам придётся убрать?
В некоторых случаях вам может потребоваться добавить тип к параметру, если компилятору не удается его угадать, вы можете сделать это, добавив его перед параметром:
Вы также можете использовать многострочный код:
Если у вас есть интерфейс с методом, принимающим два параметра…
…лямбда-выражение будет выглядеть следующим образом:
Если метод имеет возвращаемый тип…
…лямбда-выражение будет выглядеть следующим образом:
Но это еще не все, есть некоторые специальные случаи, которые делают код еще меньше. Если тело вашего метода содержит только одну строку кода, вы можете удалить фигурные скобки <>. Если вы удаляете фигурные скобки, вам также необходимо удалить точку с запятой, оставив следующее:
Есть еще одна вещь, которую мы можем сделать. Если у нас только одна строка кода, то компилятор может понять, нужна ли возвращаемая часть или нет, поэтому мы можем оставить ее следующим образом:
Если бы у нас был многострочный код, это свелось бы к следующему:
Так что же мы сделали? Мы взяли это:
и превратили вот в это:
Осталось только одна вещь, ссылки на методы. Допустим, у нас есть интерфейс, как и раньше, и метод, который этот интерфейс принимает как параметр:
Без лямбда-выражения это выглядело бы так:
Добавив лямбда-выражение, как мы это делали раньше, получим следующее:
Но это еще не все. Если используемый код – однострочный и вызываемая функция принимает один параметр, мы можем передавать ссылку на метод в таком виде:
Параметр будет передаваться автоматически, без необходимости использования другого кода! Удивительно, правда? Надеюсь, вы узнали что-то новое!
Лямбда-функции и замыкания
Конечно многие из нас знакомы с этим понятием, однако данная статья рассчитана на новичков. В данном посте постараюсь рассмотреть данный феномен и привести примеры использования. Для начала необходимо понять что же такое лямбда-функция. Итак, лямбда-функция, часто ее называют анонимной, т. е. функция при определении которой не нужно указывать ее имя. Возвращаемое значение такой функцией присваивается переменной, через которую в последствие эту функцию можно вызывать.
До выхода PHP 5.3 определять лямбда-функции было возможно, но их нельзя было назвать полноценными. Сейчас я приведу пару примеров и продолжим рассматривать данные понятия.
Конечно динамическое создание функций не решает всех проблем, однако порой написание такой одноразовой функции может быть полезным. Можно расширить наш пример:
Понятие замыкания наверняка знакомо программистам на JavaScript, а так же программистам на многих других языках. Замыкание — это функция, охватывающая или замыкающая текущую область видимости. Что бы понять все это, рассмотрим пример:
Как вы уже могли заметить, функция не имеет имени и результат присваивается переменной. Лямбда-функция, созданная таким образом, возвращает значение в виде объекта типа closure.
В PHP 5.3 стало возможно вызывать объекты как если бы они были функциями. А именно магический метод __invoke() вызывается каждый раз, когда класс вызывается как функция.
Переменные недоступны внутри функции, если они не объявлены глобальными, так же переменные из дочернего контекста недоступны если только не используется зарезервированное слово use. Обычно в PHP переменные передаются в замыкание значением, это поведение можно изменить с помощью ампермсанда перед переменной в выражении use. Рассмотрим пример:
Этот пример уже можно использовать для достаточно гибкого прототипирования. Достаточно объявить методы для всех SQL-операций с объектом.
Автор не призывает всех придерживаться такой практики, равно как и не считает что так лучше, все вышеописанное лишь пример использования, причем возможно не самый техничный и интересный, и не более того.
UPD Говоря о том самом длинном регулярном выражении, я не стал подписывать его в комментариях и решил вынести сюда. Оно лишь ищет строки в одинарных и двойных кавычках, а так же имена таблиц и экранирует их.
Лямбда-точка
Лямбда-точка — температура (около 2,17 K), ниже которой жидкий гелий (гелий I), переходит в состояние сверхтекучести (гелий II). Если быть более точным, существуют нижняя лямбда-точка (при 2.172 K и 0.0497 атм) и верхняя лямбда-точка (при 1.76 K и 29.8 атм).
Название происходит от специфического очертания графика удельной теплоёмкости как функции температуры (при постоянном давлении), напоминающее букву греческого алфавита. Удельная теплоёмкость стремится к бесконечности по мере опускания температуры к лямбда-точке.
Полезное
Смотреть что такое «Лямбда-точка» в других словарях:
лямбда-точка — лямбда точка, лямбда точки … Орфографический словарь-справочник
лямбда-точка — сущ., кол во синонимов: 1 • температура (11) Словарь синонимов ASIS. В.Н. Тришин. 2013 … Словарь синонимов
лямбда-точка — lambda taškas statusas T sritis fizika atitikmenys: angl. lambda point vok. Lambda Punkt, m rus. лямбда точка, m pranc. point lambda, m … Fizikos terminų žodynas
Лямбда (Lambda) — точка на черепе, где сходятся лямбдовидный и сагиттальный швы. Источник: Медицинский словарь … Медицинские термины
Лямбда-исчисление — (λ исчисление) формальная система, разработанная американским математиком Алонзо Чёрчем, для формализации и анализа понятия вычислимости. λ исчисление может рассматриваться как семейство прототипных языков программирования. Их основная… … Википедия
ЛЯМБДА — (lambda) точка на черепе, где сходятся лямбдовидный и сагиттальный швы … Толковый словарь по медицине
Сверхтекучая жидкость — Аномальное течение Гелия II Сверхтекучесть термодинамическая фаза квантовой жидкости, при котором она протекает через узкие щели и капилляры без трения. До недавнего времени сверхтекучесть была известна только у жидкого гелия, однако в последние… … Википедия
Фаза (в термодинамике) — Фазовые переходы Статья является частью серии «Термодинамика». Понятие фазы Равновесие фаз Квантовый фазовый переход Разделы термодинамики Начала термодинамики Уравнение состояния … Википедия
Сверхтвёрдое тело — Сверхтекучее твёрдое тело (англ. Supersolid) термодинамическая фаза квантовой жидкости, представляющей собой твёрдое тело со свойствами сверхтекучей жидкости. Известно, что при охлаждении квантовой жидкости (конденсата Бозе Эйнштейна) до… … Википедия
Бозе-Эйнштейна конденсация — Конденсат Бозе Эйнштейна агрегатное состояние материи, основу которой составляют бозоны, охлаждённые до температур, близких к абсолютному нулю. В таком сильно охлаждённом состоянии достаточно большое число атомов оказывается в своих минимально… … Википедия
Подробно о лямбда-зондах
Лямбда-зонд необходим для того, чтобы передавать информацию блоку управления двигателем о том, насколько полно сгорает топливовоздушная смесь. Именно лямбда-зонд отвечает за определение количества кислорода в выхлопном газе, и на основании этого определяет состав топливовоздушной смеси.
Теоретически, на кило бензина приходится порядка 14,7 килограмм воздуха. В таком случае, бензин и кислород будут выгорать на 100%, таким образом, не выделяя вредных веществ. Это положительно сказывается и на расходе топлива.
Данная пропорция – 14,7:1 носит название «фактор избыточного количества воздуха», и обозначается буквой греческого алфавита λ (лямбда).
В случае, когда лямбда меньше единицы – ТВС получается обогащенной, в ней увеличенное количество топлива.
Но если данный показатель выше единицы, то топливовоздушная смесь – бедная, в ней не хватает топлива.
По какому принципу функционирует узкополосный лямбда-зонд?
Под колпачком из металла расположен чувствительный, выполненный из диоксида циркония, элемент. Благодаря чему он является электролитом, проще говоря – пропускает через себя ток, но газ попасть в него не может. Этот элемент имеет газопроницаемое платиновое контактное покрытие, к которому подведены проводки.
В среднем, во время работы температура данного элемента достигает 350 градусов. У первых моделей датчика воздуха не было дополнительного подогрева, за это отвечали выхлопные газы. Но впоследствии их начали оборудовать подогревателем, благодаря чему лямбда-зонд прогревается в разы быстрее.
Что мы получаем: внутренняя часть керамики работает с воздухом, а внешняя – с отработанными газами. Из-за разницы в концентрации молекул провоцируется перемещение ионов кислорода из области с повышенным содержанием кислорода в область, где его не хватает. Ионы свободно проникают сквозь керамический элемент, являющийся токопроводящим. Как раз благодаря разнице в количестве кислорода и возникает сигнальное электрическое напряжение.
Так, 0,45 Вольт равны единице, т.е. лямбде. Обогащенная ТВС создает максимальное напряжение в 0,9 Вольт, а бедная только 0,1 Вольт. Именно так функционирует узкополосный датчик кислорода. Он фиксирует отклонения от стехиометрии в очень узком диапазоне (14,0 – 15,0 к 1), таким образом замечая отклонения в какую-то из сторон.
К датчику подведены провода, их может быть разное число, но не более 4. 3-4 проводка свидетельствуют о дополнительно обогреве. Белые отвечают за подпитку обогревателя датчика. По черному проводу подается сигнал к блоку управления, а серый – это масса. Если у зонда только два белых и один черный проводки, то в таких случаях зонд соединяется с массой по корпусу.
Чтобы провести диагностику данного датчика кислорода – снимается осцилограмма, либо же придется использовать специальное программное обеспечение. В нормальном состоянии сигнал изменяется минимум раз в секунду, колеблясь в рамках 0,1-0,9 Вольт. В случае, когда сигнал сменяется очень медленно, а сигнальное напряжение не достигает 0,1 Вольт, это говорит о том, что сенсор вышел из строя. Кроме этого исправный датчик кислорода оперативно реагирует на малейшие изменения состава ТВС. Чтобы «обогатить» смесь достаточно «пшикнуть» во впуск пропаном. В таком случае, сенсор сразу выдаст 0,9 Вольт. Чтобы сделать смесь «бедной» достаточно снять вакуумную трубку. На что сразу отреагирует датчик, выдав 0,1 Вольта.
Но куда проще «прогазовать», чтобы сработала дроссельная заслонка. В таком случае сразу же поменяются показания датчика кислорода, сменившись до обогащенной. Если установлена пара зондов, то вышедший из строя будет реагировать с замедлением.
Проверить, как работает обогрев датчика – проще простого. Сначала проверьте, подается ли от аккумулятора питание (9-12 Вольт). После чего проверьте сопротивление нагревательного элемента. В рабочем состоянии будет 2,3-4,3 Ом на 25 градусах.
Лямбда-зонд на основе оксида титана
На смену узкополосному лямбда-зонду пришли датчики на оксиде титана. Обычно, в выпускной системе устанавливался всего 1 подобный зонд, с 3-4 проводками, подведенными к нему. Его точность заметно выше, но и цена – кусается. Зонд не сообщается с атмосферой, не создает напряжение, но его измерительный диапазон – лучше. По сути, его функционал напоминает расходомер. Он запитан от блока управления и выдает сигнал в виде напряжения. Сигнал регулярно меняется, диапазон 0,4-4.5 Вольт. Чем больше напряжение – тем беднее ТВС.
Широкополосный лямбда-зонд
Наиболее современный вариант, который в среде автолюбителей носит простое название «датчик воздух/топливо». Тут уже несколько больше проводов – 5-6. Зонд отвечает за измерение ТВС во всем диапазоне. Широкополосные зонды ставят на современные бензиновые моторы, которые функционируют на обедненной смеси, на моторах с непосредственным впрыском, а кроме этого на дизелях. Рабочая температура – 650 градусов.
Блок управления, в который поступают все данные с датчиков, отвечает за изменение подачи топлива, в зависимости от поступающего воздуха. Проблема лишь в том, что датчик находится во впускной системе, довольно далеко от камер сгорания, поэтому регулировка оставляет желать лучшего. Но имеем, что имеем.
Диагностика широкополосного лямбда-зонда
Мало кто знает, но фиксируемое датчиком напряжение – выдуманное, на самом деле его просто нет. Сигнал заметен исключительно для диагностического оборудования, и получаемый показатель требуется сверить с оптимальными данными, которые указывает завод-изготовитель. Например, напряжение в 1,5 или даже в 3,6 Вольта – может быть оптимальным, тут все напрямую зависит от зонда и марки вашего авто. Главное, чтобы сигнал был постоянным, и не изменялся без коррекции. Сигнал должен меняться исключительно вовремя:
Чтобы это сделать, просто запустите во впуск пропан, или снимите с коллектора любой шланг, чтобы в него попал воздух. Обогащенная топливовоздушная смесь приводит к снижению напряжения, а бедная – увеличивает. Проще говоря, параметры смеси будут отражать топливную коррекцию.