Section DecideField.
Variable F : Field.type.
Fixpoint sat e f :=
match f with
| GRing.Bool b => b
| t1 == t2 => (GRing.eval e t1 == GRing.eval e t2)%bool
| GRing.Unit t => GRing.eval e t \is a GRing.unit
| f1 /\ f2 => sat e f1 && sat e f2
| f1 \/ f2 => sat e f1 || sat e f2
| f1 ==> f2 => (sat e f1 ==> sat e f2)%bool
| ~ f1 => ~~ sat e f1
| ('exists 'X_k, f1) => [exists x : F, sat (set_nth 0%R e k x) f1]
| ('forall 'X_k, f1) => [forall x : F, sat (set_nth 0%R e k x) f1]
end%T.

Lemma decidable : GRing.DecidableField.axiom sat.