unfold is_subspace in |- *; intuition.
simpl in |- *.
red in H1, H.
exists (Build_subtype H1).
exists (Build_subtype H).
simpl in |- *.
auto with algebra.
simpl in H3, H6.
inversion_clear H3; inversion_clear H6.
inversion_clear H7; inversion_clear H3.
destruct x0; destruct x1; destruct x2; destruct x3.
generalize (H0 _ _ subtype_prf subtype_prf0).
generalize (H2 _ _ subtype_prf1 subtype_prf2).
intros.
red in H3, H8.
exists (Build_subtype H8).
exists (Build_subtype H3).
simpl in |- *.
simpl in H6, H7.
apply
Trans with (subtype_elt +' subtype_elt1 +' (subtype_elt0 +' subtype_elt2));
auto with algebra.
simpl in H3.
inversion_clear H3.
inversion_clear H6.
destruct x0; destruct x1.
generalize (H4 c _ subtype_prf).
generalize (H5 c _ subtype_prf0).
intros.
simpl in H3; simpl in |- *.
red in H6, H7.
exists (Build_subtype H7).
exists (Build_subtype H6).
simpl in |- *.
apply Trans with (c mX (subtype_elt +' subtype_elt0)); auto with algebra.
Qed.
(** %\tocdef{form\_direct\_sum}% *)
Definition form_direct_sum (W1 W2 : subspace V) : Prop :=
inter W1 W2 =' single (zero V) in _ /\ sum_set W1 W2 =' full V in _.
End MAIN.
Section Example.

(* Specifications: *)
(** - Example 26 on page 20 is actually WRONG, or at least incomplete: if the field is $\mathbf Z/2\mathbf Z = \{0,1\}$, where $-1=1$, then symmetric and antisymmetric matrices coincide, and $M_{nn}$ cannot be split in just the symmetric and antisymmetric part. Hence the extra condition that $1+1\neq0$: *)
Lemma matrixspace_sym_antisym :
forall (n : nat) (F : field),
~ one +' one =' (zero F) in _ ->
form_direct_sum (symm_subspace n F) (antisym_subspace n F).