1

I am trying to prove a very limited form of Euler's criterion:

Variable F : finFieldType.
Hypothesis HF : (1 != -1 :> F).
Lemma euler (a : F) : a^+(#|F|.-1./2) = -1 -> forall x, x^+2 != a.

I have the bulk of the proof done already, but I am left with odd (#|F|.-1) = 0, that is, #|F|.-1 is even. (I'm not interested in characteristic 2). I can't seem to find useful facts in the math comp library about the cardinality of finFieldTypes. For example, I would expect a lemma saying there exists a p such that prime p and #|F| = p. Am I missing something here?

By the way, I could also have totally missed an already existing proof of Euler's criterion in the math comp library itself.

Garogolun
  • 323
  • 2
  • 11
  • This looks more like a question about math than about ssreflect (more precisely the mathematical components library). From the wikipedia page on finite fields, you should expect the order of the finite field to be `p ^ k`, where `p` is a prime, it is the characteristic that is restricted to be the prime `p`, not the order. – Yves Jun 26 '18 at 06:22

1 Answers1

2

I am not aware of a proof of Euler's criterion, but I found two lemmas, in finfield, that give you the two results that you expected in order to finish your proof (the second one may not be presented as you expected):

First, you have the following lemma which gives you the prime p corresponding to the characteristic of your field F (as long as it is a finFieldType):

Lemma finCharP : {p | prime p & p \in [char F]}.

Then, another lemma gives you the cardinality argument :

Let n := logn p #|R|.
Lemma card_primeChar : #|R| = (p ^ n)%N.

The problem with the second lemma is that your field should be recognized as a PrimeCharType, which roughly corresponds to a ringType with an explicit characteristic. But given the first lemma, you are able to give such a structure to your field (which canonically has a ringType), on the fly. A possible proof could be the following

Lemma odd_card : ~~ odd (#|F|.-1).
Proof.
suff : odd (#|F|) by have /ltnW/prednK {1}<- /= := finRing_gt1 F.
have [p prime_p char_F] := (finCharP F); set F_pC := PrimeCharType p_char.
have H : #|F| = #|F_primeChar| by []; rewrite H card_primeChar -H odd_exp => {H F_pC}.
apply/orP; right; have := HF; apply: contraR=> /(prime_oddPn prime_p) p_eq2.
by move: char_F; rewrite p_eq2=> /oppr_char2 ->.
Qed.
SoB
  • 21
  • 1