Example #1
0
def create_tactic_state(env, goal_type):
  options = lean.options()
  decl_name = lean.name("my_theorem")

  lctx = lean.local_context()
  mctx = lean.metavar_context()

  goal = mctx.mk_metavar_decl(lctx, goal_type)
  goals = lean.list_expr(goal, lean.list_expr()) # TODO(dhs): python lists

  deq_state = lean.defeq_can_state()
  tustate = lean.tactic_user_state()

  tstate = lean.tactic_state(env, options, decl_name, mctx, goals, goal, deq_state, tustate)
  return tstate
from nose.tools import assert_equals, assert_not_equals, assert_false, assert_true
import lean

n0 = lean.name()
n1 = lean.name("hello")
n2 = lean.name(n1, "goodbye")
n3 = lean.name(n2, 5)

assert_equals(str(n3), "hello.goodbye.5")

d = {n3 : 4, n2 : 7}

assert_equals(d[n3], 4)

assert_equals(d[n2], 7)

assert_not_equals(n2, n3)

assert_equals(lean.name(n2, 5), n3)

def name_to_list(n):
    l = []
    while not n.is_anonymous():
        if n.is_string():
            l.insert(0, n.get_string())
        elif n.is_numeral():
            l.insert(0, n.get_numeral())
        n = n.get_prefix()
    return l

assert_equals(name_to_list(n3), ["hello", "goodbye", 5])
Example #3
0
from nose.tools import assert_equals, assert_not_equals, assert_false, assert_true

import lean

bi1 = lean.binder_info()
bi2 = lean.mk_implicit_binder_info()

assert_false(bi1.is_implicit())

assert_false(bi2.is_inst_implicit())

assert_true(bi2.is_implicit())

b1 = lean.binder(lean.name("x"), lean.expr(), bi2)
assert_equals(b1.get_name(), lean.name("x"))

v1 = lean.mk_var(1)
v2 = lean.mk_var(2)

c_foo = lean.mk_constant(lean.name("foo"))
c_bar = lean.mk_constant(lean.name("bar"),
                         lean.list_level(lean.mk_level_one(),
                                         lean.list_level(lean.mk_level_zero(), lean.list_level())))

assert_equals(c_foo.const_name(), lean.name("foo"))

assert_equals(str(c_bar.const_levels(), ), "(1 0)")

# Python lists to lean lists

levels = lean.list_level([lean.mk_level_one(), lean.mk_level_zero()])
Example #4
0
from nose.tools import assert_equals, assert_not_equals, assert_false, assert_true

import lean
import os

from lang.expr import *
from lang.env import *

MY_PATH_TO_LEAN_STDLIB = os.environ['MY_PATH_TO_LEAN_STDLIB']

lean.initialize()

env = lean.import_modules([MY_PATH_TO_LEAN_STDLIB], [lean.name("init")],
                          100000)

assert_equals(env.get(lean.name("nat")).get_type(), lean.mk_Type())
assert_equals(
    str(env.get(lean.name(lean.name("tactic"), "intro1")).get_type()),
    "tactic.{0} (expr bool.tt)")

decls = []
add_to_list = lambda d: decls.append(d)
env.for_each_declaration(add_to_list)

# build theorem context
env_view = EnvView(env)

# TODO(danehuang): This is expensive -- is it necessary as a test?

# decls = env_view.get_decls()
# d_thm = env_view.thm_dict_of_decls(decls)
from nose.tools import assert_equals, assert_not_equals, assert_false, assert_true
import lean

lk1 = lean.level_kind.Zero
lk2 = lean.level_kind.Succ

assert_not_equals(lk1, lk2)

l0 = lean.mk_level_zero()
l1 = lean.mk_level_one()
l2 = lean.mk_succ(l1)
l3 = lean.mk_param_univ(lean.name("hello"))
l4 = lean.mk_max(l2, l3)

assert_true(l4.is_max())

assert_false(l4.is_imax())

assert_equals(str(l4.max_lhs()), "2")

assert_equals(str(l4.max_rhs()), "hello")

ln1 = lean.list_level()
ln2 = lean.list_level(lean.mk_param_univ(lean.name("head-of-list")), ln1)

assert_equals(str(ln2.head()), "head-of-list")
assert_true(ln2.tail().is_nil())
Example #6
0
  tustate = lean.tactic_user_state()

  tstate = lean.tactic_state(env, options, decl_name, mctx, goals, goal, deq_state, tustate)
  return tstate

def run_tactic(tstate, tactic, args):
  ls = lean.list_name()
  r = lean.run_tactic(tstate, tactic, ls, args)
  if r.is_some(): return r.value()
  else: return None

lean.initialize()

MY_PATH_TO_LEAN_STDLIB = os.environ['MY_PATH_TO_LEAN_STDLIB']

env = lean.import_modules([MY_PATH_TO_LEAN_STDLIB], [lean.name("init")], 100000)

goal_type = lean.mk_arrow(lean.mk_constant(lean.name("true")), lean.mk_constant(lean.name("false")))

tstate = create_tactic_state(env, goal_type)

print_main_goal(tstate)

tac_intro1 = lean.mk_constant(lean.name(lean.name("tactic"), "intro1"))

(_, tstate2) = run_tactic(tstate, tac_intro1, [])

print_main_goal(tstate2)

new_goal = tstate2.goals().head()
tac_infer_type = lean.mk_constant(lean.name(lean.name("tactic"), "infer_type"))