Variables S : predPredType A.
Definition divalg_closed := [/\ 1 \in S, linear_closed S & divr_2closed S].

(* Specifications: *)
Lemma divalg_closedBdiv : divalg_closed -> divring_closed S.
Lemma mul_ext (R : ringType) S k (kS : @keyed_pred R S k) :
mulr_closed kS -> mulr_closed S.
Lemma scale_ext (R : ringType) (U : lmodType R) S k (kS : @keyed_pred U S k) :
scaler_closed kS -> scaler_closed S.
Lemma rpred0 : 0 \in kS.
Lemma rpredDl x y : x \in kS -> (x + y \in kS) = (y \in kS).
Lemma rpred1 : 1 \in kS.
Lemma rpredMr x y : x \in kS -> x \is a unit -> (y * x \in kS) = (y \in kS).
Lemma rpred_divr x y : x \in kS -> x \is a unit -> (y / x \in kS) = (y \in kS).
Lemma invr_signM n x : ((-1) ^+ n * x)^-1 = (-1) ^+ n * x^-1.
Fixpoint holds (e : seq R) (f : formula R) {struct f} : Prop :=
match f with
| Bool b => b
| (t1 == t2)%T => eval e t1 = eval e t2
| Unit t1 => eval e t1 \in unit
| (f1 /\ f2)%T => holds e f1 /\ holds e f2
| (f1 \/ f2)%T => holds e f1 \/ holds e f2
| (f1 ==> f2)%T => holds e f1 -> holds e f2
| (~ f1)%T => ~ holds e f1
| ('exists 'X_i, f1)%T => exists x, holds (set_nth 0 e i x) f1
| ('forall 'X_i, f1)%T => forall x, holds (set_nth 0 e i x) f1
end.