CoRN.old.CVectorSpace



Require Export CFields.

Vector Spaces

Obsolete but maintained.


Record VSpace (F : CField) : Type :=
  {vs_vs :> CGroup;
   vs_op : CSetoid_outer_op F vs_vs;
   vs_assoc : a b v, vs_op (a[*]b) v [=] vs_op a (vs_op b v);
   vs_unit : v, vs_op One v [=] v;
   vs_distl : a b v, vs_op (a[+]b) v [=] vs_op a v[+]vs_op b v;
   vs_distr : a v u, vs_op a (v[+]u) [=] vs_op a v[+]vs_op a u}.


Hint Resolve vs_assoc vs_unit vs_distl vs_distr: algebra.

Implicit Arguments vs_op [F v].
Infix "[']" := vs_op (at level 30, no associativity).

Let F be a fiels and let V be a vector space over F

Section VS_basics.
Variable F : CField.
Variable V : VSpace F.

Lemma vs_op_zero : a : F, a' (Zero:V) [=] Zero.
Proof.
 intros.
 apply cg_cancel_lft with (a' (Zero:V)).
 astepl (a' ((Zero:V) [+]Zero)).
 Step_final (a' (Zero:V)).
Qed.

Lemma zero_vs_op : v : V, Zero'v [=] Zero.
Proof.
 intros.
 apply cg_cancel_lft with (Zero'v).
 astepl ((Zero[+]Zero) 'v).
 Step_final (Zero'v).
Qed.

Hint Resolve vs_op_zero zero_vs_op: algebra.

Lemma vs_op_inv_V : (x : F) (y : V), x['][--]y [=] [--] (x'y).
Proof.
 intros.
 apply cg_inv_unique.
 astepl (x' (y[+][--]y)).
 Step_final (x' (Zero:V)).
Qed.

Lemma vs_op_inv_S : (x : F) (y : V), [--]x'y [=] [--] (x'y).
Proof.
 intros.
 apply cg_inv_unique.
 astepl ((x[+][--]x) 'y).
 Step_final (Zero'y).
Qed.

Hint Resolve vs_op_inv_V vs_op_inv_S: algebra.

Lemma vs_inv_assoc : (a : F) a_ (v : V), v [=] f_rcpcl a a_' (a'v).
Proof.
 intros.
 astepl (One'v).
 Step_final ((f_rcpcl a a_[*]a) 'v).
Qed.
Hint Resolve vs_inv_assoc: algebra.

Lemma ap_zero_vs_op_l : (a : F) (v : V), a'v [#] Zeroa [#] Zero.
Proof.
 intros.
 elim (csoo_strext _ _ (vs_op (F:=F) (v:=V)) a Zero v v).
   auto.
  intro contra; elim (ap_irreflexive _ _ contra).
 astepr (Zero:V). auto.
Qed.

Lemma ap_zero_vs_op_r : (a : F) (v : V), a'v [#] Zerov [#] Zero.
Proof.
 intros.
 elim (csoo_strext _ _ (vs_op (F:=F) (v:=V)) a a v Zero).
   intro contra; elim (ap_irreflexive _ _ contra).
  auto.
 astepr (Zero:V). auto.
Qed.

Lemma vs_op_resp_ap_rht : (a : F) (v u : V), a [#] Zerov [#] ua'v [#] a'u.
Proof.
 intros.
 cut (f_rcpcl a X' (a'v) [#] f_rcpcl a X' (a'u)).
  intros H1.
  case (csoo_strext _ _ _ _ _ _ _ H1).
   intro contra; elim (ap_irreflexive _ _ contra).
  auto.
 astepr u.
 astepl v. auto.
Qed.

Lemma vs_op_resp_ap_zero : (a : F) (v : V), a [#] Zerov [#] Zeroa'v [#] Zero.
Proof.
 intros.
 astepr (a' (Zero:V)).
 apply vs_op_resp_ap_rht; assumption.
Qed.

Lemma vs_op_resp_ap_lft : (a b : F) (v : V), a [#] bv [#] Zeroa'v [#] b'v.
Proof.
 intros.
 apply zero_minus_apart.
 astepl ((a[-]b) 'v).
  apply vs_op_resp_ap_zero; [ idtac | assumption ].
  apply minus_ap_zero; assumption.
 unfold cg_minus in |- ×. Step_final (a'v[+][--]b'v).
Qed.

End VS_basics.
Hint Resolve vs_op_zero zero_vs_op: algebra.