tl-lang 0.4.6

A differentiable programming language with tensor support for machine learning
# Логическое программирование в TensorLanguage (TL)

TL интегрирует мощный движок логического вывода в стиле Prolog непосредственно в свою среду выполнения. Это позволяет определять базы знаний, выполнять логические рассуждения и комбинировать результаты с нейронными сетями.

## 1. Обзор синтаксиса

### Факты
```rust
father(alice, bob).       // "alice — отец bob"
```

### Объявления отношений
```rust
relation parent(entity, entity);
```

### Правила
```rust
grandparent(x, z) :- father(x, y), father(y, z).
ancestor(x, y) :- father(x, y).
ancestor(x, y) :- father(x, z), ancestor(z, y).
```

### Запросы
```rust
let is_father = ?father(alice, bob);
let children = ?father(alice, $child);
```

## 2. Символьный вывод

TL автоматически отображает имена сущностей в уникальные целочисленные идентификаторы. При отображении результатов идентификаторы автоматически преобразуются обратно в исходные имена.

## 3. Область видимости и организация файлов

Факты и правила должны быть определены в **глобальной области видимости**. Модульная система (`mod`, `use`) позволяет организацию в нескольких файлах.

## 4. Интеграция с тензорами

Результаты запросов — стандартные тензоры TL, которые можно использовать непосредственно в математических и нейросетевых операциях.

## 5. Отрицание и арифметические сравнения

### Отрицание
```rust
manager(X) :- employee(X), not(has_boss(X)).
```

TL поддерживает стратифицированное отрицание. Отрицательные циклы обнаруживаются и вызывают ошибку компиляции.

### Арифметические сравнения
```rust
adult(X) :- person(X, Age), Age >= 18.
```

Поддерживаемые операторы сравнения: `>`, `<`, `>=`, `<=`, `==`, `!=`