| .. | ||
| README.md | ||
This is a reference for the language. It is for now in construction, messy and can change at any time.
- Comments are C style comments
Predicates
- You can create a predicate with
let predicate_name = predicate - You can create an implication with
let predicate_name = conditions => resultwhere conditions and result are predicates - Predicates have to be proven with
predicate : {proof}in order to be used in other proofs - You can combine predicates with
(predicate1; predicate2; predicate3)
Truths
- A truth is a predicate that has been proven to be true
- A predicate alone is interpreted as a truth :
predicate;
Axioms
- You can use
axinstead ofletto define an axiom, or any externaly proven predicate - Axioms are considered true without needing a proof
Proofs
- You can prove a new predicate by "running" a true predicate
p1on an other true predicatep2that fulfill its conditions :let p = predicate : {p1(p2)} - The verifier will do its best to prove your predicates automatically, and tell you were it has not been able to
Variables
- You have to define a set/type before doing anything with a variable :
let x in set.R - You can define multiple variable with the same type together :
let a,b,c in set.N - If you give a value to a variable, the type is implicit :
let x = 3 - Variable definition is a predicate, but you don't have to prove it
- In a predicate combination, you can define a variable in a predicate and use it in another predicate :
(n in set.N, n/2=0) - If you define a variable with the same name as an other one, it will shadow it during the time of its existence
Expressions
- Expressions are OCamL style
- They are evaluated from left to right (generally)
Functions
- Predicates are functions that take truths as input and return a truth
- You can use
_instead of an argument and the verifier will try to deduce what didn't put. For example, if a truth is needed as an argument, the verifier will try to prove it itself