1 | initial version |

`h.lift(I)`

should do the job. See documentation for details.

2 | No.2 Revision |

`h.lift(I)`

should do the job. See documentation for details.

Since `lift`

is not implemented for BooleanPolynomialRing, we can workaround by considering the ideal generated by $f,g$ and $x_i^2+x_i$ in $GF(2)[x_1,\dots,x_n]$. Here is a sample code:

```
B.<x,y> = BooleanPolynomialRing()
I = ideal(x+1,y+1)
pol = x+y
#print( pol.lift(I) ) # this is not implemented
#workaround:
nvars = len(B.gens())
F = PolynomialRing(GF(2),nvars,'z')
I2 = [F(g) for g in I.gens()] + [g^2+g for g in F.gens()]
print( F(pol).lift(I2)[:len(I.gens())] )
```

3 | No.3 Revision |

`h.lift(I)`

should do the job. See documentation for details.

Since `lift`

is not implemented for BooleanPolynomialRing, we can workaround by considering the ideal generated by $f,g$ and $x_i^2+x_i$ in $GF(2)[x_1,\dots,x_n]$. Here is a sample code:

```
B.<x,y> = BooleanPolynomialRing()
I = ideal(x+1,y+1)
pol = x+y
#print( pol.lift(I) ) # this is not implemented
#workaround:
nvars = len(B.gens())
F = PolynomialRing(GF(2),nvars,'z')
I2 = ideal( [F(g) for g in I.gens()] + [g^2+g for g in
```~~F.gens()]
~~F.gens()] )
print( F(pol).lift(I2)[:len(I.gens())] )

4 | No.4 Revision |

`h.lift(I)`

should do the job. See documentation for details.

Since `lift`

is not implemented for BooleanPolynomialRing, we can workaround by considering the ideal generated by $f,g$ and $x_i^2+x_i$ in $GF(2)[x_1,\dots,x_n]$. Here is a sample code:

```
B.<x,y> = BooleanPolynomialRing()
I = ideal(x+1,y+1)
pol = x+y
#print( pol.lift(I) ) # this is not implemented
#workaround:
nvars = len(B.gens())
F = PolynomialRing(GF(2),nvars,'z')
I2 = ideal( [F(g) for g in I.gens()] + [g^2+g for g in F.gens()] )
coefs = [c.substitute(dict(zip(F.gens(),B.gens()))) for c in F(pol).lift(I2)[:len(I.gens())]]
print(
```~~F(pol).lift(I2)[:len(I.gens())] ~~coefs )

5 | No.5 Revision |

`h.lift(I)`

should do the job. See documentation for details.

`lift`

is not implemented for BooleanPolynomialRing, we can workaround by considering the ideal generated by $f,g$ and $x_i^2+x_i$ in $GF(2)[x_1,\dots,x_n]$. Here is a sample code:

```
B.<x,y> = BooleanPolynomialRing()
I = ideal(x+1,y+1)
pol =
```~~x+y
~~x*y + 1
#print( pol.lift(I) ) # this is not implemented
#workaround:
nvars = len(B.gens())
F = PolynomialRing(GF(2),nvars,'z')
I2 = ideal( [F(g) for g in I.gens()] + [g^2+g for g in F.gens()] )
coefs = [c.substitute(dict(zip(F.gens(),B.gens()))) for c in F(pol).lift(I2)[:len(I.gens())]]
print( coefs )

6 | No.6 Revision |

`h.lift(I)`

should do the job. See documentation for details.

`lift`

is not implemented for BooleanPolynomialRing, we can workaround by considering the ideal generated by $f,g$ and $x_i^2+x_i$ in $GF(2)[x_1,\dots,x_n]$. Here is a sample code:

```
B.<x,y> = BooleanPolynomialRing()
I = ideal(x+1,y+1)
pol = x*y + 1
#print( pol.lift(I) ) # this is not implemented
#workaround:
```~~nvars = len(B.gens())
~~F = ~~PolynomialRing(GF(2),nvars,'z')
~~GF(2)[B.gens()]
I2 = ideal( [F(g) for g in I.gens()] + [g^2+g for g in F.gens()] )
coefs = ~~[c.substitute(dict(zip(F.gens(),B.gens()))) ~~[B(c) for c in ~~F(pol).lift(I2)[:len(I.gens())]]
~~F(pol).lift(I2)[:len(I.gens())]]
print( coefs )

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.