import("util.lua") local ps = proof_state() local env = environment() local Bool = Const("Bool") env:add_var("p", Bool) env:add_var("q", Bool) local p, q = Consts("p, q") local ctx = context() ctx = ctx:extend("H1", p) ctx = ctx:extend("H2", q) ps = to_proof_state(env, ctx, p) local ios = io_state() print(ps) local ltac = tactic(function(env, ios, s) print("FIRST tactic in Lua, current state: " .. tostring(s)); return s end) local t = (trace_tac("hello") .. trace_tac("world")) + (trace_tac("again") .. ltac .. assumption_tac()) for s in t(env, ios, ps) do if s:is_proof_final_state() then local m = proof_map() local a = assignment(s:get_menv()) print(s:proof_builder()(m, a)) else print(s) end end print("-------------------") print(t:solve(env, ios, ps)) print(t:solve(env, ios, ctx, p)) assert(t:solve(env, ios, ps) == Var(1)) assert(t:solve(env, ios, ctx, q) == Var(0)) local t2 = id_tac() + id_tac() + id_tac() local r = t2:solve(env, ios, ps) assert(#r == 3) for i, out_state in ipairs(r) do print(i, out_state) end