mathlib documentation

linear_algebra.matrix.circulant

Circulant matrices #

This file contains the definition and basic results about circulant matrices. Given a vector v : n → α indexed by a type that is endowed with subtraction, matrix.circulant v is the matrix whose (i, j)th entry is v (i - j).

Main results #

Implementation notes #

matrix.fin.foo is the fin n version of matrix.foo. Namely, the index type of the circulant matrices in discussion is fin n.

Tags #

circulant, matrix

@[simp]
def matrix.circulant {α : Type u_1} {n : Type u_4} [has_sub n] (v : n → α) :
matrix n n α

Given the condition [has_sub n] and a vector v : n → α, we define circulant v to be the circulant matrix generated by v of type matrix n n α. The (i,j)th entry is defined to be v (i - j).

Equations
theorem matrix.circulant_col_zero_eq {α : Type u_1} {n : Type u_4} [add_group n] (v : n → α) (i : n) :
theorem matrix.circulant_injective {α : Type u_1} {n : Type u_4} [add_group n] :
theorem matrix.fin.circulant_injective {α : Type u_1} (n : ) :
function.injective (λ (v : fin n → α), matrix.circulant v)
@[simp]
theorem matrix.circulant_inj {α : Type u_1} {n : Type u_4} [add_group n] {v w : n → α} :
@[simp]
theorem matrix.fin.circulant_inj {α : Type u_1} {n : } {v w : fin n → α} :
theorem matrix.transpose_circulant {α : Type u_1} {n : Type u_4} [add_group n] (v : n → α) :
(matrix.circulant v) = matrix.circulant (λ (i : n), v (-i))
theorem matrix.conj_transpose_circulant {α : Type u_1} {n : Type u_4} [has_star α] [add_group n] (v : n → α) :
(matrix.circulant v) = matrix.circulant (star (λ (i : n), v (-i)))
theorem matrix.fin.transpose_circulant {α : Type u_1} {n : } (v : fin n → α) :
(matrix.circulant v) = matrix.circulant (λ (i : fin n), v (-i))
theorem matrix.fin.conj_transpose_circulant {α : Type u_1} [has_star α] {n : } (v : fin n → α) :
(matrix.circulant v) = matrix.circulant (star (λ (i : fin n), v (-i)))
theorem matrix.map_circulant {α : Type u_1} {β : Type u_2} {n : Type u_4} [has_sub n] (v : n → α) (f : α → β) :
(matrix.circulant v).map f = matrix.circulant (λ (i : n), f (v i))
theorem matrix.circulant_neg {α : Type u_1} {n : Type u_4} [has_neg α] [has_sub n] (v : n → α) :
@[simp]
theorem matrix.circulant_zero (α : Type u_1) (n : Type u_2) [has_zero α] [has_sub n] :
theorem matrix.circulant_add {α : Type u_1} {n : Type u_4} [has_add α] [has_sub n] (v w : n → α) :
theorem matrix.circulant_sub {α : Type u_1} {n : Type u_4} [has_sub α] [has_sub n] (v w : n → α) :
theorem matrix.circulant_mul {α : Type u_1} {n : Type u_4} [semiring α] [fintype n] [add_group n] (v w : n → α) :

The product of two circulant matrices circulant v and circulant w is the circulant matrix generated by mul_vec (circulant v) w.

theorem matrix.fin.circulant_mul {α : Type u_1} [semiring α] {n : } (v w : fin n → α) :
theorem matrix.circulant_mul_comm {α : Type u_1} {n : Type u_4} [comm_semigroup α] [add_comm_monoid α] [fintype n] [add_comm_group n] (v w : n → α) :

Multiplication of circulant matrices commutes when the elements do.

theorem matrix.circulant_smul {α : Type u_1} {n : Type u_4} {R : Type u_5} [has_sub n] [has_scalar R α] (k : R) (v : n → α) :

k • circulant v is another circulant matrix circulant (k • v).

@[simp]
theorem matrix.circulant_single_one (α : Type u_1) (n : Type u_2) [has_zero α] [has_one α] [decidable_eq n] [add_group n] :
@[simp]
theorem matrix.circulant_single {α : Type u_1} (n : Type u_2) [semiring α] [decidable_eq n] [add_group n] [fintype n] (a : α) :
theorem matrix.fin.circulant_ite (α : Type u_1) [has_zero α] [has_one α] (n : ) :
matrix.circulant (λ (i : fin n), ite (i = 0) 1 0) = 1

Note we use ↑i = 0 instead of i = 0 as fin 0 has no 0. This means that we cannot state this with pi.single as we did with matrix.circulant_single.

theorem matrix.circulant_is_symm_iff {α : Type u_1} {n : Type u_4} [add_group n] {v : n → α} :
(matrix.circulant v).is_symm ∀ (i : n), v (-i) = v i

A circulant of v is symmetric iff v equals its reverse.

theorem matrix.fin.circulant_is_symm_iff {α : Type u_1} {n : } {v : fin n → α} :
(matrix.circulant v).is_symm ∀ (i : fin n), v (-i) = v i
theorem matrix.circulant_is_symm_apply {α : Type u_1} {n : Type u_4} [add_group n] {v : n → α} (h : (matrix.circulant v).is_symm) (i : n) :
v (-i) = v i

If circulant v is symmetric, ∀ i j : I, v (- i) = v i.

theorem matrix.fin.circulant_is_symm_apply {α : Type u_1} {n : } {v : fin n → α} (h : (matrix.circulant v).is_symm) (i : fin n) :
v (-i) = v i