import("util.lua")
local env  = environment()
local ios  = io_state()
local Bool = Const("Bool")
env:add_var("p", Bool)
env:add_var("q", Bool)
local p, q = Consts("p, q")
local ctx  = context()

S = State()
-- Create tactic t1 in a different Lua State.
-- So, t1 can be executed by a different execution
-- thread
local t1 = S:eval([[
     counter1 = 0
     return tactic(function(env, ios, s)
                     while true do
                        print("tactic 1")
                        counter1 = counter1 + 1
                        sleep(10)
                     end
                  end)
]])

counter2 = 0
local t2 = tactic(function(env, ios, s)
                     while true do
                        print("tactic 2")
                        counter2 = counter2 + 1
                        sleep(10)
                     end
                  end)

local T = (t1:par(t2)):try_for(500)
T:solve(env, ios, ctx, p)
assert(counter2 > 2)
S:eval([[ assert(counter1 > 2) ]])