:: Basic Properties of Circulant Matrices and Anti-circular Matrices
:: by Xiaopeng Yue and Xiquan Liang
::
:: Received August 26, 2008
:: Copyright (c) 2008-2021 Association of Mizar Users
:: (Stowarzyszenie Uzytkownikow Mizara, Bialystok, Poland).
:: This code can be distributed under the GNU General Public Licence
:: version 3.0 or later, or the Creative Commons Attribution-ShareAlike
:: License version 3.0 or later, subject to the binding interpretation
:: detailed in file COPYING.interpretation.
:: See COPYING.GPL and COPYING.CC-BY-SA for the full text of these
:: licenses, or see http://www.gnu.org/licenses/gpl.html and
:: http://creativecommons.org/licenses/by-sa/3.0/.
environ
vocabularies NUMBERS, SUBSET_1, VECTSP_1, FINSEQ_1, MATRIX_1, NAT_1, XXREAL_0,
ARYTM_1, INT_1, ARYTM_3, CARD_1, ZFMISC_1, GROUP_1, RELAT_1, FUNCT_1,
TARSKI, STRUCT_0, ALGSTR_0, FUNCOP_1, FVSUM_1, SUPINF_2, FINSEQ_2,
TREES_1, XBOOLE_0, QC_LANG1, INCSP_1, PARTFUN1, MESFUNC1, MATRIX16;
notations MATRIX_0, VECTSP_1, GROUP_1, XBOOLE_0, ZFMISC_1, SUBSET_1, ORDINAL1,
TARSKI, FINSEQ_1, FINSEQ_2, FVSUM_1, FUNCT_1, STRUCT_0, BINOP_1,
XXREAL_0, MATRIX_1, FUNCOP_1, INT_1, NUMBERS, XCMPLX_0, MATRIX_3,
MATRIX_4, MATRIX_6, RELAT_1, ALGSTR_0, PARTFUN1, MATRIX13;
constructors REAL_1, MATRIX_6, MATRIX13, POLYNOM1, FVSUM_1, MATRIX_0,
MATRIX_1, MATRIX_4;
registrations STRUCT_0, INT_1, RELSET_1, VECTSP_1, FINSEQ_2, XXREAL_0,
FUNCOP_1, XREAL_0, XBOOLE_0, FUNCT_1, ORDINAL1, MATRIX_0, MATRIX_6;
requirements REAL, NUMERALS, BOOLE, SUBSET, ARITHM;
begin :: Basic Properties of Circulant Matrices
reserve i,j,k,n,l for Element of NAT,
K for Field,
a,b,c for Element of K,
p ,q for FinSequence of K,
M1,M2,M3 for Matrix of n,K;
theorem :: MATRIX16:1
(1_K)*p=p;
theorem :: MATRIX16:2
(-1_K)*p=-p;
definition
let K be set;
let M be Matrix of K;
let p be FinSequence;
pred M is_line_circulant_about p means
:: MATRIX16:def 1
len p = width M & for i,j be
Nat st [i,j] in Indices M holds M*(i,j) = p.((j-i mod len p)+1);
end;
definition
let K be set;
let M be Matrix of K;
attr M is line_circulant means
:: MATRIX16:def 2
ex p being FinSequence of K st len p= width M & M is_line_circulant_about p;
end;
definition
let K be non empty set;
let p be FinSequence of K;
attr p is first-line-of-circulant means
:: MATRIX16:def 3
ex M being Matrix of len p,K st M is_line_circulant_about p;
end;
definition
let K be set;
let M be Matrix of K;
let p be FinSequence;
pred M is_col_circulant_about p means
:: MATRIX16:def 4
len p = len M & for i,j be Nat
st [i,j] in Indices M holds M*(i,j)=p.((i-j mod len p)+1);
end;
definition
let K be set;
let M be Matrix of K;
attr M is col_circulant means
:: MATRIX16:def 5
ex p being FinSequence of K st len p = len M & M is_col_circulant_about p;
end;
definition
let K be non empty set;
let p be FinSequence of K;
attr p is first-col-of-circulant means
:: MATRIX16:def 6
ex M being Matrix of len p,K st M is_col_circulant_about p;
end;
definition
let K be non empty set, p be FinSequence of K;
assume
p is first-line-of-circulant;
func LCirc(p) -> Matrix of len p,K means
:: MATRIX16:def 7
it is_line_circulant_about p;
end;
definition
let K be non empty set, p be FinSequence of K;
assume
p is first-col-of-circulant;
func CCirc(p) -> Matrix of len p,K means
:: MATRIX16:def 8
it is_col_circulant_about p;
end;
registration
let K be Field;
cluster first-line-of-circulant first-col-of-circulant for FinSequence of K;
end;
registration
let K,n;
cluster 0.(K,n) -> line_circulant col_circulant;
end;
registration
let K;
let n;
let a be Element of K;
cluster (n,n)-->a -> line_circulant for Matrix of n,K;
cluster (n,n)-->a -> col_circulant for Matrix of n,K;
end;
registration
let K;
cluster line_circulant col_circulant for Matrix of K;
end;
reserve D for non empty set,
t for FinSequence of D,
A for Matrix of n,D;
theorem :: MATRIX16:3
A is line_circulant & n>0 implies A@ is col_circulant;
theorem :: MATRIX16:4
A is_line_circulant_about t & n>0 implies t = Line(A,1);
theorem :: MATRIX16:5
A is line_circulant & [i,j] in [:Seg n, Seg n:] & k=i+1 & l=j+1 & i0 implies A@ is line_circulant;
theorem :: MATRIX16:18
A is_col_circulant_about t & n>0 implies t = Col(A,1);
theorem :: MATRIX16:19
A is col_circulant & [i,j] in [:Seg n, Seg n:] & k=i+1 & l=j+1 & i0 implies 1.(K,n) is col_circulant;
theorem :: MATRIX16:40
n>0 implies 1.(K,n) is line_circulant;
theorem :: MATRIX16:41
p is first-line-of-circulant implies a*p is first-line-of-circulant;
theorem :: MATRIX16:42
p is first-line-of-circulant implies LCirc(a*p) =a*(LCirc p);
theorem :: MATRIX16:43
p is first-line-of-circulant implies a*(LCirc p)+b*(LCirc p)=LCirc((a+ b)*p);
theorem :: MATRIX16:44
p is first-line-of-circulant & q is first-line-of-circulant & len p =
len q implies a*(LCirc p)+a*(LCirc q)=LCirc(a*(p+q));
theorem :: MATRIX16:45
p is first-line-of-circulant & q is first-line-of-circulant & len p =
len q implies a*(LCirc p)+b*(LCirc q)=LCirc(a*p+b*q);
theorem :: MATRIX16:46
p is first-col-of-circulant implies a*p is first-col-of-circulant;
theorem :: MATRIX16:47
p is first-col-of-circulant implies CCirc(a*p)=a*(CCirc p);
theorem :: MATRIX16:48
p is first-col-of-circulant implies a*(CCirc p)+b*(CCirc p)=CCirc((a+b )*p);
theorem :: MATRIX16:49
p is first-col-of-circulant & q is first-col-of-circulant & len p =
len q & len p > 0 implies a*(CCirc p)+a*(CCirc q)=CCirc(a*(p+q));
theorem :: MATRIX16:50
p is first-col-of-circulant & q is first-col-of-circulant & len p =
len q implies a*(CCirc p)+b*(CCirc q)=CCirc(a*p+b*q);
notation
let K be set;
let M be Matrix of K;
synonym M is circulant for M is line_circulant;
end;
begin :: Basic Properties of Anti-circular Matrices
definition
let K be Field;
let M1 be Matrix of K;
let p be FinSequence of K;
pred M1 is_anti-circular_about p means
:: MATRIX16:def 9
len p=width M1 & (for i,j be
Nat st [i,j] in Indices M1 & i<=j holds M1*(i,j)=p.((j-i mod len p)+1)) & for i
,j be Nat st [i,j] in Indices M1 & i>=j holds M1*(i,j)=(-p).((j-i mod len p)+1)
;
end;
definition
let K be Field;
let M be Matrix of K;
attr M is anti-circular means
:: MATRIX16:def 10
ex p being FinSequence of K st len p= width M & M is_anti-circular_about p;
end;
definition
let K be Field;
let p be FinSequence of K;
attr p is first-line-of-anti-circular means
:: MATRIX16:def 11
ex M being Matrix of len p,K st M is_anti-circular_about p;
end;
definition
let K be Field, p be FinSequence of K;
assume
p is first-line-of-anti-circular;
func ACirc(p) -> Matrix of len p,K means
:: MATRIX16:def 12
it is_anti-circular_about p;
end;
theorem :: MATRIX16:51
M1 is anti-circular implies a*M1 is anti-circular;
theorem :: MATRIX16:52
M1 is anti-circular & M2 is anti-circular implies M1+M2 is anti-circular;
theorem :: MATRIX16:53
for K being Fanoian Field, n,i,j being Nat, M1 being Matrix of n,K st
[i,j] in Indices M1 & i=j & M1 is anti-circular holds M1*(i,j)=0.K;
theorem :: MATRIX16:54
M1 is anti-circular & [i,j] in [:Seg n, Seg n:] & k=i+1 & l=j+1 & i0 implies p = Line(M1,1);
theorem :: MATRIX16:58
p is first-line-of-anti-circular implies -p is first-line-of-anti-circular;
theorem :: MATRIX16:59
p is first-line-of-anti-circular implies ACirc(-p) =-(ACirc(p));
theorem :: MATRIX16:60
p is first-line-of-anti-circular & q is
first-line-of-anti-circular & len p = len q implies p+q is
first-line-of-anti-circular;
theorem :: MATRIX16:61
p is first-line-of-anti-circular & q is
first-line-of-anti-circular & len p = len q implies ACirc(p+q) = ACirc(p)+ACirc
(q);
theorem :: MATRIX16:62
p is first-line-of-anti-circular implies a*p is first-line-of-anti-circular;
theorem :: MATRIX16:63
p is first-line-of-anti-circular implies ACirc(a*p) =a*(ACirc p);
theorem :: MATRIX16:64
p is first-line-of-anti-circular implies a*(ACirc p)+b*(ACirc p)=ACirc
((a+b)*p);
theorem :: MATRIX16:65
p is first-line-of-anti-circular & q is first-line-of-anti-circular &
len p = len q implies a*(ACirc p)+a*(ACirc q)=ACirc(a*(p+q));
theorem :: MATRIX16:66
p is first-line-of-anti-circular & q is first-line-of-anti-circular &
len p = len q implies a*(ACirc p)+b*(ACirc q)=ACirc(a*p+b*q);
registration
let K,n;
cluster 0.(K,n) -> anti-circular;
end;