#check b -- true : Bool#check prod -- Nat × Nat#check Bool -- Type#check Type -- Type 1#check Type 1 -- Type 2#check Prod -- Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)
检查值
#eval 1 + 2 -- 3
定义多态常量(polymorphic constants)
universe udef F1 (α : Type u) : Type u := Prod α αdef F2.{u} (α : Type u) : Type u := Prod α α
函数
定义匿名函数
#check fun (x : Nat) => x + 5 -- Nat → Nat #check λ (x : Nat) => x + 5 -- λ and fun mean the same thing#check fun x : Nat => x + 5 -- Nat inferred #check λ x : Nat => x + 5 -- Nat inferred#check fun (α β γ : Type) (u : β → γ) (v : α → β) (x : α) => u (v x)
调用匿名函数
#eval (λ x : Nat => x + 5) 10 -- 15
定义具名函数
def double : (Nat -> Nat) := fun x => x + xdef double (x : Nat) := x + x
namespace Foo def a : Nat := 5 def f (x : Nat) : Nat := x + 7 def fa : Nat := f a def ffa : Nat := f (f a) #check a #check f #check fa #check ffa #check Foo.fa end Foo -- #check a -- error -- #check f -- error #check Foo.a #check Foo.f #check Foo.fa #check Foo.ffa open Foo #check a #check f #check fa #check Foo.fa
嵌套namespace
namespace Foo def a : Nat := 5 def f (x : Nat) : Nat := x + 7 def fa : Nat := f a namespace Bar def ffa : Nat := f (f a) #check fa #check ffa end Bar #check fa #check Bar.ffa end Foo #check Foo.fa #check Foo.Bar.ffa open Foo #check fa #check Bar.ffa
namespace可多次打开
namespace Foo def a : Nat := 5 def f (x : Nat) : Nat := x + 7 def fa : Nat := f aend Foo#check Foo.a#check Foo.fnamespace Foo def ffa : Nat := f (f a)end Foo
隐式参数
def ident.{u} {α : Type u} (a : α) := a
#check ident -- ident.{u} {α : Type u} (a : α) : α
#check ident 1 -- Nat
#check @ident -- @ident : {α : Type u_1} -> α -> α
#eval @ident Nat 1 -- 1