Opened 3 years ago

Closed 3 years ago

# Error in precision of Tate elliptic curves over Qp

Reported by: Owned by: wuthrich major sage-9.0 elliptic curves Tate curve Chris Wuthrich Edgar Costa N/A 9c537fb 9c537fbbeb0f6106cc637d5aa6e1cfff9437dd4f

### Description

The optional precision arguments for Tate's elliptic curves are incorrectly implemented. For many functions, increasing the precision does not increase the precision of the output.

### comment:1 Changed 3 years ago by wuthrich

Branch: → u/wuthrich/tate_curve_prec_28645 → ff01d1ca4707b459247a9dd840d808d6b8c42b05

New commits:

 ​ff01d1c `precision for tate curves`

### comment:2 Changed 3 years ago by wuthrich

Status: new → needs_review

Here an example of what was wrong

```sage: E = EllipticCurve("126a5")
sage: Eq = E.tate_curve(2)
sage: R = Qp(2,30)
sage: u = R(2019)
sage: Eq.parametrisation_onto_original_curve(u, prec=30)
(2^-2 + 2^-1 + 1 + 2 + 2^3 + 2^7 + 2^8 + 2^15 + O(2^18) : 2^-3 + 2^-2 + 2^-1 + 2 + 2^2 + 2^5 + 2^6 + 2^7 + 2^9 + 2^11 + 2^14 + 2^15 + O(2^16) : 1 + O(2^30))
```

The precision drops to 20. Now fixed returns:

```(2^-2 + 2^-1 + 1 + 2 + 2^3 + 2^7 + 2^8 + 2^15 + 2^18 + 2^19 + 2^20 + 2^21 + 2^26 + O(2^28) : 2^-3 + 2^-2 + 2^-1 + 2 + 2^2 + 2^5 + 2^6 + 2^7 + 2^9 + 2^11 + 2^14 + 2^15 + 2^19 + 2^20 + 2^23 + 2^24 + 2^25 + O(2^26) : 1 + O(2^30))
```

### comment:3 Changed 3 years ago by Edgar Costa

Status: needs_review → needs_work

FYI, `src/sage/schemes/elliptic_curves/ell_tate_curve.py:233: local variable 'n' is assigned to but never used`

### comment:4 Changed 3 years ago by git

Commit: ff01d1ca4707b459247a9dd840d808d6b8c42b05 → 9c537fbbeb0f6106cc637d5aa6e1cfff9437dd4f

Branch pushed to git repo; I updated commit sha1. New commits:

 ​9c537fb `del one useless var`

### comment:5 Changed 3 years ago by wuthrich

Status: needs_work → needs_review

Deleted that line.

Last edited 3 years ago by wuthrich (previous) (diff)

### comment:6 Changed 3 years ago by Edgar Costa

I'm sorry, but can't fully test this at the moment, so I can't give you examples, but I spotted a couple of issues (not introduced by you), but propagate through the rest:

1- One is always hitting an `AttributeError` in the `try` block in `def parameter`, as it should be calling `precision_absolute`. Also, the `try` block is a bit sad, as it should be just triggered by `__init__`. Perhaps a `getattr(self, '_q', None)` would make more sense.

2- Shouldn't we be checking for `precision_relative`? Given that we are always working with relative precision.

3- Shouldn't parameter return a value with the right precision? If not, we might need to work more and get results with more precision than expected.

4- Similar to the previous item, we should consider replacing `R = qE.parent()` by `R = Qp(self._p, prec=prec)` in `def curve`.

### comment:7 Changed 3 years ago by wuthrich

You may be right that there are more things that should be improved in that file. The purpose of this ticket is to correct a bug: I can increase the precision of the output by increasing the parameter prec. That was broken.

My proposal is that this is done on this ticket. Then we can open a further ticket to improve things.

In particular, I can get rid of try blocks (this is early sage when there were try blocks everywhere). We could also think about getting provable correct precisions out. Honestly, I have little interest in doing so, but I would be willing to go through the file and make the necessary changes. But I doubt that anyone uses the output in that way. We should at least, give a warning that it is not provable relative/absolute precision.

If we want to do everything on this ticket, it is likely to drag for months and may get abandoned when this simple quick fix would have improved sage.

### comment:8 Changed 3 years ago by Edgar Costa

I agree with you, you should not fix this now.

Regarding the original bug, is this an expected output, or should one raise an exception?

```sage: E = EllipticCurve("126a5")
sage: Eq = E.tate_curve(2)
sage: R = Qp(2,30)
sage: u = R(2019)
sage: Eq.parametrisation_onto_original_curve(u, prec=60)
(2^-2 + 2^-1 + 1 + 2 + 2^3 + 2^7 + 2^8 + 2^15 + 2^18 + 2^19 + 2^20 + 2^21 + 2^26 + O(2^28) : 2^-3 + 2^-2 + 2^-1 + 2 + 2^2 + 2^5 + 2^6 + 2^7 + 2^9 + 2^11 + 2^14 + 2^15 + 2^19 + 2^20 + 2^23 + 2^24 + 2^25 + O(2^26) : 1 + O(2^60))
```

### comment:9 Changed 3 years ago by Edgar Costa

Status: needs_review → positive_review

Ignore my comment, I will just move that to a new ticket

### comment:10 Changed 3 years ago by Volker Braun

Status: positive_review → needs_work

Reviewer name is missing...

### comment:11 Changed 3 years ago by Edgar Costa

Reviewers: → Edgar Costa needs_work → positive_review

### comment:12 Changed 3 years ago by Volker Braun

Branch: u/wuthrich/tate_curve_prec_28645 → 9c537fbbeb0f6106cc637d5aa6e1cfff9437dd4f → fixed positive_review → closed
Note: See TracTickets for help on using tickets.