Лямбда-исчисление

แชร์
ฝัง
  • เผยแพร่เมื่อ 6 ก.ย. 2024
  • compscicenter.ru/
    Введение. Функциональное и императивное программирование. Лямбда-исчисление. Применение и абстракция. Свободные и связанные переменные. Комбинаторы. Функции нескольких переменных, каррирование. Подстановка, лемма подстановки. Бета-преобразование. Эта-преобразование. Расширение чистого лямбда-исчисления: дельта-преобразование.
    Лекция №1 в курсе "Функциональное программирование" (весна 2015).
    Преподаватель курса: Денис Николаевич Москвин.
    Страница лекции на сайте CS центра: goo.gl/b07ftp

ความคิดเห็น • 85

  • @The00tori00
    @The00tori00 6 ปีที่แล้ว +88

    0:48 Императивное программирование
    3:12 Пример в императивном стиле (скалярное произведение векторов)
    5:16 Функциональное программирование
    7:24 Пример в функциональном стиле (скалярное произведение двух векторов)
    8:52 Преимущества и недостатки функционального программирования
    12:33 Чистота и побочные эффекты
    18:34 лямбда-исчисление - введение
    20:27 Аппликация
    22:00 Абстракция
    24:02 Совместное применение абстракции и аппликации.
    28:06 Термы
    30:18 Примеры термов
    32:01 Термы - соглашения и упрощенная запись
    35:44 Свободные и связанные переменные
    44:25 Комбинаторы
    50:05 Функции нескольких переменных, каррирование
    57:00 Переименование связанных переменных

    • @pesk0w
      @pesk0w 3 ปีที่แล้ว +2

      спасибо

  • @FilatovRoman
    @FilatovRoman 9 ปีที่แล้ว +71

    Уважаемый, Денис Николаевич,
    спасибо вам!

  • @evgeniygazetdinov1620
    @evgeniygazetdinov1620 3 ปีที่แล้ว +8

    пишу этот комент больше для тех кто хочет посвятить больше чем 2.23 часа жизни но не может понять стоит ли .
    Лекция не простая.Автору однозначно спасибо Лектору поклон и уважение за труд.
    Расчитана больше на людей с мат. багажом(которым легко понятны конструкции в духе "применим выражение к неким произвольным выражениям")
    .ибо многие моменты пересмотреть придется.мне после строго императивного программирования не за что было ухватиться, уж очень много мат сленга.очень много формул а применения их маловато покрайне мере в первой части, и чувствуешь себя в школе, когда началась алгебра: пишут на доске кучу формул, которые почему дают какие то результаты, делают это с таким видом как будто ответы для всех очевидны, а если очевидны пойдем дальше. рекомендую перед просмотром лекции прочитать статью на хабре.после нее смотреть, не так больно habr.com/ru/post/215807/
    начал лекцию смотреть потому что была не понятна вводная по хаскелю. рекомендую вот этот курс rutracker.org/forum/viewtopic.php?t=4056296

  • @D0sart
    @D0sart 9 ปีที่แล้ว +41

    Очень здорово! Такого простого объяснения лямбда-исчисления я не видел никогда.

  • @matveysafronov2813
    @matveysafronov2813 8 ปีที่แล้ว +13

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

  • @user-df8bd7oj6j
    @user-df8bd7oj6j 3 ปีที่แล้ว +1

    Материал понял, порешать вместе с аудиторией было приятно) Спасибо!

  • @AkkayHT228
    @AkkayHT228 5 ปีที่แล้ว +3

    Я хоть изучаю TypeScript, мне все равно было полезно и интересно смотреть такого рода лекции, чтобы иметь более широкое представление об этом, а не только знать конкретную реализацию той или иной парадигмы на языке, чтоб знать отличия реализаций техник на тех или иных языках.

    • @gandromes
      @gandromes ปีที่แล้ว +1

      + ток я не только TypeScript, а еще и [Assembler(FASM), C, C#, JavaScript, Python] вот теперь haskell жую

  • @YanDoroshenko
    @YanDoroshenko 8 ปีที่แล้ว +12

    Отличная лекция, спасибо.

  • @user-tu3ld7kh3q
    @user-tu3ld7kh3q 4 ปีที่แล้ว +2

    "разрушающее присваивание" - это когда ломают и воруют, как в 90е (шучу)
    спасибо за классный урок!!!

  • @dimovich85
    @dimovich85 4 ปีที่แล้ว +1

    Супер, очень хорошо, я кажется начинаю понимать) Спасибо, Вам, большое!

  • @drfclub777
    @drfclub777 3 ปีที่แล้ว

    Максимально понятное объяснение, спасибо!

  • @snookeredman
    @snookeredman 5 ปีที่แล้ว +12

    1:36:45
    Это Deep Purple - Burn ?!!
    Наш человек))

    • @z1lla4
      @z1lla4 4 ปีที่แล้ว +2

      That shit crazy my nigga he's 100% American

  • @denisbryukhachev3663
    @denisbryukhachev3663 3 ปีที่แล้ว

    А вот за такие лекции спасибо!

  • @Jesovile
    @Jesovile 2 ปีที่แล้ว

    Огромное спасибо за объяснение. Это великолепно

  • @artmotika
    @artmotika 2 ปีที่แล้ว +1

    Билл Гейтс приехал в Россию : )

  • @t3ag3n3
    @t3ag3n3 2 ปีที่แล้ว

    Хорошее объяснение + я угарал с реакций лектора на некоторые моменты)

  • @user-ug6wm2xr5t
    @user-ug6wm2xr5t 5 ปีที่แล้ว +1

    Сошников, кажется, упоминал фамилию Эйлера, а он создавал учебник по математическому анализу и вот понятие функция у Эйлера пока ещё и не оформилась, а это и к логике имеет отношение. Вообще говоря, математики практически нужны для проведения рассчётов, и вот эти рассчёты делают они по определённому алгоритму, таким образом функция это алгоритм сделать что-то с величинами, подставляемыми в неё чтобы получить результат. А вот ещё функция это соответствие между аргумнтами и результатами, и вот тут то и содержиться некоторая разница, между двумя представлениями о функции, а ещё есть и логическое выражение, которым функция и определяется, вот это то я и не пойму, Чёрч и Хаскел пришли к некоему выводу, который аналогичен выводу практика ЭВМ Тьюринга и Поста. А это имеет отношение и к теории множеств и теореме Гёделя и ещё к какой-то теореме перед теоремой Гёделя.

  • @user-ur4ev7vl6c
    @user-ur4ev7vl6c 2 ปีที่แล้ว

    Классная теория про ФП! 10/10

  • @sayori2585
    @sayori2585 ปีที่แล้ว +1

  • @user-qf6ig7kv1g
    @user-qf6ig7kv1g 3 ปีที่แล้ว

    Пришлось попутно узнать про chokolatey, с помощью этой программы ghc ставится. ghc всё таки поставил. Посмотрим, что будет дальше. Спасибо за лекции лектору. Разбираться как ставить платформу Хаскел пришлось полдня.

  • @global_silence2623
    @global_silence2623 6 ปีที่แล้ว

    1:29:42
    C 4 на 5 строчку просто эта-преобразование можно использовать.

  • @muxahx3096
    @muxahx3096 2 ปีที่แล้ว

    некоторые примеры ну очень спорные.
    но в целом: очень и очень хорошо!

  • @IgorItkin
    @IgorItkin 7 ปีที่แล้ว +2

    имхо - в примере с императивным кодом все гораздо хуже. Результат будет зависеть от того, в каком порядке компилятор вычесляет аргументы в операции "+" (а может еще и от оптимизаций компилятора)

  • @PropMinecast
    @PropMinecast 8 ปีที่แล้ว +3

    1:43:46 Тут ведь все-таки (\xy.P)Q, а не (\y.P)Q?

    • @DenisMoskvin
      @DenisMoskvin 8 ปีที่แล้ว +4

      +Paul Surzh Да, неправильно написал, спасибо.

  • @R1d3rrr
    @R1d3rrr 8 ปีที่แล้ว +3

    в чем смысл применения переменной к переменной?
    (zx) - это что?
    В таком случае вообще не понятно, что за комбинатор омега малое
    "omega = \x.xx"
    Что он сделает, если я его применю к числу?

    • @mhevak
      @mhevak 7 ปีที่แล้ว

      А что такое перменная? Каково её значение? Значение - это ж терм. И лямбда в том числе.

    • @kazan29
      @kazan29 6 ปีที่แล้ว

      Значением переменной может быть функция.

    • @rajahbtw
      @rajahbtw 8 วันที่ผ่านมา

      @@mhevakпомог конечно (нет)

    • @rajahbtw
      @rajahbtw 8 วันที่ผ่านมา

      @@kazan29а если нет?

  • @in9597
    @in9597 6 ปีที่แล้ว

    И от меня спасибо

  • @nigan952
    @nigan952 7 ปีที่แล้ว

    40:37
    Почему вы говорите что только функция может приминаться к чему то? Хотя ранее применяли переменную к переменной

    • @DenisMoskvin
      @DenisMoskvin 7 ปีที่แล้ว +2

      Я там не слышу слово "только". На 40:37 я просто пример привожу на языке C, имеющий иллюстративный характер.

  • @eugenemartin134
    @eugenemartin134 3 ปีที่แล้ว

    не подскажите, а лямбда исчисление как нить пересекается с теорией категории или это разные темы?

  • @TheAquaton
    @TheAquaton 8 ปีที่แล้ว

    Не совсем понятно, есть ли различие между понятиями β-эквивалентности и β-преобразованием?

    • @onanpetrovich5501
      @onanpetrovich5501 8 ปีที่แล้ว +6

      Преобразование это действие, эквивалентность это результат действия преобразования

  • @seraphinresurgentis1512
    @seraphinresurgentis1512 3 ปีที่แล้ว +1

    Тот самый короткий not: \b.\x.\y. b y x
    пример:
    not tru -> tru y x -> y
    not fls -> fls y x -> x
    сломал мозг, а потом пришло озарение - надо просто поменять местами аргументы при вызове.

    • @anoname10
      @anoname10 2 หลายเดือนก่อน

      Чёт вообще не понял где тут not, да ещё и короткий

  • @alexandersobolev5284
    @alexandersobolev5284 5 ปีที่แล้ว +2

    2:13:00
    true = \ x y . x
    false = \ x y . y
    or = \ x y = x true y
    проверка:
    1. or true false = true true false = true
    2. or false true = false true true = true
    3. or true true = true true true = true
    4. or false false = false true false = false

    • @ivangagarinov4127
      @ivangagarinov4127 4 ปีที่แล้ว +1

      мне кажется лучше or = \ x y = x x y

    • @t3m8ch79
      @t3m8ch79 3 ปีที่แล้ว +1

      @@ivangagarinov4127 О! Я тоже до такого варианта додумался. Можно ещё заюзать комбинатор ω

    • @anoname10
      @anoname10 2 หลายเดือนก่อน

      @@ivangagarinov4127 А чем он лучше?

  • @aniketrex180
    @aniketrex180 4 ปีที่แล้ว

    Is there a no chance to get this in English

    • @Bratjuuc
      @Bratjuuc 3 ปีที่แล้ว

      No chance, unless we find a volunteer, who can translate the entire playlist.

  • @user-wb5dh1ps4x
    @user-wb5dh1ps4x ปีที่แล้ว

    Дайте этому профессору беговую дорожку, замаялся бедный)

  • @andriy8270
    @andriy8270 5 ปีที่แล้ว

    Не понял как преобразовывается (\x.x x)(\y z.y z) = (\y z.y z)(\y z.y z)
    если подставить вместо x подставить (\y z.y z) то получится (\y z.y z)x и это в свою очередь равно \x z.x z

    • @user-xq3vp6nt9n
      @user-xq3vp6nt9n 5 ปีที่แล้ว

      Здесь используется бета-редукция, определение которой было в лекции:
      (\x.M) Q = M[x:=Q] .
      Суть бета-редукции в том, что мы для вычисления абстракции (функции) \x.M для значения Q должны подставить в выражение M вместо всех вхождений x значение Q. То есть это просто вычисление функции при каком-то конкретном значении, как в школьном курсе алгебры.
      Теперь берём наш терм: (\x.x x)(\y z.y z). В нем M=(x x), а Q=(\y z.y z). Сделав формальную подстановку Q вместо x в M получим (\y z.y z)(\y z.y z).

  • @anoname10
    @anoname10 2 หลายเดือนก่อน

    1:19:52 - не дзета а кси

  • @Konstantin.Zharinov
    @Konstantin.Zharinov 4 ปีที่แล้ว +1

    А теперь сравните с любым видео по С# и сразу поймете, почему на Хаскеле [ почти ] никто не пишет.

    • @Bratjuuc
      @Bratjuuc 3 ปีที่แล้ว

      Если не нужна абстракция и выразительность, то пожалуйста

  • @control8eight
    @control8eight 8 ปีที่แล้ว

    ω 1 = (λx. xx)(λyz. yz)
    ...
    λz. (λy z'.yz')z
    как так получается, что это выражение равно
    = λzz'.zz'
    каким образом z подставилась в y?

    • @TheAquaton
      @TheAquaton 8 ปีที่แล้ว +1

      (λy z'.yz')z - тело абстракции λz. (λy z'.yz')z,
      (λy z'.yz')z => (λy.(λz'.yz'))z (ассоциация вправо)
      (λz'.yz') представим как некий лямба терм М => (λy.M)z =β M[y:=z] => (λz'.zz')
      возвращаемся к λz. (λy z'.yz')z, где (λy z'.yz')z = (λz'.zz') => λz.(λz'.zz') = λzz'.zz' (ассоциативно вправо)
      Как то так

    • @global_silence2623
      @global_silence2623 6 ปีที่แล้ว

      Хмм... Тут вообще можно юзать эта-преобразование.
      λx.Mx = M, x не принадлежит FV(M)
      В нашем случае x = z, M = (λy z'.yz'). В M икса вообще нет. Поэтому
      λz. (λy z'.yz')z = λy z'.yz' = |альфа-преобразование| = λzz'.zz'

  • @aemarkov
    @aemarkov 4 ปีที่แล้ว

    Здравствуйте! У меня есть вопрос. При рассмотрении комбинатора iif (2:07:15) мы имеем выражение "(\lambda xy.tru x y)AB" и потом осуществляем подстановку A и B. Но разве выражение "try x y" само не является редексом "(\lambda xy.x)x y", в который можно подставить x, y? Кажется, я где-то не до конца понял приоритет операций. С другой стороны, согласно правилам бета-преобразования, при замене терма в лямбда-терме на эквивалентный (а мы сделаем именно это, если произведем бета-преобразования терма "tru x y"), полученный лямбда-терм будет эквивалентен исходному. Я также провел вручную все преобразования по шагам, раскрыв сначала внутренний редекс, получил точно такой же результат. Но, все же, интересует вопрос: это я что-то не понял с порядком выполнения преобразований или лектор просто опустил для краткости эквивалентное преобразование?

    • @Bratjuuc
      @Bratjuuc 3 ปีที่แล้ว

      Хороший вопрос. Я думаю, что так как все эти бета-редукции вообще не меняют функцию, а меняют только её выражение т.е. то, как она записана, то это нормально, что получилось то же самое, но я сам на вашем уровне понимания примерно, так что могу ошибиться.

    • @bro_chenzox
      @bro_chenzox 2 ปีที่แล้ว

      Тема редукционные стратегии на этом этапе пока не освещена. Но, забегая вперед, согласно им β-редукцию можно проводить в любой последовательности(предпочтительнее конечно такая последовательность, которая приводит к "нормальной форме", т. е. когда к полученному выражению(терму) кроме α-редукции другие(β- и η-) конверсии применить больше нельзя).

  • @hellnoworld
    @hellnoworld 5 ปีที่แล้ว

    1:31:20

    • @krutoyinfo
      @krutoyinfo 5 ปีที่แล้ว

      че там?

  • @spirridd
    @spirridd 7 ปีที่แล้ว

    Не сразу понял, что ассоциативность влево тождественна правой ассоциативности :)

  • @romanbush5164
    @romanbush5164 ปีที่แล้ว +1

    Пипец какой то , то какая то математика с кучей формул, покруче логарифмов, с тригонометрией, а не програмирование...

  • @singingintherain4373
    @singingintherain4373 3 ปีที่แล้ว

    Он говорит как-будто пародирует Галустяна который пародирует Рамзана Кадырова

  • @hezymal9109
    @hezymal9109 7 ปีที่แล้ว +2

    Лекция хороша, но впредь двигайтесь по меньше во время рассказа, а то ваша нервозность передаётся на зрителя

    • @user-nc4mq6cg1f
      @user-nc4mq6cg1f 7 ปีที่แล้ว +8

      нормально, это не дает уснуть))) как бы всегда есть небольшой раздражитель))

    • @eugenepotapenko
      @eugenepotapenko 6 ปีที่แล้ว +6

      Норм. Главное доходчиво. А как автор эту доходчивость генерирует - его дело.

  • @javagraf2753
    @javagraf2753 7 ปีที่แล้ว

    мне одному кажется, что вектора не так перемножаются?

  • @viktorkorneev6968
    @viktorkorneev6968 7 ปีที่แล้ว +2

    Отличная лекция,спасибо большое