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])
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()])
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())
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"))