(** ** Constructors *)
Definition SF_nil (x0 : R) : SF_seq := mkSF_seq x0 [::].
Definition SF_cons (h : R*T) (s : SF_seq) :=
mkSF_seq (fst h) ((SF_h s,snd h)::(SF_t s)).
Definition SF_rcons (s : SF_seq) (t : R*T) :=
mkSF_seq (SF_h s) (rcons (SF_t s) t).

(* Specifications: *)
Lemma SF_cons_dec (P : SF_seq -> Type) :
(forall x0 : R, P (SF_nil x0)) -> (forall h s, P (SF_cons h s))
-> (forall s, P s).
Lemma SF_cons_ind (P : SF_seq -> Type) :
(forall x0 : R, P (SF_nil x0)) -> (forall h s, P s -> P (SF_cons h s))
-> (forall s, P s).
Lemma SF_rcons_dec (P : SF_seq -> Type) :
(forall x0 : R, P (SF_nil x0)) -> (forall s t, P (SF_rcons s t))
-> (forall s, P s).
Lemma SF_rcons_ind (P : SF_seq -> Type) :
(forall x0 : R, P (SF_nil x0)) -> (forall s t, P s -> P (SF_rcons s t))
-> (forall s, P s).
Lemma SF_cons_rcons (h : R*T) (s : SF_seq) (l : R*T) :
SF_cons h (SF_rcons s l) = SF_rcons (SF_cons h s) l.