creator cover Филипп Друан
Филипп Друан

Филипп Друан 

Программист, писатель - молодой талантливый автор

4subscribers

4posts

goals2
0 of 10 paid subscribers
Помогите мне регулярно выпускать контент!
$64.45 of $56 raised
На нормальный звук.

About

Приветствую!
Я Филипп, программист.
В этом блоге я рассказываю вам о моих главных интересах: программировании и математике.
Эти сферы соединяются в двух областях знания: построении компиляторов и машинном обучении. Я надеюсь, что они будут дополнять друг друга, создавая неожиданные решения открытых задач.
Но есть место, где программирование и математика не просто соединяются, а становятся одним и тем же! Это язык программирования Lean, он же интерактивная система доказательства теорем. О нём очень мало материалов на русском, и я надеюсь восполнить этот пробел.

Lean потрясающий!

Мне так радостно писать на Lean синтаксический анализатор для простейшего языка!
То, что у меня занимало сотни строк на Zig, теперь занимает раза в два меньше кода!
Кстати, в этом очень помогают монады! Они делают код чистым и простым!
Чтобы их применять, не обязательно копаться в теории категорий (хотя она и прекрасна!), и понимать чем моноид отличается от эндофунктора.
Монады можно использовать в любом языке программирования для сокращения шаблонного кода.
Посмотреть мой проект компилятора простого Лиспа можно здесь:
https://github.com/Filipp-Druan/ftorlisp.lean/blob/main/Ftorlisp/ParserCombinators.lean

На подходе обзор Lean 4

Приветствую!
Я нашёл язык, в котором можно писать без багов! Ну, почти...
Это Lean 4. В нём можно записать любое желаемое свойство программы в типах функций, и потом проверить.
Звучит заманчиво. Но за чей счёт банкет? Такое раздолье не бывает бесплатно, скажете вы. И будете правы...
Lean основан на зависимых типах. Когда мы задаём типы функции мы создаём теорему. Когда мы её реализуем, и компилятор принимает реализацию, теорема доказана.
Например, есть у нас функция gcd(a, b: Nat), которая реализует алгоритм Евклида и находит наибольший общий делитель натуральных чисел a и b. Мы можем записать теорему, что от перемены их мест результат не меняется:
```
theorem gcd_comm {a b : Nat} : gcd a b = gcd b a := by
```
Это вроде просто. Но ведь это теорема. А теоремы нужно доказывать!
В данном конкретном случае доказательство занимает восемь строк. Это не сложное доказательство. Ведь сама функция gcd занимает всего четыре строчки (плюс четыре строчки на доказательство того, что она всегда завершается).
Но доказательство более сложных функций даётся сложнее. Секрет состоит в том, чтобы сложных функций у нас было как можно меньше! Тогда доказать свойства простых функций часто бывает тривиальной задачей! Иногда Lean может доказать их автоматически!
Каждую большую функцию нужно обязательно разбивать на несколько мелких! Их свойства мы доказываем относительно легко и просто. После этого строим сложную, и исходя из уже доказанных свойств наших кирпичиков, так же без колоссальных усилий доказываем свойства наших построек.
На бумаге звучит не плохо. Разбиение сложного на простые части действительно позволяет упростить разработку с доказательством. Но даже так доказательство корректности сложной программы - это достаточно сложно.
Но что замечательно, мы вообще не обязаны доказывать всё подряд! Lean - это просто хороший функциональный язык программирования. Говорят, достаточно быстрый! Мы можем писать на нём примерно как на Haskell, а доказательства использовать только там, где это действительно оправдано, и где цена ошибки высока.
Как функциональный язык программирования, Lean отсекает огромное количество багов просто за счёт того, что данные у вас неизменяемые. Плюс мощная система типов отсекает другую прорву багов. А для самых важный частей программы таки можно применить и всю мощь доказательств!
Я уверен, что Lean - это очень хороший и перспективный язык! Он позволяет нам быть уверенными, что наши программы работают так, как надо. А это очень важно. Кто любит баги? Наверное, только майнкрафтеры, которые их используют порой очень нестандартно. А в обычных программах баги не нужны!
Соглашусь, формальная верификация программ - это достаточно высокая цена за надёжность. Но она окупается, если код используется часто, как популярная библиотека, или если цена ошибки высока.
Сейчас гремит популярность ИИ в разработке. А ведь в его коде куча багов! Говорят, код он пишет довольно посредственный. Но если мы пишем доказательство, мы можем пожертвовать красотой кода в угоду скорости разработки Если доказательство корректно, оно корректно с вероятностью 99.99%! Главное самому задавать искусственному интеллекту цели для доказательства, а там уж он как-нибудь справится! Ладно, может и не справится, но генерация доказательств - это интересная исследовательская тема!
Ждите обзор Lean! Там я разберу все эти темы подробнее. Подписывайтесь, чтобы не пропустить этот обзор, и узнать о качествах этого замечательного языка.
Провели стрим с Александром Артёменко, я обработал запись, удалил пробелы, эканья, добавил примечания, вывел на экран те фразы, которые не слышно.
Отлично!
Subscription levels4

Приветствие

$3.6 per month
Самая простенькая подписка.
Она даёт доступ к материалам, которые скорее развлекательные и популярные. Хотя и качественные!
Оформляйте её, чтобы передать мне привет!

Благодарность

$7.1 per month
Это уже более продвинутый уровень подписки.
Она даёт доступ к материалам, которые не просто знакомят с темой, а немного погружают в неё.
Оформляйте её, если хотите получать доступ к полезным, а не только интересным знаниям!

Ободрение

$28.2 per month
Этот уровень подписки даёт доступ к дополнительным материалам, на основе которых я создавал свои платные посты. А их не так уж и мало нужно перебрать, чтобы написать хороший пост!
Subscription Spots Are Limited

Испрошение

$57 per month
На этом уровне вы можете заказывать у меня темы постов, если они находятся в рамках моей компетенции.
Очень прошу, оформите эту подписку, чтобы я писал для вас по одному посту в месяц по вашей теме.
Go up