tl-lang 0.4.6

A differentiable programming language with tensor support for machine learning
# Programación lógica en TensorLanguage (TL)

TL integra un potente motor de inferencia lógica al estilo Prolog directamente en su runtime. Esto permite definir bases de conocimiento, realizar razonamiento lógico y combinar los resultados con redes neuronales.

## 1. Resumen de sintaxis

### Hechos
```rust
father(alice, bob).       // "alice es el padre de bob"
```

### Declaraciones de relaciones
```rust
relation parent(entity, entity);
```

### Reglas
```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).
```

### Consultas
```rust
let is_father = ?father(alice, bob);
let children = ?father(alice, $child);
```

## 2. Salida simbólica

TL mapea automáticamente los nombres de entidades a IDs enteros únicos. Al mostrar resultados, los IDs se resuelven automáticamente a sus nombres originales.

## 3. Ámbito y organización de archivos

Los hechos y reglas deben definirse en el **ámbito global**. El sistema de módulos (`mod`, `use`) permite la organización en múltiples archivos.

## 4. Integración con tensores

Los resultados de consultas son tensores TL estándar, utilizables directamente en operaciones matemáticas y de redes neuronales.

## 5. Negación y comparaciones aritméticas

### Negación
```rust
manager(X) :- employee(X), not(has_boss(X)).
```

TL soporta negación estratificada. Los ciclos negativos se detectan y causan un error de compilación.

### Comparaciones aritméticas
```rust
adult(X) :- person(X, Age), Age >= 18.
```

Operadores soportados: `>`, `<`, `>=`, `<=`, `==`, `!=`