# Tensor product over polynomial rings

I'm writing code for Fully Homomorphic Encryption multiplication routine.
I'm trying to calculate tensor product over polynomial rings.
Let's say I have elements in `R = Z[x]/[x^n+1]`

where coefficients are modulo `q`

.

I want to calculate tensor product of `m1_q = (ct0 + sk * ct1)`

and `m2_q = (ct2 + sk * ct3)`

and scale it down by `(q/2)`

.
Each element `ct0`

, `ct1`

, `ct2`

, `ct3`

, `sk`

, `m1_q`

and `m2_q`

are elements of `Rq`

.

Just for `m1_q`

and `m2_q`

, it is working out well:
`(2/q)*(m1_q tensor_product m2_q)`

.
How can I calculate it in terms of `ct*`

?
I tried writing it as:

```
c0 = (2/q)*(ct0 tensor_product ct2)
c1 = (2/q)*( (ct0 tensor_product ct3) + (ct2 tensor_product ct1) )
c2 = (2/q)*(ct1 tensor_product ct3)
m_out = (2/q)*(m1_q tensor_product m2_q)
```

Then I converted `c0`

, `c1`

, `c2`

and `m_out`

into `Rq`

.

Now I was testing:

```
c0 + c1 * sk + c2 * sk^2 == m_out
```

But these are not matching. Appreciate your help.

Thanks @slelievre for formatting.