Qed.
End spans.
Hint Resolve span_comp: algebra.
Section spans_inductively_defined.
Variable F : field.
Variable V : vectorspace F.
Variable S : part_set V.
(** - The type of formal expressions *)
Inductive span_ind_formal : Type :=
| Zerovector : span_ind_formal
| Immediately : S -> span_ind_formal
| Plusvector : span_ind_formal -> span_ind_formal -> span_ind_formal
| Multvector : F -> span_ind_formal -> span_ind_formal.
(** - The injection into the `inductively defined' span *)
Fixpoint span_ind_injection (X : span_ind_formal) : V :=
match X with
| Zerovector => zero V
| Immediately s => subtype_elt s
| Plusvector x y => span_ind_injection x +' span_ind_injection y
| Multvector a x => a mX span_ind_injection x
end.
Definition span_ind_set : part_set V.
simpl in |- *.
apply
(Build_Predicate
(Pred_fun:=fun v : V =>
exists X : span_ind_formal, v =' span_ind_injection X in _)).
red in |- *.
intros.
inversion H.
exists x0.
apply Trans with x; auto with algebra.
Defined.
(** %\tocdef{span\_ind}% *)
Definition span_ind : subspace V.
apply alt_Build_subspace with span_ind_set; auto with algebra.
red in |- *.
split; try split; simpl in |- *.
exists Zerovector.
simpl in |- *.
auto with algebra.
intros.
inversion_clear H; inversion_clear H0.
exists (Plusvector x0 x1).
simpl in |- *.
auto with algebra.
intros.
inversion_clear H.
exists (Multvector c x0).
simpl in |- *.
auto with algebra.
Defined.
Definition lin_comb_ind (v : V) : Prop := in_part v span_ind.
End spans_inductively_defined.
Section spans_eqv.
Variable F : field.
Variable V : vectorspace F.

(* Specifications: *)
Lemma span_ind_eqv_span :
forall (S : part_set V) (v : V), is_lin_comb v S <-> lin_comb_ind S v.