fact: Definition pdouble := fun p1: pelt => let (x1, y1, z1, H1) := p1 in if (is_zero z1) then p1 else let m' := 3 * x1 * x1 + A * z1 * z1 in let l' := 2 * y1 * z1 in let m'2 := m' * m' in let l'2 := l' * l' in let l'3 := l'2 * l' in let x3 := m'2 * z1 - 2 * x1 * l'2 in @mk_pelt (l' * x3) (l'2 * (m' * x1 - y1 * l') - m' * x3) (z1 * l'3) (add_lem_tan H1).
imports: Arith_base Field_tac Ring Eqdep_dec FGroup List UList ZArith