Арсений Жижелев, Праймтолк
Disclaimer: доклад начинающего математика, возможны ошибки
Значения, типы, операции
a : A
\func inc(i : Int) : Int => i + 1
\data List (A : \Type)
| nil
| cons A (List A)
\func reverse{A : \Type}(as : List A) : List A
=> reverse0 as nil
\where
\func reverse0{A : \Type}(as accum : List A) : List A \elim as
| nil => accum
| cons a as => reverse0 as (cons a accum)
a : A
A : \Type
\func Function1(A B : \Type) : A -> B
\func ListType(A : \Type) : List A
вектор фиксированной длины
\data Vec (A : \Type) (n : Nat) \elim n
| 0 => fnil
| suc n => fcons A (Vec A n)
\func vec (A : \Type) (n : Nat) : \Type => Vec A n
\func prepend {A : \Type} {n : Nat} (v : vec A n) (a : A) : vec A (n + 1) =>
fcons a v
\func head {A : \Type} {n : Nat} (xs : Vec A (suc n)) : A
| fcons x _ => x
\func tail {A : \Type} {n : Nat} (xs : Vec A (suc n)) : Vec A n
| fcons _ xs => xs
доказательство свойств: длина списка
\func length' {A : \Type} (xs : List A) : Nat
| nil => 0
| cons _ xs => length' xs
\func length'==0 {A : \Type} (xs : List A) : length'(xs) = 0
| nil => 0 ==< idp >== 0 `qed
| cons _ xs => length'==0(xs)
свойство: если длина списка = 0, то список пуст
`length = 0 -> xs = nil`
\func length=0->nil {A : \Type} (xs : List A)
(length-xs=0 : length(xs) = 0) : xs = nil \elim xs
| nil => nil ==< idp >== nil `qed
| cons _ xs =>
\let suc=0 => suc (length xs) ==< length-xs=0 >== 0 `qed
\in suc/=0 suc=0
\func length {A : \Type} (xs : List A) : Nat
| nil => 0
| cons _ xs => suc (length xs)
язык не является полным по Тьюрингу!
зачем?
когда?
кому?
Профессиональная ответственность