Език VVL
Хомоиконен Lisp синтаксис. 879 вградени. Двадесет семантични оператора. Нервното и символното съжителстват първокласно.
Всичко е команда в скоби
Едно синтактично правило — [команда аргументи…] — важи навсякъде: изчисление, клас, мрежово извикване, заявка към LLM. Кодът е данни: списък се изчислява или се цитира с обратен апостроф, за да се обработва като синтактично дърво.
# Prefix form [command args…] — eager evaluation, innermost first [print [+ 1 2 3]] # → 6 # Variables ($), assignment (=), sugared infix arithmetic (…) $prix = 100 $ttc = ($prix * 1.20) # → 120.0 # Quasiquote (backtick) = literal data; unquote (,) injects a value $n = 5 `[1 ,$n ,[+ 1 2]] # → [1 5 3] # String interpolation: ${ VVL expression } $msg = "n*n = ${[* $n $n]}" # → "n*n = 25" # Dotted accessors, chainable $s = " 42 " $s.trim.int # → 42 # Lambda (params → $__name) + map / pmap (parallel) $double = [lambda [x] [* $__x 2]] [map $double `[1 2 3 4]] # → [2 4 6 8] [pmap $extract $documents] # N LLM calls in parallel
Четири роли, нула конвейер
LLM не е външна услуга: той е оператор на езика. Семантичният операнд [§ "..."] (тип VVL_Semantic) превключва същия диспечер от аритметичен в невро-символен режим: [§ "котка"] == [§ "котешко"] връща 1. Четири семейства, плюс @.
Оператор [§ "…"]
Семантичният операнд превключва същия диспечер от аритметичен към невро-символен режим. Типизиран резултат: булев, низ или концепт.
[§ "chat"] == [§ "félin"] # → 1 [§ "voiture"] + [§ "électrique"] # → electric car (concept)
Генератор @
Описание поражда VVL ламбда, проверена от парсера и изпълнена в пясъчник (бял списък от функции). LLM мисли веднъж, кодът работи N пъти.
$fn = ($orders @ [§ "total_amount > 1000"]) [filter $fn $orders] # local lambda, 0 LLM
Обект [@ "име"]
Име на концепт се материализира във формален обект (Zalta). Ядро от свойства при инициализация, мързеливо дооткриване после, триетажен кеш → намаляваща цена.
$soleil = [@ "Soleil"] $soleil.masse_kg # → 1.989e30 ($soleil ~~ "Étoile") # → ~0.95
Компилатор §§ / generic
§§ компилира въпрос на естествен език в програма на VVL, изпълнява я и връща резултата. generic я индустриализира в именуван, тестван и съхранен keyword — използваем върху други концепти.
[§§ "consommation BMW Série 3 diesel 2024 ?"] # → ~5.1 [generic "masse de @{Saturne} ?"] [get-mass-kg-of-concept "Jupiter"] # reusable
Един езиков модел, четири различни роли, нула интеграционен конвейер. Точно това прави VVL невро-символен език, а не обвивка около API.
Двадесетте семантични оператора
Активирани от операнда [§ "…"], това са същите оператори както върху числа — типът на операнда ги превключва. Четири семейства плюс @.
| Семейство | Оператори | Изход | Пример → резултат |
|---|---|---|---|
1 · Размити сравнения — булева стойност, използваеми в if/filter |
== != < > <= >= | BOOLEAN | [§ "котка"] == [§ "котешко"] → 1 |
| 2 · Концептуална алгебра — аритметика върху понятия (семантичен / стрингов резултат) | + − * / % | SEMANTIC / STRING / APPROX | [§ "Париж"] % [§ "държава"] → Франция |
| 3 · Семантична логика — съставни концептуални изрази | && || ^^ ~ ? | SEMANTIC / STRING | $bio ? [§ "година на раждане?"] → 1912 |
| 4 · Принадлежност и включване — релацията IS-A първокласно (булева стойност) | in <| |> | BOOLEAN | [§ "ел. кола"] <| [§ "превозно средство"] → 1 |
| + · Генериране на код — хомоиконната кулминация (подробно по-долу) | @ | LAMBDA | $data @ [§ "филтрирай по възраст"] → lambda |
Фино разграничение: проекцията / извлича измерение, вече съдържащо се в описанието; свойството % пита общите знания на LLM. Семантичните резултати се композират като аритметика. Проектирана върху скала ([§ ["ниско" "средно" "високо"]]), / връща оценка: калибрирана позиция с нейната увереност.
Решавай бързо, разсъждавай при нужда
С [semanticMode "jev"] типизираните решения първо отиват при Jev (TypeSafe AI) — модел, който не пише текст, а решава (да/не, избор, позиция върху скала) с калибрирана увереност, за около 0,4 с. Ако се колебае (увереност под прага, по подразбиране 0,8), LLM поема. Същият синтаксис, същият кеш; всяко решение се записва в semantic.log (раздел Semantic на :log).
[semanticMode "jev"] [§ "a trumpet"] == [§ "a refrigerator"] # → 0 (Jev, 0.4 s) [match [§ $ticket] [§ "Payments, refunds"] "billing" [§ "Bugs, outages"] "technical" "escalade"] # branch chosen by meaning ([§ $review] / [§ ["calm" "annoyed" "angry"]]) # → <approx: 1.99 [high]> [fuzzy:degree [§ $mail] "spam"] # → 0.98
Оператори и match
Логическите оператори винаги връщат 1/0. [match] върху [§ …] избира клона по смисъл; с кортежи става таблица за решения: един въпрос на колона, едно извикване.
Оценка и размити степени
Проектиран върху скала, / връща калибрирана позиция (Approximation). [fuzzy:degrees] измерва няколко степени с едно извикване, готови за ~& и fuzzy:very.
Онтологии и Zalta
Jev избира подкласа на извлечен обект и съпоставя стойностите от затворен списък; сходството ~~ в правилата решава всички двойки с едно извикване.
Рутер, агент, архитект
Рутерът [§§] класифицира въпрос за около 0,4 с; съдията на [agent] казва „да“ без извикване на LLM; [architect] проверява стъпките си със степен, а не с цикъл на агент.
Цената на ИИ се плаща веднъж
Как една вероятностна система става толкова надеждна, колкото нативен оператор? Чрез четири гаранции, вградени в двигателя, а не оставени на разработчика: (1) автоматично типизиране на изхода (никога не парсвате низ), (2) детерминиран кеш на диска — един израз, един резултат във всички сесии, цена на API → 0 и възпроизводими тестове, (3) валидиран повторен опит до успех, (4) XML спецификации few-shot. Без типизиране би трябвало да парсвате; без кеша латентността би била прекомерна; без повторния опит и най-малкото отклонение на модела би счупило програмата. Именно съвкупността отличава VVL от обикновена обвивка.
От невронното към гарантирано разсъждение
Същият език носи символната страна: гарантирано дедуктивно разсъждение, типизирани схеми и доказана оптимизация. Реифицираните концепти стават операнди на тази алгебра — това е невро-символният мост.
База Prolog
Вградена дедуктивна база от знания. Обектите се инжектират в нея (obj-assert); изводите са гарантирани, а не приближени.
Онтологична система
Типизирани схеми, каскадни бизнес правила и възможни светове (форк на онтология) за разсъждение при допускания. В режим jev подкласът на извлечен обект и стойностите му от затворен списък се решават от Jev.
Оператори Zalta
Осем оператора (4 операции × 2 режима символен/хибриден): истинска алгебра върху концепти, безплатна след зареждане на свойствата. Сходството ~~ за нетривиални стойности минава през Jev: всички двойки с едно извикване.
Релационен miniKanren
Релации, а не функции: една дефиниция се решава във всички посоки. Пълно търсене с преплитане, ограничения (distinct, символен CLP) и вероятностен режим в духа на ProbLog.
Доказателства и договори
Ядро решава пропозиции и отговаря proved, refuted или unknown — но не и правдоподобно «да». За функция под договор require ⇒ ensure се проверява статично, без да се изпълнява.
Байесова диагностика
Всяка клауза носи бета-убеждение, а не булева стойност. Когато наблюдение противоречи на базата, двигателят изчислява минималните конфликти и подрежда заподозрените по цена на отзоваване.
Решател CP-SAT
VVL предоставя CP-SAT с концептуален синтаксис (типизирани решения, твърди и меки ограничения). Намерение на естествен език става модел с доказана оптималност.
Състояние, което се доказва и се изпълнява отново
Един [keyword], чийто [contract] посочва регистър, става смарт договор: всяко извикване е транзакция, записана в подписан блок, свързан във верига. Условията на договора се доказват преди изпълнението, проверяват се при всяко извикване, а цялата история се изпълнява отново — всичко това в самия език, без външен блокчейн.
[keyword transfer [contract [args from to [amount :type Integer :min 1]] [ledger bank] [state [src "account:{from}" :required] [dst "account:{to}" :required]] [require "amount <= src"] [ensure "src + dst = old(src) + old(dst)"]] [do [state:put src ([state:get src] - @3)] [state:put dst ([state:get dst] + @3)]]] [contract:verify transfer].status # → "proved" (for every state) [transfer "alice" "bob" 30] # → one signed block [transfer "alice" "bob" 500] # → refused, nothing written [ledger:verify bank].ok # → 1 (chain, signatures, full replay)
Състояние & условия
[state] декларира слотовете на договора; [require] се отнася до състоянието преди, [ensure] — до състоянието след, а old(x) свързва двете. Неизпълнено условие отменя транзакцията: всичко или нищо.
Доказване, след това повторно изпълнение
[contract:verify] доказва договора за всички състояния чрез символно изпълнение. [ledger:verify] изпълнява отново всяка транзакция с оригиналния код; [ledger:proof] доказва стойност без сървъра.
Класове & оракули
Клас, обвързан чрез [ledger име :key …]: обектът е състоянието, методът е транзакция. [oracle] записва в блока отговора на LLM, който придобива доказателствена сила и никога не се извиква отново при повторното изпълнение.
С доказателствена сила & разпределен
Закотвяне на върха на веригата при трета страна (времеви печат RFC 3161, Bitcoin). Реплики от клъстера изпълняват отново всеки блок, удостоверяват какво са проверили ([ledger:finality]) и откриват пренаписана история.
Интерпретиран, компилиран, после разпределен
Един и същи код минава от интерпретатора към нативна виртуална машина, а после към няколко машини — без да бъде пренаписван. Решава не настройка, а проверимо свойство на кода: неговата чистота.
Нативна ВМ
Кодът се компилира към Rust ВМ и остава инспектируем: междинно представяне, байткод и най-вече покритие — какво върви нативно и какво минава през хоста.
Гореща компилация
Ламбда, станала «гореща», се компилира автоматично след N извиквания. Прагът се чете и задава с една команда; векторизиращото ниво на map се превключва без рестарт.
Изчислителен клъстер
Затворена и чиста функция се адресира по своя SHA-256 и се изпълнява на персистентни шардове върху няколко инстанции. Което не се компилира, не се разпространява: детерминизмът е условие, не надежда.
VVL срещу Python + LangChain
| Критерий | Python + LangChain | VVL |
|---|---|---|
| LLM като оператор на езика | API извиквания за парсване | Нативно (20 оператора) |
| Конвейер извличане → обогатяване → решение | ~500 реда | ~40 реда |
| Код от LLM, проверен и изпълним | Сами да валидирате | @: парсер + пясъчник + повтор |
| Компилация NL → решател на ограничения | Не е нативно | CP-SAT, доказана оптималност |
| Постоянен семантичен кеш (цена → 0) | Трябва да се имплементира | Вградено |
| Мост LLM ↔ Prolog ↔ обект | Тройна интеграция | Първи клас |
| Възможни светове (форк на онтология) | Ръчно | ontology:* |
Единен ИИ сървър, управляван от език, чиято парадигма е създадена за него. Това е разликата между интегриране на ИИ и програмиране с него.