public void TestIdempotenceOfIdentityTransducer()
{
Z3Provider Z = new Z3Provider();
var A = (Z.TT.MkRankedAlphabet("A", Z.UnitSort, new string[] { "zero", "one", "two" }, new int[] { 0, 1, 2 }));
var zero = A.MkTree("zero", Z.UnitConst);
Func<Expr, Expr> one = x =>
{
return A.MkTree("one", Z.UnitConst, x);
};
Func<Expr, Expr, Expr> two = (x, y) =>
{
return A.MkTree("two", Z.UnitConst, x, y);
};
var id = A.IdTransducer;
var id_o_id = id.Compose(id);
var t1 = id_o_id[two(two(zero, zero), zero)];
Assert.AreEqual<int>(1, t1.Length);
}