Infix "⊗" := (Zp_mult _) (at level 40, left associativity).
Notation "∸" := (Zp_opp _).
Notation f := (nat2Zp _).
Notation "〚 x 〛" :=  (f x).
Ltac fold_nat2Zp :=
repeat match goal with
| |- context[nat2Zp _ ?x ⊕ nat2Zp _ ?y] => rewrite <- nat2Zp_plus
| |- context[nat2Zp _ ?x ⊗ nat2Zp _ ?y] => rewrite <- nat2Zp_mult
| |- context[∸ nat2Zp _ ?x] => fail
end.

(* Specifications: *)
Lemma expo_necessity : expo_conditions -> p = expo r q.
End expo_diophantine.