int main(void)
                                        {
                                        unsigned __CPROVER_bitvector[3] __cs_tmp_t0_r0 = (unsigned __CPROVER_bitvector[3])nondet_uint();
                                        unsigned __CPROVER_bitvector[5] __cs_tmp_t1_r0 = (unsigned __CPROVER_bitvector[5])nondet_uint();
                                        unsigned __CPROVER_bitvector[5] __cs_tmp_t2_r0 = (unsigned __CPROVER_bitvector[5])nondet_uint();
                                        unsigned __CPROVER_bitvector[3] __cs_tmp_t0_r1 = (unsigned __CPROVER_bitvector[3])nondet_uint();
/* round  0 */
                                        __CPROVER_assume(__cs_tmp_t0_r0 > 0);
                                        __cs_thread_index = 0;
                                        __cs_pc_cs[0] = __cs_pc[0] + __cs_tmp_t0_r0;
                                        __CPROVER_assume(__cs_pc_cs[0] > 0);
                                        __CPROVER_assume(__cs_pc_cs[0] <= 4);
                                        main_thread();
                                        __cs_pc[0] = __cs_pc_cs[0];
                                        if (__cs_active_thread[1] == 1)
                                        		{
                                        __cs_thread_index = 1;
                                        __cs_pc_cs[1] = __cs_pc[1] + __cs_tmp_t1_r0;
                                        __CPROVER_assume(__cs_pc_cs[1] <= 18);
                                        t1_0(__cs_threadargs[1]);
                                        __cs_pc[1] = __cs_pc_cs[1];
                                        		}
                                        if (__cs_active_thread[2] == 1)
                                        		{
                                        __cs_thread_index = 2;
                                        __cs_pc_cs[2] = __cs_pc[2] + __cs_tmp_t2_r0;
                                        __CPROVER_assume(__cs_pc_cs[2] <= 18);
                                        t2_0(__cs_threadargs[2]);
                                        __cs_pc[2] = __cs_pc_cs[2];
                                        		}
                                        if (__cs_active_thread[0] == 1)
                                        		{
                                        __cs_thread_index = 0;
                                        __cs_pc_cs[0] = __cs_pc[0] + __cs_tmp_t0_r1;
                                        __CPROVER_assume(__cs_pc_cs[0] >= __cs_pc[0]);
                                        __CPROVER_assume(__cs_pc_cs[0] <= 4);
                                        main_thread();
                                        		}
                                        return 0;
                                        }
                                        int main(void)
                                        {
                                        unsigned int __cs_tmp_t0_r0 = __VERIFIER_nondet_uint();
                                        unsigned int __cs_tmp_t1_r0 = __VERIFIER_nondet_uint();
                                        unsigned int __cs_tmp_t2_r0 = __VERIFIER_nondet_uint();
                                        unsigned int __cs_tmp_t0_r1 = __VERIFIER_nondet_uint();
                                        unsigned int __cs_tmp_t1_r1 = __VERIFIER_nondet_uint();
                                        unsigned int __cs_tmp_t2_r1 = __VERIFIER_nondet_uint();
                                        unsigned int __cs_tmp_t0_r2 = __VERIFIER_nondet_uint();
/* round  0 */
                                        __VERIFIER_assume(__cs_tmp_t0_r0 > 0);
                                        __cs_thread_index = 0;
                                        __cs_pc_cs[0] = __cs_pc[0] + __cs_tmp_t0_r0;
                                        __VERIFIER_assume(__cs_pc_cs[0] > 0);
                                        __VERIFIER_assume(__cs_pc_cs[0] <= 3);
                                        main_thread();
                                        __cs_pc[0] = __cs_pc_cs[0];
                                        if (__cs_active_thread[1] == 1)
                                        		{
                                        __cs_thread_index = 1;
                                        __cs_pc_cs[1] = __cs_pc[1] + __cs_tmp_t1_r0;
                                        __VERIFIER_assume(__cs_pc_cs[1] <= 13);
                                        t1_0(__cs_threadargs[1]);
                                        __cs_pc[1] = __cs_pc_cs[1];
                                        		}
                                        if (__cs_active_thread[2] == 1)
                                        		{
                                        __cs_thread_index = 2;
                                        __cs_pc_cs[2] = __cs_pc[2] + __cs_tmp_t2_r0;
                                        __VERIFIER_assume(__cs_pc_cs[2] <= 13);
                                        t2_0(__cs_threadargs[2]);
                                        __cs_pc[2] = __cs_pc_cs[2];
                                        		}
/* round  1 */
                                        if (__cs_active_thread[0] == 1)
                                        		{
                                        				__cs_thread_index = 0;
                                        __cs_pc_cs[0] = __cs_pc[0] + __cs_tmp_t0_r1;
                                        __VERIFIER_assume(__cs_pc_cs[0] >= __cs_pc[0]);
                                        __VERIFIER_assume(__cs_pc_cs[0] <= 3);
                                        main_thread();
                                        __cs_pc[0] = __cs_pc_cs[0];
                                        		}
                                        if (__cs_active_thread[1] == 1)
                                        		{
                                        __cs_thread_index = 1;
                                        __cs_pc_cs[1] = __cs_pc[1] + __cs_tmp_t1_r1;
                                        __VERIFIER_assume(__cs_pc_cs[1] >= __cs_pc[1]);
                                        __VERIFIER_assume(__cs_pc_cs[1] <= 13);
                                        t1_0(__cs_threadargs[__cs_thread_index]);
                                        __cs_pc[1] = __cs_pc_cs[1];
                                        		}
                                        if (__cs_active_thread[2] == 1)
                                        		{
                                        __cs_thread_index = 2;
                                        __cs_pc_cs[2] = __cs_pc[2] + __cs_tmp_t2_r1;
                                        __VERIFIER_assume(__cs_pc_cs[2] >= __cs_pc[2]);
                                        __VERIFIER_assume(__cs_pc_cs[2] <= 13);
                                        t2_0(__cs_threadargs[__cs_thread_index]);
                                        __cs_pc[2] = __cs_pc_cs[2];
                                        		}
                                        if (__cs_active_thread[0] == 1)
                                        		{
                                        __cs_thread_index = 0;
                                        __cs_pc_cs[0] = __cs_pc[0] + __cs_tmp_t0_r2;
                                        __VERIFIER_assume(__cs_pc_cs[0] >= __cs_pc[0]);
                                        __VERIFIER_assume(__cs_pc_cs[0] <= 3);
                                        main_thread();
                                        		}
                                        /* reachable */
                                        return 0;
                                        }
int main(void)
{
        unsigned int __cs_tmp_t0_r0 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t1_r0 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t2_r0 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t0_r1 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t1_r1 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t2_r1 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t0_r2 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t1_r2 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t2_r2 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t0_r3 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t1_r3 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t2_r3 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t0_r4 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t1_r4 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t2_r4 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t0_r5 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t1_r5 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t2_r5 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t0_r6 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t1_r6 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t2_r6 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t0_r7 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t1_r7 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t2_r7 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t0_r8 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t1_r8 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t2_r8 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t0_r9 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t1_r9 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t2_r9 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t0_r10 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t1_r10 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t2_r10 = __VERIFIER_nondet_uint();
        unsigned int __cs_tmp_t0_r11 = __VERIFIER_nondet_uint();
/* round  0 */
        __VERIFIER_assume(__cs_tmp_t0_r0 > 0);
        __cs_thread_index = 0;
        __cs_pc_cs[0] = __cs_pc[0] + __cs_tmp_t0_r0;
        __VERIFIER_assume(__cs_pc_cs[0] > 0);
        __VERIFIER_assume(__cs_pc_cs[0] <= 3);
        main_thread();
        __cs_pc[0] = __cs_pc_cs[0];
        if (__cs_active_thread[1] == 1)
        {
                __cs_thread_index = 1;
                __cs_pc_cs[1] = __cs_pc[1] + __cs_tmp_t1_r0;
                __VERIFIER_assume(__cs_pc_cs[1] <= 13);
                t1_0(__cs_threadargs[1]);
                __cs_pc[1] = __cs_pc_cs[1];
        }
        if (__cs_active_thread[2] == 1)
        {
                __cs_thread_index = 2;
                __cs_pc_cs[2] = __cs_pc[2] + __cs_tmp_t2_r0;
                __VERIFIER_assume(__cs_pc_cs[2] <= 13);
                t2_0(__cs_threadargs[2]);
                __cs_pc[2] = __cs_pc_cs[2];
        }
/* round  1 */
        if (__cs_active_thread[0] == 1)
        {
            __cs_thread_index = 0;
            __cs_pc_cs[0] = __cs_pc[0] + __cs_tmp_t0_r1;
            __VERIFIER_assume(__cs_pc_cs[0] >= __cs_pc[0]);
            __VERIFIER_assume(__cs_pc_cs[0] <= 3);
            main_thread();
            __cs_pc[0] = __cs_pc_cs[0];
    }
    if (__cs_active_thread[1] == 1)
    {
        __cs_thread_index = 1;
        __cs_pc_cs[1] = __cs_pc[1] + __cs_tmp_t1_r1;
        __VERIFIER_assume(__cs_pc_cs[1] >= __cs_pc[1]);
        __VERIFIER_assume(__cs_pc_cs[1] <= 13);
        t1_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[1] = __cs_pc_cs[1];
}
if (__cs_active_thread[2] == 1)
{
        __cs_thread_index = 2;
        __cs_pc_cs[2] = __cs_pc[2] + __cs_tmp_t2_r1;
        __VERIFIER_assume(__cs_pc_cs[2] >= __cs_pc[2]);
        __VERIFIER_assume(__cs_pc_cs[2] <= 13);
        t2_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[2] = __cs_pc_cs[2];
}
/* round  2 */
if (__cs_active_thread[0] == 1)
{
    __cs_thread_index = 0;
    __cs_pc_cs[0] = __cs_pc[0] + __cs_tmp_t0_r2;
    __VERIFIER_assume(__cs_pc_cs[0] >= __cs_pc[0]);
    __VERIFIER_assume(__cs_pc_cs[0] <= 3);
    main_thread();
    __cs_pc[0] = __cs_pc_cs[0];
}
if (__cs_active_thread[1] == 1)
{
        __cs_thread_index = 1;
        __cs_pc_cs[1] = __cs_pc[1] + __cs_tmp_t1_r2;
        __VERIFIER_assume(__cs_pc_cs[1] >= __cs_pc[1]);
        __VERIFIER_assume(__cs_pc_cs[1] <= 13);
        t1_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[1] = __cs_pc_cs[1];
}
if (__cs_active_thread[2] == 1)
{
        __cs_thread_index = 2;
        __cs_pc_cs[2] = __cs_pc[2] + __cs_tmp_t2_r2;
        __VERIFIER_assume(__cs_pc_cs[2] >= __cs_pc[2]);
        __VERIFIER_assume(__cs_pc_cs[2] <= 13);
        t2_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[2] = __cs_pc_cs[2];
}
/* round  3 */
if (__cs_active_thread[0] == 1)
{
    __cs_thread_index = 0;
    __cs_pc_cs[0] = __cs_pc[0] + __cs_tmp_t0_r3;
    __VERIFIER_assume(__cs_pc_cs[0] >= __cs_pc[0]);
    __VERIFIER_assume(__cs_pc_cs[0] <= 3);
    main_thread();
    __cs_pc[0] = __cs_pc_cs[0];
}
if (__cs_active_thread[1] == 1)
{
        __cs_thread_index = 1;
        __cs_pc_cs[1] = __cs_pc[1] + __cs_tmp_t1_r3;
        __VERIFIER_assume(__cs_pc_cs[1] >= __cs_pc[1]);
        __VERIFIER_assume(__cs_pc_cs[1] <= 13);
        t1_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[1] = __cs_pc_cs[1];
}
if (__cs_active_thread[2] == 1)
{
        __cs_thread_index = 2;
        __cs_pc_cs[2] = __cs_pc[2] + __cs_tmp_t2_r3;
        __VERIFIER_assume(__cs_pc_cs[2] >= __cs_pc[2]);
        __VERIFIER_assume(__cs_pc_cs[2] <= 13);
        t2_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[2] = __cs_pc_cs[2];
}
/* round  4 */
if (__cs_active_thread[0] == 1)
{
    __cs_thread_index = 0;
    __cs_pc_cs[0] = __cs_pc[0] + __cs_tmp_t0_r4;
    __VERIFIER_assume(__cs_pc_cs[0] >= __cs_pc[0]);
    __VERIFIER_assume(__cs_pc_cs[0] <= 3);
    main_thread();
    __cs_pc[0] = __cs_pc_cs[0];
}
if (__cs_active_thread[1] == 1)
{
        __cs_thread_index = 1;
        __cs_pc_cs[1] = __cs_pc[1] + __cs_tmp_t1_r4;
        __VERIFIER_assume(__cs_pc_cs[1] >= __cs_pc[1]);
        __VERIFIER_assume(__cs_pc_cs[1] <= 13);
        t1_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[1] = __cs_pc_cs[1];
}
if (__cs_active_thread[2] == 1)
{
        __cs_thread_index = 2;
        __cs_pc_cs[2] = __cs_pc[2] + __cs_tmp_t2_r4;
        __VERIFIER_assume(__cs_pc_cs[2] >= __cs_pc[2]);
        __VERIFIER_assume(__cs_pc_cs[2] <= 13);
        t2_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[2] = __cs_pc_cs[2];
}
/* round  5 */
if (__cs_active_thread[0] == 1)
{
    __cs_thread_index = 0;
    __cs_pc_cs[0] = __cs_pc[0] + __cs_tmp_t0_r5;
    __VERIFIER_assume(__cs_pc_cs[0] >= __cs_pc[0]);
    __VERIFIER_assume(__cs_pc_cs[0] <= 3);
    main_thread();
    __cs_pc[0] = __cs_pc_cs[0];
}
if (__cs_active_thread[1] == 1)
{
        __cs_thread_index = 1;
        __cs_pc_cs[1] = __cs_pc[1] + __cs_tmp_t1_r5;
        __VERIFIER_assume(__cs_pc_cs[1] >= __cs_pc[1]);
        __VERIFIER_assume(__cs_pc_cs[1] <= 13);
        t1_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[1] = __cs_pc_cs[1];
}
if (__cs_active_thread[2] == 1)
{
        __cs_thread_index = 2;
        __cs_pc_cs[2] = __cs_pc[2] + __cs_tmp_t2_r5;
        __VERIFIER_assume(__cs_pc_cs[2] >= __cs_pc[2]);
        __VERIFIER_assume(__cs_pc_cs[2] <= 13);
        t2_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[2] = __cs_pc_cs[2];
}
/* round  6 */
if (__cs_active_thread[0] == 1)
{
    __cs_thread_index = 0;
    __cs_pc_cs[0] = __cs_pc[0] + __cs_tmp_t0_r6;
    __VERIFIER_assume(__cs_pc_cs[0] >= __cs_pc[0]);
    __VERIFIER_assume(__cs_pc_cs[0] <= 3);
    main_thread();
    __cs_pc[0] = __cs_pc_cs[0];
}
if (__cs_active_thread[1] == 1)
{
        __cs_thread_index = 1;
        __cs_pc_cs[1] = __cs_pc[1] + __cs_tmp_t1_r6;
        __VERIFIER_assume(__cs_pc_cs[1] >= __cs_pc[1]);
        __VERIFIER_assume(__cs_pc_cs[1] <= 13);
        t1_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[1] = __cs_pc_cs[1];
}
if (__cs_active_thread[2] == 1)
{
        __cs_thread_index = 2;
        __cs_pc_cs[2] = __cs_pc[2] + __cs_tmp_t2_r6;
        __VERIFIER_assume(__cs_pc_cs[2] >= __cs_pc[2]);
        __VERIFIER_assume(__cs_pc_cs[2] <= 13);
        t2_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[2] = __cs_pc_cs[2];
}
/* round  7 */
if (__cs_active_thread[0] == 1)
{
    __cs_thread_index = 0;
    __cs_pc_cs[0] = __cs_pc[0] + __cs_tmp_t0_r7;
    __VERIFIER_assume(__cs_pc_cs[0] >= __cs_pc[0]);
    __VERIFIER_assume(__cs_pc_cs[0] <= 3);
    main_thread();
    __cs_pc[0] = __cs_pc_cs[0];
}
if (__cs_active_thread[1] == 1)
{
        __cs_thread_index = 1;
        __cs_pc_cs[1] = __cs_pc[1] + __cs_tmp_t1_r7;
        __VERIFIER_assume(__cs_pc_cs[1] >= __cs_pc[1]);
        __VERIFIER_assume(__cs_pc_cs[1] <= 13);
        t1_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[1] = __cs_pc_cs[1];
}
if (__cs_active_thread[2] == 1)
{
        __cs_thread_index = 2;
        __cs_pc_cs[2] = __cs_pc[2] + __cs_tmp_t2_r7;
        __VERIFIER_assume(__cs_pc_cs[2] >= __cs_pc[2]);
        __VERIFIER_assume(__cs_pc_cs[2] <= 13);
        t2_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[2] = __cs_pc_cs[2];
}
/* round  8 */
if (__cs_active_thread[0] == 1)
{
    __cs_thread_index = 0;
    __cs_pc_cs[0] = __cs_pc[0] + __cs_tmp_t0_r8;
    __VERIFIER_assume(__cs_pc_cs[0] >= __cs_pc[0]);
    __VERIFIER_assume(__cs_pc_cs[0] <= 3);
    main_thread();
    __cs_pc[0] = __cs_pc_cs[0];
}
if (__cs_active_thread[1] == 1)
{
        __cs_thread_index = 1;
        __cs_pc_cs[1] = __cs_pc[1] + __cs_tmp_t1_r8;
        __VERIFIER_assume(__cs_pc_cs[1] >= __cs_pc[1]);
        __VERIFIER_assume(__cs_pc_cs[1] <= 13);
        t1_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[1] = __cs_pc_cs[1];
}
if (__cs_active_thread[2] == 1)
{
        __cs_thread_index = 2;
        __cs_pc_cs[2] = __cs_pc[2] + __cs_tmp_t2_r8;
        __VERIFIER_assume(__cs_pc_cs[2] >= __cs_pc[2]);
        __VERIFIER_assume(__cs_pc_cs[2] <= 13);
        t2_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[2] = __cs_pc_cs[2];
}
/* round  9 */
if (__cs_active_thread[0] == 1)
{
    __cs_thread_index = 0;
    __cs_pc_cs[0] = __cs_pc[0] + __cs_tmp_t0_r9;
    __VERIFIER_assume(__cs_pc_cs[0] >= __cs_pc[0]);
    __VERIFIER_assume(__cs_pc_cs[0] <= 3);
    main_thread();
    __cs_pc[0] = __cs_pc_cs[0];
}
if (__cs_active_thread[1] == 1)
{
        __cs_thread_index = 1;
        __cs_pc_cs[1] = __cs_pc[1] + __cs_tmp_t1_r9;
        __VERIFIER_assume(__cs_pc_cs[1] >= __cs_pc[1]);
        __VERIFIER_assume(__cs_pc_cs[1] <= 13);
        t1_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[1] = __cs_pc_cs[1];
}
if (__cs_active_thread[2] == 1)
{
        __cs_thread_index = 2;
        __cs_pc_cs[2] = __cs_pc[2] + __cs_tmp_t2_r9;
        __VERIFIER_assume(__cs_pc_cs[2] >= __cs_pc[2]);
        __VERIFIER_assume(__cs_pc_cs[2] <= 13);
        t2_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[2] = __cs_pc_cs[2];
}
/* round  10 */
if (__cs_active_thread[0] == 1)
{
    __cs_thread_index = 0;
    __cs_pc_cs[0] = __cs_pc[0] + __cs_tmp_t0_r10;
    __VERIFIER_assume(__cs_pc_cs[0] >= __cs_pc[0]);
    __VERIFIER_assume(__cs_pc_cs[0] <= 3);
    main_thread();
    __cs_pc[0] = __cs_pc_cs[0];
}
if (__cs_active_thread[1] == 1)
{
        __cs_thread_index = 1;
        __cs_pc_cs[1] = __cs_pc[1] + __cs_tmp_t1_r10;
        __VERIFIER_assume(__cs_pc_cs[1] >= __cs_pc[1]);
        __VERIFIER_assume(__cs_pc_cs[1] <= 13);
        t1_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[1] = __cs_pc_cs[1];
}
if (__cs_active_thread[2] == 1)
{
        __cs_thread_index = 2;
        __cs_pc_cs[2] = __cs_pc[2] + __cs_tmp_t2_r10;
        __VERIFIER_assume(__cs_pc_cs[2] >= __cs_pc[2]);
        __VERIFIER_assume(__cs_pc_cs[2] <= 13);
        t2_0(__cs_threadargs[__cs_thread_index]);
        __cs_pc[2] = __cs_pc_cs[2];
}
if (__cs_active_thread[0] == 1)
{
        __cs_thread_index = 0;
        __cs_pc_cs[0] = __cs_pc[0] + __cs_tmp_t0_r11;
        __VERIFIER_assume(__cs_pc_cs[0] >= __cs_pc[0]);
        __VERIFIER_assume(__cs_pc_cs[0] <= 3);
        main_thread();
}
return 0;
}
void test_induced_inner_product ()
{
    std::cout << "induced inner product\n";

    typedef BasedVectorSpace_c<VectorSpace_c<RealField,3,IdX>,OrthonormalBasis_c<IdX>> B;
    typedef TensorPowerOfBasedVectorSpace_f<2,B>::T T2;
    typedef TensorPowerOfBasedVectorSpace_f<3,B>::T T3;
    typedef DualOf_f<TensorPowerOfBasedVectorSpace_f<2,B>::T>::T T2_star;
    typedef DualOf_f<TensorPowerOfBasedVectorSpace_f<3,B>::T>::T T3_star;
    typedef SymmetricPowerOfBasedVectorSpace_c<2,DualOf_f<B>::T> S2_B_star;
    typedef SymmetricPowerOfBasedVectorSpace_c<2,T2> S2_T2;
    typedef SymmetricPowerOfBasedVectorSpace_c<2,T3> S2_T3;
    typedef SymmetricPowerOfBasedVectorSpace_c<2,DualOf_f<T2>::T> S2_T2_star;
    typedef SymmetricPowerOfBasedVectorSpace_c<2,DualOf_f<T3>::T> S2_T3_star;

    typedef float Scalar;
    typedef ImplementationOf_t<B,Scalar> V;
    typedef ImplementationOf_t<S2_B_star,Scalar> S2;
    S2 g(tuple(2.0f, 3.0f, 5.0f, 7.0f, 11.0f, 13.0f));
    V u(tuple(10.0f, 11.0f, 12.0f));
    V v(tuple(6.0f, 7.0f, 8.0f));
    Sym_f<2,B,Scalar>::T sym;

    AbstractIndex_c<'a'> a;
    AbstractIndex_c<'b'> b;
    AbstractIndex_c<'c'> c;
    AbstractIndex_c<'i'> i;
    AbstractIndex_c<'j'> j;
    AbstractIndex_c<'k'> k;
    AbstractIndex_c<'p'> p;
    AbstractIndex_c<'q'> q;
    AbstractIndex_c<'r'> r;
    AbstractIndex_c<'x'> x;
    AbstractIndex_c<'y'> y;
    AbstractIndex_c<'z'> z;

    std::cout << FORMAT_VALUE(g) << '\n';
    std::cout << FORMAT_VALUE(g(i).split(i,j*k)) << '\n';
    std::cout << FORMAT_VALUE(u) << '\n';
    std::cout << FORMAT_VALUE(v) << '\n';
    std::cout << FORMAT_VALUE(g(i).split(i,j*k) * u(j) * v(k)) << '\n';
    // this would become a .project(p,SymmetricPower2(),i)
    std::cout << FORMAT_VALUE(g(i) * sym(i*p) * (u(j) * v(k)).bundle(j*k,T2(),p)) << '\n';

    {
        ImplementationOf_t<S2_T2_star,Scalar> g_T2(Static<WithoutInitialization>::SINGLETON);
        g_T2(r) = (g(i).split(i,j*k) *
                   g(a).split(a,b*c)).bundle(j*b,T2_star(),p)
                                     .bundle(k*c,T2_star(),q)
                                     .bundle(p*q,S2_T2_star(),r);
        std::cout << FORMAT_VALUE(g_T2) << '\n';
        std::cout << FORMAT_VALUE(g_T2(i).split(i,j*k)) << '\n';

        typedef ImplementationOf_t<T2,Scalar> T2_impl;
        T2_impl t2_0(Static<WithoutInitialization>::SINGLETON);
        T2_impl t2_1(Static<WithoutInitialization>::SINGLETON);
        for (T2_impl::ComponentIndex idx; idx.is_not_at_end(); ++idx)
        {
            t2_0[idx] = idx.value();
            t2_1[idx] = idx.value() + 7;
        }
        std::cout << FORMAT_VALUE(g_T2(p).split(p,i*j) * t2_0(i) * t2_1(j)) << '\n';
        std::cout << FORMAT_VALUE(t2_0(b*j) * g(a).split(a,b*c)*g(i).split(i,j*k) * t2_1(c*k)) << '\n';
        Sym_f<2,T2,Scalar>::T sym;
        std::cout << FORMAT_VALUE(g_T2(p) * sym(p*q) * (t2_0(i)*t2_1(j)).bundle(i*j,TensorPowerOfBasedVectorSpace_f<2,T2>::T(),q)) << '\n';
        std::cout << FORMAT_VALUE(g_T2(p) * sym(p*q).split(q,i*j) * (t2_0(i)*t2_1(j))) << '\n';
    }

    {
        ImplementationOf_t<S2_T3_star,Scalar> g_T3(Static<WithoutInitialization>::SINGLETON);
        g_T3(r) = (g(i).split(i,j*k) *
                   g(a).split(a,b*c) *
                   g(x).split(x,y*z)).bundle(j*b*y,T3_star(),p)
                                     .bundle(k*c*z,T3_star(),q)
                                     .bundle(p*q,S2_T3_star(),r);
        std::cout << FORMAT_VALUE(g_T3) << '\n';
        std::cout << FORMAT_VALUE(g_T3(i).split(i,j*k)) << '\n';

        typedef ImplementationOf_t<T3,Scalar> T3_impl;
        T3_impl t3_0(Static<WithoutInitialization>::SINGLETON);
        T3_impl t3_1(Static<WithoutInitialization>::SINGLETON);
        for (T3_impl::ComponentIndex idx; idx.is_not_at_end(); ++idx)
        {
            t3_0[idx] = idx.value();
            t3_1[idx] = idx.value() + 7;
        }
        std::cout << FORMAT_VALUE(t3_0(i) * g_T3(p).split(p,i*j) * t3_1(j)) << '\n';
        std::cout << FORMAT_VALUE(t3_0(b*j*y) * g(a).split(a,b*c)*g(i).split(i,j*k)*g(x).split(x,y*z) * t3_1(c*k*z)) << '\n';
        Sym_f<2,T3,Scalar>::T sym;
        std::cout << FORMAT_VALUE(g_T3(p) * sym(p*q) * (t3_0(i)*t3_1(j)).bundle(i*j,TensorPowerOfBasedVectorSpace_f<2,T3>::T(),q)) << '\n';
        std::cout << FORMAT_VALUE(g_T3(p) * sym(p*q).split(q,i*j) * (t3_0(i)*t3_1(j))) << '\n';
    }
}