func New(trans *logic.S, bads ...z.Lit) *T {
	res := &T{trans: trans}
	ws := make([]z.Lit, len(bads))
	for i, b := range bads {
		ws[i] = b
	}
	res.watches = ws
	res.traces = make([]*reach.Trace, len(ws))
	res.depths = make([]int64, len(ws))
	for i := range res.depths {
		res.depths[i] = -1
	}
	res.vsA = make([]uint64, trans.Len())
	res.vsB = make([]uint64, trans.Len())
	res.watchCounts = make([][64]int, len(ws))
	for i := 2; i < trans.Len(); i++ {
		m := z.Var(i).Pos()
		if trans.Type(m) == logic.SInput {
			res.inputs = append(res.inputs, m)
		}
	}
	res.opts = NewOptions()
	res.SetOptions(res.opts)
	return res
}
New creates a new simulator.
package sim
import (
	"fmt"
	"math/rand"
	"time"
	"github.com/go-air/reach"
	"github.com/go-air/gini/logic"
	"github.com/go-air/gini/z"
)
type T struct {
	trans       *logic.S
	inputs      []z.Lit
	watches     []z.Lit
	traces      []*reach.Trace
	depths      []int64
	vsA, vsB    []uint64
	rnd         *rand.Rand
	deadLine    time.Time
	watchCounts [][64]int
	window      [][]uint64
	wi          int
	steps       int64
	luby        *luby
	opts *Options
}