2023-01-17 15:49:34 +03:00
< div align = "center" >
2022-07-14 05:19:47 +03:00
2023-01-17 15:49:34 +03:00
![banner]
---
[![crates.io][crates.io-badge]][crates.io]
[![discord.invite][discord.badge]][discord.invite]
![build.badge]
**Kind** is a **pure functional programming language** and **proof assistant** .
[Getting started ](#getting-started ) •
[Examples ](#examples ) •
[Installation ](#installation )
< / div >
# Getting started
2022-07-19 04:47:18 +03:00
2022-09-02 19:40:09 +03:00
It is a complete rewrite of [Kind1 ](https://github.com/kindelia/kind-legacy ), based on
[HVM ](https://github.com/kindelia/hvm ), a **lazy** , **non-garbage-collected** and **massively parallel** virtual
machine. In [our benchmarks ](https://github.com/kindelia/functional-benchmarks ), its type-checker outperforms every
alternative proof assistant by a far margin, and its programs can offer exponential speedups over Haskell's GHC. Kind2
unleashes the [inherent parallelism of the Lambda
Calculus](https://github.com/VictorTaelin/Symmetric-Interaction-Calculus) to become the ultimate programming language of
the next century.
2022-07-19 04:47:18 +03:00
2023-01-17 15:49:34 +03:00
< div align = "center" > < b > Welcome to the inevitable parallel, functional future of computers! < / b > < / div >
2022-07-19 04:47:18 +03:00
2023-01-17 15:49:34 +03:00
## Examples
2022-07-19 04:47:18 +03:00
2022-09-02 19:40:09 +03:00
Pure functions are defined via equations, as in [Haskell ](https://www.haskell.org/ ):
2022-07-19 04:47:18 +03:00
2022-09-02 19:40:09 +03:00
```javascript
// Applies a function to every element of a list
map < a > < b > (list: List a) (f: a -> b) : List b
map a b Nil f = Nil
2022-10-04 10:45:09 +03:00
map a b (Cons head tail) f = Cons (f head) (map tail f)
2022-07-19 04:47:18 +03:00
```
2023-01-15 22:17:01 +03:00
Theorems can be proved inductively, as in [Agda ](https://wiki.portal.chalmers.se/agda/pmwiki.php ) and [Idris ](https://www.idris-lang.org/ ):
2022-09-02 19:40:09 +03:00
```javascript
// Black Friday Theorem. Proof that, for every Nat n: n * 2 / 2 == n.
black_friday_theorem (n: Nat) : Equal Nat (Nat.half (Nat.double n)) n
black_friday_theorem Nat.zero = Equal.refl
black_friday_theorem (Nat.succ n) = Equal.apply (x => Nat.succ x) (black_friday_theorem n)
```
2022-07-23 20:56:54 +03:00
For more examples, check the [Wikind ](https://github.com/kindelia/wikind ).
2022-07-14 05:19:47 +03:00
2023-01-17 15:49:34 +03:00
# Installation
2022-07-14 05:57:15 +03:00
2022-09-02 19:40:09 +03:00
First, install [Rust ](https://www.rust-lang.org/tools/install ) first, then enter:
2022-07-19 04:47:18 +03:00
```
2022-07-23 20:56:54 +03:00
cargo install kind2
2022-07-19 04:47:18 +03:00
```
2022-09-02 19:40:09 +03:00
Then, use any of the commands below:
2022-07-14 05:57:15 +03:00
2022-07-23 20:56:54 +03:00
Command | Usage | Note
---------- | ------------------------- | --------------------------------------------------------------
Check | `kind2 check file.kind2` | Checks all definitions.
Eval | `kind2 eval file.kind2` | Runs using the type-checker's evaluator.
Run | `kind2 run file.kind2` | Runs using HVM's evaluator, on Rust-mode.
2023-01-17 15:49:34 +03:00
To-HVM | `kind2 to-hvm file.kind2` | Generates a [.hvm ](https://github.com/kindelia/hvm ) file. Can then be compiled to a rust crate using HVM.
2022-09-02 19:40:09 +03:00
To-KDL | `kind2 to-kdl file.kind2` | Generates a [.kdl ](https://github.com/kindelia/kindelia ) file. Can then be deployed to [Kindelia ](https://github.com/kindelia/kindelia ).
2022-07-19 04:47:18 +03:00
2023-01-17 15:49:34 +03:00
The rust crate can be generated via HVM:
2022-07-19 04:47:18 +03:00
2022-09-02 19:40:09 +03:00
```
2023-01-17 15:49:34 +03:00
kind2 to-hvm file.kind2 > file.hvm
2022-09-02 19:40:09 +03:00
hvm compile file.hvm
```
2022-12-21 03:34:00 +03:00
---
2022-12-21 05:13:40 +03:00
- If you need support related to Kind, email [support.kind@kindelia.org ](mailto:support.kind@kindelia.org )
2022-12-21 03:38:01 +03:00
2022-12-21 04:55:30 +03:00
- For Feedbacks, email [kind@kindelia.org ](mailto:kind@kindelia.org )
2022-12-21 04:57:44 +03:00
- To ask questions and join our community, check our [Discord Server ](https://discord.gg/kindelia ).
2023-01-17 15:49:34 +03:00
[banner]: ./img/banner.png
[crates.io-badge]: https://img.shields.io/crates/v/kind2?style=flat-square
[crates.io]: https://crates.io/crates/zoxide
[discord.badge]: https://img.shields.io/discord/912426566838013994?style=flat-square
[discord.invite]: https://discord.gg/kindelia
[build.badge]: https://img.shields.io/github/actions/workflow/status/kindelia/kind/ci.yml?style=flat-square