lean4-htt/tests/lean/run/meta_env1.lean
2016-07-29 13:03:23 -07:00

46 lines
2 KiB
Text

open list
meta_definition e := environment.mk_std 0
vm_eval environment.trust_lvl e
vm_eval environment.is_std e
vm_eval (environment.add e (declaration.def `foo []
(expr.sort (level.succ (level.zero)))
(expr.sort (level.succ (level.zero)))
bool.tt) : exceptional environment)
meta_definition e1 := (environment.add e (declaration.def `foo []
(expr.sort (level.succ (level.zero)))
(expr.sort level.zero)
bool.tt) : exceptional environment)
print "-----------"
open name
vm_eval do
e₁ ← environment.add e (declaration.def `foo []
(expr.sort (level.succ (level.zero)))
(expr.sort level.zero)
bool.tt),
e₂ ← environment.add_inductive e₁ `Two [] 0 (expr.sort (level.succ level.zero))
[(`Zero, expr.const `Two []),
(`One, expr.const `Two [])],
d₁ ← environment.get e₂ `Zero,
d₂ ← environment.get e₂ `foo,
/- TODO(leo): use
return (declaration.type d)
We currently don't use 'return' because the type is too high-order.
return : ∀ {m : Type → Type} [monad m] {A : Type}, A → m A
It is the kind of example where we should fallback to first-order unification for
inferring the (m : Type → Type)
The new elaborator should be able to handle it.
-/
exceptional.success (declaration.type d₁, declaration.type d₂,
environment.is_recursor e₂ `Two.rec,
environment.constructors_of e₂ `Two,
environment.fold e₂ (to_format "") (λ d r, r ++ format.line ++ to_fmt (declaration.to_name d)))