Library squarematrices

Require Export matrices.

Module Type TSquareMatrices.

Parameter A : Set.
Parameter Aopp : A -> A.
Parameters (Aplus : A -> A -> A) (Amult : A -> A -> A).
Parameters (A0 : A) (A1 : A).
Parameter Aeq : A -> A -> bool.
Parameter A_ring : Ring_Theory Aplus Amult A1 A0 Aopp Aeq.

Parameter smatrix : nat -> Set.
Parameter addmatrix : forall n : nat, smatrix n -> smatrix n -> smatrix n.
Parameter prodmat : forall n : nat, smatrix n -> smatrix n -> smatrix n.
Parameter oppmatrix : forall n : nat, smatrix n -> smatrix n.
Parameter o : forall n : nat, smatrix n.
Parameter I : forall n : nat, smatrix n.

Axiom addmatrix_sym :
    forall (n : nat) (w w' : smatrix n), addmatrix n w w' = addmatrix n w' w.

Axiom addmatrix_assoc : forall (n : nat) (w w' w'' : smatrix n),
    addmatrix n (addmatrix n w w') w'' = addmatrix n w (addmatrix n w' w'').

Axiom addmatrix_oppmatrix :
    forall (n : nat) (w : smatrix n), addmatrix n w (oppmatrix n w) = o n.

Axiom addmatrix_zero_l :
    forall (n : nat) (w : smatrix n), addmatrix n (o n) w = w.

Axiom I_mat : forall (n : nat) (w : smatrix n), prodmat n (I n) w = w.
Axiom mat_I : forall (n : nat) (w : smatrix n), prodmat n w (I n) = w.

Axiom prodmat_distr_l :
    forall (n : nat) (a b w : smatrix n),
    prodmat n (addmatrix n a b) w = addmatrix n (prodmat n a w) (prodmat n b w).

Axiom prodmat_distr_r :
    forall (n : nat) (a b w : smatrix n),
    prodmat n w (addmatrix n a b) = addmatrix n (prodmat n w a) (prodmat n w b).

Axiom prodmat_assoc :
    forall (n : nat) (a b c : smatrix n),
    prodmat n (prodmat n a b) c = prodmat n a (prodmat n b c).

End TSquareMatrices.

Module SquareMatrices (C: Carrier) <: TSquareMatrices with Definition A := C.A with
  Definition Aopp := C.Aopp with Definition Aplus := C.Aplus with Definition
  Amult := C.Amult with Definition A0 := C.A0 with Definition A1 := C.A1 with
  Definition Aeq := C.Aeq with Definition A_ring := C.A_ring.

Definition A := C.A.
Definition Aopp := C.Aopp.
Definition Aplus := C.Aplus.
Definition Amult := C.Amult.
Definition A0 := C.A0.
Definition A1 := C.A1.
Definition Aeq := C.Aeq.
Definition A_ring := C.A_ring.

Module MyMatrices := Matrices C.
Import MyMatrices.
Import C.

Definition smatrix (n : nat) := vect (vect A n) n.
Definition eq_add_S_tr (n m : nat) (H : S n = S m) : n = m := f_equal pred H.

Definition addmatrix (n : nat) (v w : smatrix n) := MyMatrices.addmatrix n n v w.

Definition prodmat (n : nat) ( w1 w2 : smatrix n) : (smatrix n) :=
   MyMatrices.prodmat n n n w1 w2.
 
Definition oppmatrix (n : nat) (w: smatrix n) : (smatrix n) :=
   MyMatrices.oppmatrix n n w.

Definition o (n : nat) : smatrix n := MyMatrices.o n n.

Definition I ( n : nat) := MyMatrices.I n.
 
Lemma addmatrix_sym :
 forall (n : nat) (w w' : smatrix n),
 addmatrix n w w' = addmatrix n w' w.
intros n w w'.
unfold addmatrix.
apply MyMatrices.addmatrix_sym.
Qed.

Lemma addmatrix_assoc :
 forall (n : nat) (w w' w'' : smatrix n),
 addmatrix n (addmatrix n w w') w'' =
 addmatrix n w (addmatrix n w' w'').
intros n w w' w''.
unfold addmatrix.
apply MyMatrices.addmatrix_assoc.
Qed.

Lemma addmatrix_oppmatrix :
 forall (n : nat) (w : smatrix n),
 addmatrix n w (oppmatrix n w) = o n.
intros n w.
unfold addmatrix, oppmatrix, o.
apply MyMatrices.addmatrix_oppmatrix.
Qed.

Lemma addmatrix_zero_l :
 forall (n : nat) (w : smatrix n), addmatrix n (o n) w = w.
intros n w.
unfold addmatrix, o.
apply MyMatrices.addmatrix_zero_l.
Qed.
 
Lemma I_mat : forall (n : nat) (w : smatrix n), prodmat n (I n) w = w.
intros n w.
unfold I, prodmat.
apply (MyMatrices.I_mat n n w).
Qed.
 
Lemma mat_I : forall (n : nat) (w : smatrix n), prodmat n w (I n) = w.
intros n w.
unfold I, prodmat.
apply (MyMatrices.mat_I n n w).
Qed.
 
Lemma prodmat_distr_l :
 forall (n : nat) (a b w : smatrix n),
 prodmat n (addmatrix n a b) w =
 addmatrix n (prodmat n a w) (prodmat n b w).
intros n a b w.
unfold prodmat, addmatrix.
apply (MyMatrices.prodmat_distr_l n n n a b w).
Qed.

Lemma prodmat_distr_r :
 forall (n : nat) (a b w : smatrix n),
 prodmat n w (addmatrix n a b) =
 addmatrix n (prodmat n w a) (prodmat n w b).
intros n a b w.
unfold prodmat, addmatrix.
apply (MyMatrices.prodmat_distr_r n n n a b w).
Qed.

Lemma prodmat_assoc :
 forall (n : nat) (a b c : smatrix n),
 prodmat n (prodmat n a b) c = prodmat n a (prodmat n b c).
intros n a b c.
unfold prodmat.
apply (MyMatrices.prodmat_assoc n n n n a b c).
Qed.

End SquareMatrices.

Module squarematrixZ := SquareMatrices Zc.


Index
This page has been generated by coqdoc