Documentation

WeightedNetKAT.NMatrix

@[simp]
theorem Fin.mul_add_div {m n : } (i : Fin m) (j : Fin n) :
(i * n + j) / n = i
@[simp]
theorem Fin.mul_add_mod {n : } (j : Fin n) :
j % n = j
@[simp]
theorem Fin.mul_add_lt_mul {m n : } (i : Fin m) (j : Fin n) :
i * n + j < m * n
@[simp]
theorem Fin.mul_add_divNat {m n : } (i : Fin m) (j : Fin n) :
i * n + j, .divNat = i
@[simp]
theorem Fin.mul_add_modNat {m n : } (i : Fin m) (j : Fin n) :
i * n + j, .modNat = j
structure NMatrix (m n : ) (α : Type u_1) :
Type u_1
Instances For
    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      @[inline]
      def NMatrix.get {m n : } {α : Type u_1} (M : NMatrix m n α) (i : Fin m) (j : Fin n) :
      α
      Equations
      Instances For
        theorem NMatrix.ext_get {m n : } {α : Type u_1} {X X' : NMatrix m n α} (h : ∀ (i : Fin m) (j : Fin n), X.get i j = X'.get i j) :
        X = X'
        theorem NMatrix.ext_get_iff {m n : } {α : Type u_1} {X X' : NMatrix m n α} :
        (∀ (i : Fin m) (j : Fin n), X.get i j = X'.get i j) X = X'
        @[inline, specialize #[]]
        def NMatrix.ofFn {m n : } {α : Type u_1} :
        Matrix (Fin m) (Fin n) α NMatrix m n α
        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          @[implicit_reducible]
          instance NMatrix.instFunLikeFinForall {m n : } {α : Type u_1} :
          FunLike (NMatrix m n α) (Fin m) (Fin nα)
          Equations
          @[simp]
          theorem NMatrix.get_eq_apply {m n : } {α : Type u_1} {X : NMatrix m n α} {i : Fin m} :
          X.get i = X i
          def NMatrix.set {m n : } {α : Type u_1} (M : NMatrix m n α) (i : Fin m) (j : Fin n) (a : α) :
          NMatrix m n α
          Equations
          Instances For
            theorem NMatrix.ext {m n : } {α : Type u_1} {X X' : NMatrix m n α} (h : ∀ (i : Fin m) (j : Fin n), X i j = X' i j) :
            X = X'
            theorem NMatrix.ext_iff {m n : } {α : Type u_1} {X X' : NMatrix m n α} :
            X = X' ∀ (i : Fin m) (j : Fin n), X i j = X' i j
            @[simp]
            theorem NMatrix.mk_apply {m n : } {α : Type u_1} {data : Vector α (m * n)} {i : Fin m} {j : Fin n} :
            { data := data } i j = data[i * n + j]
            @[simp]
            theorem NMatrix.data_getElem {m n : } {α : Type u_1} (M : NMatrix m n α) (i : Fin m) (j : Fin n) :
            M.data[i * n + j] = M i j
            theorem NMatrix.set_apply {m n : } {α : Type u_1} (M : NMatrix m n α) (i : Fin m) (j : Fin n) (a : α) (i' : Fin m) (j' : Fin n) :
            (M.set i j a) i' j' = if i = i' j = j' then a else M i' j'
            @[simp]
            theorem NMatrix.ofFn_apply {m n : } {α : Type u_1} {f : Fin mFin nα} {i : Fin m} :
            (ofFn f) i = f i
            @[simp]
            theorem NMatrix.apply_ofFn {m n : } {α : Type u_1} {X : NMatrix m n α} :
            ofFn X = X
            def NMatrix.ofMatrix {m n : } {α : Type u_1} :
            Matrix (Fin m) (Fin n) α NMatrix m n α

            Alias of NMatrix.ofFn.

            Equations
            Instances For
              @[reducible, inline]
              abbrev NMatrix.asMatrix {m n : } {α : Type u_1} :
              NMatrix m n α Matrix (Fin m) (Fin n) α
              Equations
              Instances For
                theorem NMatrix.asMatrix_eq_apply {m n : } {α : Type u_1} {X : NMatrix m n α} :
                asMatrix X = X
                @[simp]
                theorem NMatrix.asMatrix_apply {m n : } {α : Type u_1} {X : NMatrix m n α} {i : Fin m} :
                asMatrix X i = X i
                @[simp]
                theorem NMatrix.ofMatrix_apply {m n : } {α : Type u_1} {M : Matrix (Fin m) (Fin n) α} {i : Fin m} :
                (ofMatrix M) i = M i
                @[simp]
                theorem NMatrix.ofMatrix_apply₂ {m n : } {α : Type u_1} {M : Matrix (Fin m) (Fin n) α} {i : Fin m} {j : Fin n} :
                (ofMatrix M) i j = M i j
                theorem NMatrix.eq_of_asMatrix {m n : } {α : Type u_1} {X X' : NMatrix m n α} (h : asMatrix X = asMatrix X') :
                X = X'
                def NMatrix.fromBlocks {m m' n n' : } {α : Type u_1} (m₁₁ : NMatrix m n α) (m₁₂ : NMatrix m n' α) (m₂₁ : NMatrix m' n α) (m₂₂ : NMatrix m' n' α) :
                NMatrix (m + m') (n + n') α
                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    def NMatrix.toBlocks₁₁ {m m' n n' : } {α : Type u_1} (M : NMatrix (m + m') (n + n') α) :
                    NMatrix m n α
                    Equations
                    Instances For
                      def NMatrix.toBlocks₁₂ {m m' n n' : } {α : Type u_1} (M : NMatrix (m + m') (n + n') α) :
                      NMatrix m n' α
                      Equations
                      Instances For
                        def NMatrix.toBlocks₂₁ {m m' n n' : } {α : Type u_1} (M : NMatrix (m + m') (n + n') α) :
                        NMatrix m' n α
                        Equations
                        Instances For
                          def NMatrix.toBlocks₂₂ {m m' n n' : } {α : Type u_1} (M : NMatrix (m + m') (n + n') α) :
                          NMatrix m' n' α
                          Equations
                          Instances For
                            @[simp]
                            theorem NMatrix.toBlocks₁₁_apply {m m' n n' : } {α : Type u_1} (M : NMatrix (m + m') (n + n') α) {i : Fin m} {j : Fin n} :
                            M.toBlocks₁₁ i j = M i, j,
                            @[simp]
                            theorem NMatrix.toBlocks₁₂_apply {m m' n n' : } {α : Type u_1} (M : NMatrix (m + m') (n + n') α) {i : Fin m} {j : Fin n'} :
                            M.toBlocks₁₂ i j = M i, n + j,
                            @[simp]
                            theorem NMatrix.toBlocks₂₁_apply {m m' n n' : } {α : Type u_1} (M : NMatrix (m + m') (n + n') α) {i : Fin m'} {j : Fin n} :
                            M.toBlocks₂₁ i j = M m + i, j,
                            @[simp]
                            theorem NMatrix.toBlocks₂₂_apply {m m' n n' : } {α : Type u_1} (M : NMatrix (m + m') (n + n') α) {i : Fin m'} {j : Fin n'} :
                            M.toBlocks₂₂ i j = M m + i, n + j,
                            @[simp]
                            theorem NMatrix.fromBlocks_toBlocks₁₁ {m m' n n' : } {α : Type u_1} (m₁₁ : NMatrix m n α) (m₁₂ : NMatrix m n' α) (m₂₁ : NMatrix m' n α) (m₂₂ : NMatrix m' n' α) :
                            NB[[m₁₁, m₁₂],[m₂₁, m₂₂]].toBlocks₁₁ = m₁₁
                            @[simp]
                            theorem NMatrix.fromBlocks_toBlocks₁₂ {m m' n n' : } {α : Type u_1} (m₁₁ : NMatrix m n α) (m₁₂ : NMatrix m n' α) (m₂₁ : NMatrix m' n α) (m₂₂ : NMatrix m' n' α) :
                            NB[[m₁₁, m₁₂],[m₂₁, m₂₂]].toBlocks₁₂ = m₁₂
                            @[simp]
                            theorem NMatrix.fromBlocks_toBlocks₂₁ {m m' n n' : } {α : Type u_1} (m₁₁ : NMatrix m n α) (m₁₂ : NMatrix m n' α) (m₂₁ : NMatrix m' n α) (m₂₂ : NMatrix m' n' α) :
                            NB[[m₁₁, m₁₂],[m₂₁, m₂₂]].toBlocks₂₁ = m₂₁
                            @[simp]
                            theorem NMatrix.fromBlocks_toBlocks₂₂ {m m' n n' : } {α : Type u_1} (m₁₁ : NMatrix m n α) (m₁₂ : NMatrix m n' α) (m₂₁ : NMatrix m' n α) (m₂₂ : NMatrix m' n' α) :
                            NB[[m₁₁, m₁₂],[m₂₁, m₂₂]].toBlocks₂₂ = m₂₂
                            @[simp]
                            theorem NMatrix.fromBlocks_get {m m' n n' : } {α : Type u_1} (m₁₁ : NMatrix m n α) (m₁₂ : NMatrix m n' α) (m₂₁ : NMatrix m' n α) (m₂₂ : NMatrix m' n' α) {i : Fin (m + m')} {j : Fin (n + n')} :
                            NB[[m₁₁, m₁₂],[m₂₁, m₂₂]] i j = if hi : i < m then if hj : j < n then m₁₁ i, hi j, hj else m₁₂ i, hi j - n, else if hj : j < n then m₂₁ i - m, j, hj else m₂₂ i - m, j - n,
                            @[simp]
                            theorem NMatrix.toBlocks_fromBlocks {m m' n n' : } {α : Type u_1} (M : NMatrix (m + m') (n + n') α) :
                            def NMatrix.fill {m n : } {α : Type u_1} (a : α) :
                            NMatrix m n α
                            Equations
                            Instances For
                              @[simp]
                              def NMatrix.fill_apply {m n : } {α : Type u_1} {a : α} {i : Fin m} {j : Fin n} :
                              (fill a) i j = a
                              Equations
                              • =
                              Instances For
                                @[simp]
                                theorem NMatrix.asMatrix_ofMatrix {m n : } {α : Type u_1} {X : NMatrix m n α} :
                                @[simp]
                                theorem NMatrix.ofMatrix_asMatrix {m n : } {α : Type u_1} {M : Matrix (Fin m) (Fin n) α} :
                                @[simp]
                                theorem NMatrix.ofFn_asMatrix {m n : } {α : Type u_1} {f : Fin mFin nα} :
                                def NMatrix.map {m n : } {α : Type u_1} {β : Type u_2} (M : NMatrix m n α) (f : αβ) :
                                NMatrix m n β
                                Equations
                                Instances For
                                  @[simp]
                                  theorem NMatrix.map_apply {m n : } {α : Type u_1} {β : Type u_2} (M : NMatrix m n α) (f : αβ) {i : Fin m} {j : Fin n} :
                                  (M.map f) i j = f (M i j)
                                  @[implicit_reducible]
                                  instance NMatrix.instOneOfZero {n : } {α : Type u_1} [Zero α] [One α] :
                                  One (NMatrix n n α)
                                  Equations
                                  @[implicit_reducible]
                                  instance NMatrix.instZero {m n : } {α : Type u_1} [Zero α] :
                                  Zero (NMatrix m n α)
                                  Equations
                                  @[simp]
                                  theorem NMatrix.zero_apply {m n : } {α : Type u_1} [Zero α] {i : Fin m} {j : Fin n} :
                                  0 i j = 0
                                  @[simp]
                                  theorem NMatrix.one_apply {n : } {α : Type u_1} [Zero α] [One α] {i j : Fin n} :
                                  1 i j = if i = j then 1 else 0
                                  def NMatrix.slowAdd {m n : } {α : Type u_1} [Add α] (a b : NMatrix m n α) :
                                  NMatrix m n α
                                  Equations
                                  Instances For
                                    @[specialize #[]]
                                    def NMatrix.fastAdd {m n : } {α : Type u_1} [Add α] (X Y : NMatrix m n α) :
                                    NMatrix m n α
                                    Equations
                                    Instances For
                                      @[implicit_reducible]
                                      instance NMatrix.instAdd {m n : } {α : Type u_1} [Add α] :
                                      Add (NMatrix m n α)
                                      Equations
                                      def NMatrix.slowMul {l m n : } {α : Type u_1} [Mul α] [AddCommMonoid α] (a : NMatrix l m α) (b : NMatrix m n α) :
                                      NMatrix l n α
                                      Equations
                                      Instances For
                                        @[specialize #[]]
                                        def NMatrix.fastMul' {l m n : } {α : Type u_1} [Mul α] [AddCommMonoid α] (X : NMatrix l m α) (Y : NMatrix m n α) :
                                        NMatrix l n α
                                        Equations
                                        Instances For
                                          @[implicit_reducible, defaultInstance 100]
                                          instance NMatrix.instHMulOfMulOfAddCommMonoid {l m n : } {α : Type u_1} [Mul α] [AddCommMonoid α] :
                                          HMul (NMatrix l m α) (NMatrix m n α) (NMatrix l n α)
                                          Equations
                                          @[implicit_reducible]
                                          instance NMatrix.instMulOfAddCommMonoid {n : } {α : Type u_1} [Mul α] [AddCommMonoid α] :
                                          Mul (NMatrix n n α)
                                          Equations
                                          theorem NMatrix.add_def {m n : } {α : Type u_1} {X X' : NMatrix m n α} [Add α] :
                                          theorem NMatrix.mul_def {l m n : } {α : Type u_1} {X : NMatrix m n α} {Y : NMatrix n l α} [Mul α] [AddCommMonoid α] :
                                          @[simp]
                                          theorem NMatrix.add_apply {m n : } {α : Type u_1} {X X' : NMatrix m n α} [Add α] {i : Fin m} :
                                          (X + X') i = X i + X' i
                                          @[implicit_reducible]
                                          instance NMatrix.instAddCommMonoid {m n : } {α : Type u_1} [AddCommMonoid α] :
                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          @[simp]
                                          theorem NMatrix.sum_apply {m n : } {𝒮 : Type u_2} [AddCommMonoid 𝒮] {ι : Type u_3} {S : Finset ι} (f : ιNMatrix m n 𝒮) {x : Fin m} {y : Fin n} :
                                          (∑ iS, f i) x y = iS, (f i) x y
                                          @[simp]
                                          theorem NMatrix.asMatrix_add {m n : } {α : Type u_1} {X X' : NMatrix m n α} [Add α] :
                                          @[simp]
                                          theorem NMatrix.mul_coe {l m n : } {α : Type u_1} {X : NMatrix m n α} {Y : NMatrix n l α} [Mul α] [AddCommMonoid α] :
                                          ⇑(X * Y) = asMatrix X * asMatrix Y
                                          theorem NMatrix.asMatrix_mul {l m n : } {α : Type u_1} {X : NMatrix m n α} {Y : NMatrix n l α} [Mul α] [AddCommMonoid α] :
                                          theorem NMatrix.mul_assoc {l k m n : } {α : Type u_1} {X : NMatrix m n α} {Y : NMatrix n l α} {Z : NMatrix l k α} [NonUnitalSemiring α] :
                                          X * Y * Z = X * (Y * Z)
                                          theorem NMatrix.add_assoc {m n : } {α : Type u_1} {X X' : NMatrix m n α} [AddSemigroup α] {X'' : NMatrix m n α} :
                                          X + X' + X'' = X + (X' + X'')
                                          theorem NMatrix.add_comm {m n : } {α : Type u_1} {X X' : NMatrix m n α} [AddCommMonoid α] :
                                          X + X' = X' + X
                                          theorem NMatrix.add_mul {l m n : } {α : Type u_1} {X X' : NMatrix m n α} {Y : NMatrix n l α} [Semiring α] :
                                          (X + X') * Y = X * Y + X' * Y
                                          theorem NMatrix.mul_add {l m n : } {α : Type u_1} {X : NMatrix m n α} {Y Y' : NMatrix n l α} [Semiring α] :
                                          X * (Y + Y') = X * Y + X * Y'
                                          @[simp]
                                          theorem NMatrix.one_mul {m n : } {α : Type u_1} {X : NMatrix m n α} [Semiring α] :
                                          1 * X = X
                                          @[simp]
                                          theorem NMatrix.mul_one {m n : } {α : Type u_1} {X : NMatrix m n α} [Semiring α] :
                                          X * 1 = X
                                          @[simp]
                                          theorem NMatrix.zero_mul {l m n : } {α : Type u_1} {X : NMatrix m n α} [NonUnitalSemiring α] :
                                          0 * X = 0
                                          @[simp]
                                          theorem NMatrix.mul_zero {l m n : } {α : Type u_1} {X : NMatrix m n α} [NonUnitalSemiring α] :
                                          X * 0 = 0
                                          @[simp]
                                          theorem NMatrix.zero_add {m n : } {α : Type u_1} {X : NMatrix m n α} [NonUnitalSemiring α] :
                                          0 + X = X
                                          @[simp]
                                          theorem NMatrix.add_zero {m n : } {α : Type u_1} {X : NMatrix m n α} [NonUnitalSemiring α] :
                                          X + 0 = X
                                          @[implicit_reducible]
                                          instance NMatrix.instSemiring {n : } {α : Type u_2} [Semiring α] :
                                          Semiring (NMatrix n n α)
                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          @[implicit_reducible]
                                          Equations
                                          @[implicit_reducible]
                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          @[implicit_reducible]
                                          instance NMatrix.instOrderBot {m n : } {α : Type u_2} [OmegaCompletePartialOrder α] [OrderBot α] :
                                          OrderBot (NMatrix m n α)
                                          Equations
                                          theorem NMatrix.fromBlocks_mul {α : Type u_1} {l m n o p q : } (A : NMatrix n l α) (B : NMatrix n m α) (C : NMatrix o l α) (D : NMatrix o m α) (A' : NMatrix l p α) (B' : NMatrix l q α) (C' : NMatrix m p α) (D' : NMatrix m q α) [NonUnitalSemiring α] :
                                          NB[[A, B],[C, D]] * NB[[A', B'],[C', D']] = NB[[A * A' + B * C', A * B' + B * D'],[C * A' + D * C', C * B' + D * D']]
                                          theorem NMatrix.fromBlocks_add {α : Type u_1} {l m n o : } (A : NMatrix n l α) (B : NMatrix n m α) (C : NMatrix o l α) (D : NMatrix o m α) (A' : NMatrix n l α) (B' : NMatrix n m α) (C' : NMatrix o l α) (D' : NMatrix o m α) [Add α] :
                                          NB[[A, B],[C, D]] + NB[[A', B'],[C', D']] = NB[[A + A', B + B'],[C + C', D + D']]
                                          theorem NMatrix.fromBlocks_eq_one {α : Type u_1} {m n : } [Semiring α] :
                                          NB[[1, 0],[0, 1]] = 1
                                          @[simp]
                                          theorem NMatrix.fromBlocks_le_iff {α : Type u_1} {l m n o : } (A : NMatrix n l α) (B : NMatrix n m α) (C : NMatrix o l α) (D : NMatrix o m α) (A' : NMatrix n l α) (B' : NMatrix n m α) (C' : NMatrix o l α) (D' : NMatrix o m α) [OmegaCompletePartialOrder α] :
                                          NB[[A, B],[C, D]] NB[[A', B'],[C', D']] A A' B B' C C' D D'
                                          theorem NMatrix.fromBlocks_le {α : Type u_1} {l m n o : } (A : NMatrix n l α) (B : NMatrix n m α) (C : NMatrix o l α) (D : NMatrix o m α) (A' : NMatrix n l α) (B' : NMatrix n m α) (C' : NMatrix o l α) (D' : NMatrix o m α) [OmegaCompletePartialOrder α] (hA : A A') (hB : B B') (hC : C C') (hD : D D') :
                                          NB[[A, B],[C, D]] NB[[A', B'],[C', D']]
                                          @[simp]
                                          theorem NMatrix.ωSum_apply {m n : } {𝒮 : Type u_2} [AddCommMonoid 𝒮] {ι : Type u_3} [Countable ι] [OmegaCompletePartialOrder 𝒮] [OrderBot 𝒮] [IsPositiveOrderedAddMonoid 𝒮] (f : ιNMatrix m n 𝒮) {x : Fin m} {y : Fin n} :
                                          (ω∑ (i : ι), f i) x y = ω∑ (i : ι), (f i) x y