Парадигма | Функциональное программирование , Императивное программирование |
---|---|
Семья | Помощник по проверке |
Разработчик | Lean FRO |
Впервые появился | 2013 ( 2013 ) |
Стабильный релиз | 4.11.0 / 1 сентября 2024 г. ( 2024-09-01 ) |
Предварительный релиз | 4.12.0-rc1 / 2 сентября 2024 г. ( 2024-09-02 ) |
Дисциплина печати | Статичный , сильный , предполагаемый |
Язык реализации | Бережливый, C++ |
ОС | Кроссплатформенный |
Лицензия | Лицензия Apache 2.0 |
Веб-сайт | lean-lang.org |
Под влиянием | |
ML Coq Haskell |
Lean — это помощник в доказательстве и функциональный язык программирования . [1] Он основан на исчислении конструкций с индуктивными типами . Это проект с открытым исходным кодом , размещенный на GitHub . Он был разработан в первую очередь Леонардо де Моура, когда он работал в Microsoft Research , а теперь в Amazon Web Services , и за время своей истории получил значительный вклад от других соавторов и сотрудников. В настоящее время разработка поддерживается некоммерческой организацией Lean Focused Research Organization (FRO) .
Lean был запущен Леонардо де Моура в Microsoft Research в 2013 году . [2] Первоначальные версии языка, позже известные как Lean 1 и 2, были экспериментальными и содержали такие функции, как поддержка теории гомотопических типов , основанной на фундаментальных принципах, которые впоследствии были отменены.
Lean 3 (впервые выпущен 20 января 2017 г.) была первой относительно стабильной версией Lean. Она была реализована в основном на C++ с некоторыми функциями, написанными на самом Lean. После версии 3.4.2 Lean 3 был официально прекращен, в то время как началась разработка Lean 4. В этот промежуточный период члены сообщества Lean разработали и выпустили неофициальные версии вплоть до 3.51.1.
В 2021 году был выпущен Lean 4, который представлял собой повторную реализацию доказателя теорем Lean, способного производить код C , который затем компилируется, что позволяет разрабатывать эффективную автоматизацию, специфичную для домена. [3] Lean 4 также содержит макросистему и улучшенные процедуры синтеза классов типов и управления памятью по сравнению с предыдущей версией. Еще одним преимуществом по сравнению с Lean 3 является возможность избегать прикосновения к коду C++ для изменения интерфейса и других ключевых частей базовой системы, поскольку теперь все они реализованы в Lean и доступны конечному пользователю для переопределения по мере необходимости. [ необходима цитата ]
Lean 4 не имеет обратной совместимости с Lean 3. [4]
В 2023 году была сформирована группа Lean FRO, целью которой является улучшение масштабируемости и удобства использования языка, а также внедрение автоматизации доказательств . [5]
Официальный пакет Lean включает стандартную библиотеку battery , которая реализует общие структуры данных , которые могут использоваться как для математических исследований, так и для более традиционной разработки программного обеспечения. [6]
В 2017 году начался поддерживаемый сообществом проект по разработке библиотеки Lean mathlib с целью оцифровать как можно больше чистой математики в одной большой связной библиотеке, вплоть до исследовательского уровня математики. [7] [8] По состоянию на сентябрь 2024 года mathlib формализовал более 165 000 теорем и 85 000 определений в Lean. [9]
Lean интегрируется с: [10]
Взаимодействие осуществляется через клиентское расширение и сервер протокола языкового сервера .
Он имеет встроенную поддержку символов Unicode , которые можно вводить с помощью последовательностей, подобных LaTeX , например, "\times" для "×". Lean также можно скомпилировать в JavaScript и получить к нему доступ в веб-браузере, а также он имеет обширную поддержку метапрограммирования .
Натуральные числа можно определить как индуктивный тип . Это определение основано на аксиомах Пеано и гласит, что каждое натуральное число является либо нулем, либо последующим за некоторым другим натуральным числом.
индуктивный Nat : Тип | ноль : Nat | сукц : Nat → Nat
Сложение натуральных чисел можно определить рекурсивно , используя сопоставление с образцом .
def Nat.add : Nat → Nat → Nat | n , Nat.zero => n -- n + 0 = n | n , Nat.succ m => Nat.succ ( Nat.add n m ) -- n + succ(m) = succ(n + m)
Это простое доказательство для двух предложений и (где есть конъюнкция и импликация ) в Lean с использованием тактического режима:
теорема and_swap ( p q : Prop ) : p ∧ q → q ∧ p := по вступлению h -- предположим, что p ∧ q с доказательством h, цель q ∧ p применить And.intro -- цель разделена на две подцели, одна q, а другая p · exact h.right -- первая подцель в точности правая часть h : p ∧ q · exact h.left -- вторая подцель в точности левая часть h : p ∧ q
Это же доказательство в терминологическом режиме:
теорема and_swap ( p q : Prop ) : p ∧ q → q ∧ p := fun ⟨ hp , hq ⟩ => ⟨ hq , hp ⟩
Lean привлек внимание таких математиков, как Томас Хейлз , [11] Кевин Баззард , [12] и Хезер Макбет. [13] Хейлз использует его для своего проекта Formal Abstracts. [14] Баззард использует его для проекта Xena. [15] Одна из целей проекта Xena — переписать каждую теорему и доказательство в программе бакалавриата по математике в Имперском колледже Лондона на Lean. Макбет использует Lean для обучения студентов основам математического доказательства с мгновенной обратной связью. [16]
В 2021 году группа исследователей использовала Lean для проверки правильности доказательства Питера Шольце в области сжатой математики . Проект привлек внимание формализацией результата на переднем крае математических исследований. [17] В 2023 году Теренс Тао использовал Lean для формализации доказательства гипотезы полиномиального Фреймана-Ружи (PFR), результат был опубликован Тао и его коллегами в том же году. [18]
В 2022 году OpenAI и Meta AI независимо друг от друга создали модели ИИ для генерации доказательств различных задач олимпиад на уровне средней школы по Lean. [19] Модель Meta AI доступна для публичного использования в среде Lean. [20]
В 2023 году Влад Тенев и Тудор Ахим совместно основали стартап Harmonic, цель которого — уменьшить галлюцинации ИИ путем генерации и проверки Lean-кода. [21]
В 2024 году Google DeepMind создал AlphaProof [22] , который доказывает математические утверждения в Lean на уровне серебряного призера Международной математической олимпиады . Это была первая система ИИ, которая достигла достойного медали результата при решении задач математической олимпиады. [23]