data.holor
⟷
Mathlib.Data.Holor
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -378,7 +378,7 @@ inductive CPRankMax [Mul α] [AddMonoid α] : ℕ → ∀ {ds}, Holor α ds →
theorem cprankMax_nil [Monoid α] [AddMonoid α] (x : Holor α nil) : CPRankMax 1 x :=
by
have h := CPRankMax.succ 0 x 0 (CPRankMax1.nil x) CPRankMax.zero
- rwa [add_zero x, zero_add] at h
+ rwa [add_zero x, zero_add] at h
#align holor.cprank_max_nil Holor.cprankMax_nil
-/
@@ -386,7 +386,7 @@ theorem cprankMax_nil [Monoid α] [AddMonoid α] (x : Holor α nil) : CPRankMax
theorem cprankMax_1 [Monoid α] [AddMonoid α] {x : Holor α ds} (h : CPRankMax1 x) : CPRankMax 1 x :=
by
have h' := CPRankMax.succ 0 x 0 h CPRankMax.zero
- rwa [zero_add, add_zero] at h'
+ rwa [zero_add, add_zero] at h'
#align holor.cprank_max_1 Holor.cprankMax_1
-/
@@ -457,7 +457,7 @@ theorem cprankMax_upper_bound [Ring α] : ∀ {ds}, ∀ x : Holor α ds, CPRankM
CPRankMax (Finset.card (Finset.range d) * Prod ds)
(∑ i in Finset.attach (Finset.range d),
unitVec d i.val ⊗ slice x i.val (mem_range.1 i.2)) :=
- by rwa [Finset.card_attach] at this
+ by rwa [Finset.card_attach] at this
rw [← sum_unit_vec_mul_slice x]
rw [h_dds_prod]
exact h_cprank_max_sum
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2018 Alexander Bentkamp. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Alexander Bentkamp
-/
-import Mathbin.Algebra.Module.Pi
-import Mathbin.Algebra.BigOperators.Basic
+import Algebra.Module.Pi
+import Algebra.BigOperators.Basic
#align_import data.holor from "leanprover-community/mathlib"@"0a0ec35061ed9960bf0e7ffb0335f44447b58977"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2018 Alexander Bentkamp. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Alexander Bentkamp
-
-! This file was ported from Lean 3 source module data.holor
-! leanprover-community/mathlib commit 0a0ec35061ed9960bf0e7ffb0335f44447b58977
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Algebra.Module.Pi
import Mathbin.Algebra.BigOperators.Basic
+#align_import data.holor from "leanprover-community/mathlib"@"0a0ec35061ed9960bf0e7ffb0335f44447b58977"
+
/-!
# Basic properties of holors
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -342,7 +342,7 @@ theorem sum_unitVec_mul_slice [Ring α] (x : Holor α (d :: ds)) :
x :=
by
apply slice_eq _ _ _
- ext (i hid)
+ ext i hid
rw [← slice_sum]
simp only [slice_unit_vec_mul hid]
rw [Finset.sum_eq_single (Subtype.mk i <| Finset.mem_range.2 hid)]
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -182,7 +182,6 @@ def mul [s : Mul α] (x : Holor α ds₁) (y : Holor α ds₂) : Holor α (ds₁
#align holor.mul Holor.mul
-/
--- mathport name: «expr ⊗ »
local infixl:70 " ⊗ " => mul
#print Holor.cast_type /-
@@ -204,6 +203,7 @@ def assocLeft : Holor α (ds₁ ++ (ds₂ ++ ds₃)) → Holor α (ds₁ ++ ds
#align holor.assoc_left Holor.assocLeft
-/
+#print Holor.mul_assoc0 /-
theorem mul_assoc0 [Semigroup α] (x : Holor α ds₁) (y : Holor α ds₂) (z : Holor α ds₃) :
x ⊗ y ⊗ z = (x ⊗ (y ⊗ z)).assocLeft :=
funext fun t : HolorIndex (ds₁ ++ ds₂ ++ ds₃) =>
@@ -216,35 +216,48 @@ theorem mul_assoc0 [Semigroup α] (x : Holor α ds₁) (y : Holor α ds₂) (z :
rfl
rw [append_assoc]
#align holor.mul_assoc0 Holor.mul_assoc0
+-/
+#print Holor.mul_assoc /-
theorem mul_assoc [Semigroup α] (x : Holor α ds₁) (y : Holor α ds₂) (z : Holor α ds₃) :
HEq (mul (mul x y) z) (mul x (mul y z)) := by simp [cast_hEq, mul_assoc0, assoc_left]
#align holor.mul_assoc Holor.mul_assoc
+-/
+#print Holor.mul_left_distrib /-
theorem mul_left_distrib [Distrib α] (x : Holor α ds₁) (y : Holor α ds₂) (z : Holor α ds₂) :
x ⊗ (y + z) = x ⊗ y + x ⊗ z :=
funext fun t =>
left_distrib (x (HolorIndex.take t)) (y (HolorIndex.drop t)) (z (HolorIndex.drop t))
#align holor.mul_left_distrib Holor.mul_left_distrib
+-/
+#print Holor.mul_right_distrib /-
theorem mul_right_distrib [Distrib α] (x : Holor α ds₁) (y : Holor α ds₁) (z : Holor α ds₂) :
(x + y) ⊗ z = x ⊗ z + y ⊗ z :=
funext fun t => add_mul (x (HolorIndex.take t)) (y (HolorIndex.take t)) (z (HolorIndex.drop t))
#align holor.mul_right_distrib Holor.mul_right_distrib
+-/
+#print Holor.zero_mul /-
@[simp]
theorem zero_mul {α : Type} [Ring α] (x : Holor α ds₂) : (0 : Holor α ds₁) ⊗ x = 0 :=
funext fun t => MulZeroClass.zero_mul (x (HolorIndex.drop t))
#align holor.zero_mul Holor.zero_mul
+-/
+#print Holor.mul_zero /-
@[simp]
theorem mul_zero {α : Type} [Ring α] (x : Holor α ds₁) : x ⊗ (0 : Holor α ds₂) = 0 :=
funext fun t => MulZeroClass.mul_zero (x (HolorIndex.take t))
#align holor.mul_zero Holor.mul_zero
+-/
+#print Holor.mul_scalar_mul /-
theorem mul_scalar_mul [Monoid α] (x : Holor α []) (y : Holor α ds) :
x ⊗ y = x ⟨[], Forall₂.nil⟩ • y := by simp [mul, SMul.smul, HolorIndex.take, HolorIndex.drop]
#align holor.mul_scalar_mul Holor.mul_scalar_mul
+-/
#print Holor.slice /-
-- holor slices
@@ -285,12 +298,14 @@ theorem slice_eq (x : Holor α (d :: ds)) (y : Holor α (d :: ds)) (h : slice x
#align holor.slice_eq Holor.slice_eq
-/
+#print Holor.slice_unitVec_mul /-
theorem slice_unitVec_mul [Ring α] {i : ℕ} {j : ℕ} (hid : i < d) (x : Holor α ds) :
slice (unitVec d j ⊗ x) i hid = if i = j then x else 0 :=
funext fun t : HolorIndex ds =>
if h : i = j then by simp [slice, mul, HolorIndex.take, unit_vec, HolorIndex.drop, h]
else by simp [slice, mul, HolorIndex.take, unit_vec, HolorIndex.drop, h] <;> rfl
#align holor.slice_unit_vec_mul Holor.slice_unitVec_mul
+-/
#print Holor.slice_add /-
theorem slice_add [Add α] (i : ℕ) (hid : i < d) (x : Holor α (d :: ds)) (y : Holor α (d :: ds)) :
@@ -305,6 +320,7 @@ theorem slice_zero [Zero α] (i : ℕ) (hid : i < d) : slice (0 : Holor α (d ::
#align holor.slice_zero Holor.slice_zero
-/
+#print Holor.slice_sum /-
theorem slice_sum [AddCommMonoid α] {β : Type} (i : ℕ) (hid : i < d) (s : Finset β)
(f : β → Holor α (d :: ds)) : ∑ x in s, slice (f x) i hid = slice (∑ x in s, f x) i hid :=
by
@@ -314,7 +330,9 @@ theorem slice_sum [AddCommMonoid α] {β : Type} (i : ℕ) (hid : i < d) (s : Fi
· intro _ _ h_not_in ih
rw [Finset.sum_insert h_not_in, ih, slice_add, Finset.sum_insert h_not_in]
#align holor.slice_sum Holor.slice_sum
+-/
+#print Holor.sum_unitVec_mul_slice /-
/-- The original holor can be recovered from its slices by multiplying with unit vectors and
summing up. -/
@[simp]
@@ -336,6 +354,7 @@ theorem sum_unitVec_mul_slice [Ring α] (x : Holor α (d :: ds)) :
exfalso
exact absurd (Finset.mem_attach _ _) hid'
#align holor.sum_unit_vec_mul_slice Holor.sum_unitVec_mul_slice
+-/
#print Holor.CPRankMax1 /-
-- CP rank
@@ -358,18 +377,23 @@ inductive CPRankMax [Mul α] [AddMonoid α] : ℕ → ∀ {ds}, Holor α ds →
#align holor.cprank_max Holor.CPRankMax
-/
+#print Holor.cprankMax_nil /-
theorem cprankMax_nil [Monoid α] [AddMonoid α] (x : Holor α nil) : CPRankMax 1 x :=
by
have h := CPRankMax.succ 0 x 0 (CPRankMax1.nil x) CPRankMax.zero
rwa [add_zero x, zero_add] at h
#align holor.cprank_max_nil Holor.cprankMax_nil
+-/
+#print Holor.cprankMax_1 /-
theorem cprankMax_1 [Monoid α] [AddMonoid α] {x : Holor α ds} (h : CPRankMax1 x) : CPRankMax 1 x :=
by
have h' := CPRankMax.succ 0 x 0 h CPRankMax.zero
rwa [zero_add, add_zero] at h'
#align holor.cprank_max_1 Holor.cprankMax_1
+-/
+#print Holor.cprankMax_add /-
theorem cprankMax_add [Monoid α] [AddMonoid α] :
∀ {m : ℕ} {n : ℕ} {x : Holor α ds} {y : Holor α ds},
CPRankMax m x → CPRankMax n y → CPRankMax (m + n) (x + y)
@@ -381,7 +405,9 @@ theorem cprankMax_add [Monoid α] [AddMonoid α] :
· assumption
· exact cprank_max_add hx₂ hy
#align holor.cprank_max_add Holor.cprankMax_add
+-/
+#print Holor.cprankMax_mul /-
theorem cprankMax_mul [Ring α] :
∀ (n : ℕ) (x : Holor α [d]) (y : Holor α ds), CPRankMax n y → CPRankMax n (x ⊗ y)
| 0, x, _, cprank_max.zero => by simp [MulZeroClass.mul_zero x, cprank_max.zero]
@@ -393,7 +419,9 @@ theorem cprankMax_mul [Ring α] :
· exact cprank_max_1 (cprank_max1.cons _ _ hy₁)
· exact cprank_max_mul k x y₂ hy₂
#align holor.cprank_max_mul Holor.cprankMax_mul
+-/
+#print Holor.cprankMax_sum /-
theorem cprankMax_sum [Ring α] {β} {n : ℕ} (s : Finset β) (f : β → Holor α ds) :
(∀ x ∈ s, CPRankMax n (f x)) → CPRankMax (s.card * n) (∑ x in s, f x) :=
letI := Classical.decEq β
@@ -410,7 +438,9 @@ theorem cprankMax_sum [Ring α] {β} {n : ℕ} (s : Finset β) (f : β → Holor
simp only [h_cprank, Finset.mem_insert_of_mem, h_x_in_s]
exact cprank_max_add (h_cprank x (Finset.mem_insert_self x s)) ih')
#align holor.cprank_max_sum Holor.cprankMax_sum
+-/
+#print Holor.cprankMax_upper_bound /-
theorem cprankMax_upper_bound [Ring α] : ∀ {ds}, ∀ x : Holor α ds, CPRankMax ds.Prod x
| [], x => cprankMax_nil x
| d :: ds, x =>
@@ -435,6 +465,7 @@ theorem cprankMax_upper_bound [Ring α] : ∀ {ds}, ∀ x : Holor α ds, CPRankM
rw [h_dds_prod]
exact h_cprank_max_sum
#align holor.cprank_max_upper_bound Holor.cprankMax_upper_bound
+-/
#print Holor.cprank /-
/-- The CP rank of a holor `x`: the smallest N such that
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3e83f0fa4391c8740f7d773a7a9b74e311ae2a3
@@ -306,7 +306,7 @@ theorem slice_zero [Zero α] (i : ℕ) (hid : i < d) : slice (0 : Holor α (d ::
-/
theorem slice_sum [AddCommMonoid α] {β : Type} (i : ℕ) (hid : i < d) (s : Finset β)
- (f : β → Holor α (d :: ds)) : (∑ x in s, slice (f x) i hid) = slice (∑ x in s, f x) i hid :=
+ (f : β → Holor α (d :: ds)) : ∑ x in s, slice (f x) i hid = slice (∑ x in s, f x) i hid :=
by
letI := Classical.decEq β
refine' Finset.induction_on s _ _
@@ -319,8 +319,8 @@ theorem slice_sum [AddCommMonoid α] {β : Type} (i : ℕ) (hid : i < d) (s : Fi
summing up. -/
@[simp]
theorem sum_unitVec_mul_slice [Ring α] (x : Holor α (d :: ds)) :
- (∑ i in (Finset.range d).attach,
- unitVec d i ⊗ slice x i (Nat.succ_le_of_lt (Finset.mem_range.1 i.Prop))) =
+ ∑ i in (Finset.range d).attach,
+ unitVec d i ⊗ slice x i (Nat.succ_le_of_lt (Finset.mem_range.1 i.Prop)) =
x :=
by
apply slice_eq _ _ _
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -282,7 +282,6 @@ theorem slice_eq (x : Holor α (d :: ds)) (y : Holor α (d :: ds)) (h : slice x
x ⟨i :: is, _⟩ = slice x i hid ⟨is, hisds⟩ := congr_arg (fun t => x t) (Subtype.eq rfl)
_ = slice y i hid ⟨is, hisds⟩ := by rw [h]
_ = y ⟨i :: is, _⟩ := congr_arg (fun t => y t) (Subtype.eq rfl)
-
#align holor.slice_eq Holor.slice_eq
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -133,10 +133,10 @@ instance [Neg α] : Neg (Holor α ds) :=
⟨fun a t => -a t⟩
instance [AddSemigroup α] : AddSemigroup (Holor α ds) := by
- refine_struct { add := (· + ·).. } <;> pi_instance_derive_field
+ refine_struct { add := (· + ·) .. } <;> pi_instance_derive_field
instance [AddCommSemigroup α] : AddCommSemigroup (Holor α ds) := by
- refine_struct { add := (· + ·).. } <;> pi_instance_derive_field
+ refine_struct { add := (· + ·) .. } <;> pi_instance_derive_field
instance [AddMonoid α] : AddMonoid (Holor α ds) := by
refine_struct
@@ -330,7 +330,7 @@ theorem sum_unitVec_mul_slice [Ring α] (x : Holor α (d :: ds)) :
simp only [slice_unit_vec_mul hid]
rw [Finset.sum_eq_single (Subtype.mk i <| Finset.mem_range.2 hid)]
· simp
- · intro (b : { x // x ∈ Finset.range d })(hb : b ∈ (Finset.range d).attach)(hbi : b ≠ ⟨i, _⟩)
+ · intro (b : { x // x ∈ Finset.range d }) (hb : b ∈ (Finset.range d).attach) (hbi : b ≠ ⟨i, _⟩)
have hbi' : i ≠ b := by simpa only [Ne.def, Subtype.ext_iff, Subtype.coe_mk] using hbi.symm
simp [hbi']
· intro (hid' : Subtype.mk i _ ∉ Finset.attach (Finset.range d))
@@ -362,13 +362,13 @@ inductive CPRankMax [Mul α] [AddMonoid α] : ℕ → ∀ {ds}, Holor α ds →
theorem cprankMax_nil [Monoid α] [AddMonoid α] (x : Holor α nil) : CPRankMax 1 x :=
by
have h := CPRankMax.succ 0 x 0 (CPRankMax1.nil x) CPRankMax.zero
- rwa [add_zero x, zero_add] at h
+ rwa [add_zero x, zero_add] at h
#align holor.cprank_max_nil Holor.cprankMax_nil
theorem cprankMax_1 [Monoid α] [AddMonoid α] {x : Holor α ds} (h : CPRankMax1 x) : CPRankMax 1 x :=
by
have h' := CPRankMax.succ 0 x 0 h CPRankMax.zero
- rwa [zero_add, add_zero] at h'
+ rwa [zero_add, add_zero] at h'
#align holor.cprank_max_1 Holor.cprankMax_1
theorem cprankMax_add [Monoid α] [AddMonoid α] :
@@ -400,14 +400,14 @@ theorem cprankMax_sum [Ring α] {β} {n : ℕ} (s : Finset β) (f : β → Holor
letI := Classical.decEq β
Finset.induction_on s (by simp [cprank_max.zero])
(by
- intro x s(h_x_notin_s : x ∉ s)ih h_cprank
+ intro x s (h_x_notin_s : x ∉ s) ih h_cprank
simp only [Finset.sum_insert h_x_notin_s, Finset.card_insert_of_not_mem h_x_notin_s]
rw [Nat.right_distrib]
simp only [Nat.one_mul, Nat.add_comm]
have ih' : cprank_max (Finset.card s * n) (∑ x in s, f x) :=
by
apply ih
- intro (x : β)(h_x_in_s : x ∈ s)
+ intro (x : β) (h_x_in_s : x ∈ s)
simp only [h_cprank, Finset.mem_insert_of_mem, h_x_in_s]
exact cprank_max_add (h_cprank x (Finset.mem_insert_self x s)) ih')
#align holor.cprank_max_sum Holor.cprankMax_sum
@@ -431,7 +431,7 @@ theorem cprankMax_upper_bound [Ring α] : ∀ {ds}, ∀ x : Holor α ds, CPRankM
CPRankMax (Finset.card (Finset.range d) * Prod ds)
(∑ i in Finset.attach (Finset.range d),
unitVec d i.val ⊗ slice x i.val (mem_range.1 i.2)) :=
- by rwa [Finset.card_attach] at this
+ by rwa [Finset.card_attach] at this
rw [← sum_unit_vec_mul_slice x]
rw [h_dds_prod]
exact h_cprank_max_sum
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -43,7 +43,7 @@ universe u
open List
-open BigOperators
+open scoped BigOperators
#print HolorIndex /-
/-- `holor_index ds` is the type of valid index tuples used to identify an entry of a holor
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -204,12 +204,6 @@ def assocLeft : Holor α (ds₁ ++ (ds₂ ++ ds₃)) → Holor α (ds₁ ++ ds
#align holor.assoc_left Holor.assocLeft
-/
-/- warning: holor.mul_assoc0 -> Holor.mul_assoc0 is a dubious translation:
-lean 3 declaration is
- forall {α : Type} {ds₁ : List.{0} Nat} {ds₂ : List.{0} Nat} {ds₃ : List.{0} Nat} [_inst_1 : Semigroup.{0} α] (x : Holor.{0} α ds₁) (y : Holor.{0} α ds₂) (z : Holor.{0} α ds₃), Eq.{1} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂) ds₃)) (Holor.mul α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂) ds₃ (Semigroup.toHasMul.{0} α _inst_1) (Holor.mul α ds₁ ds₂ (Semigroup.toHasMul.{0} α _inst_1) x y) z) (Holor.assocLeft α ds₁ ds₂ ds₃ (Holor.mul α ds₁ (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₂ ds₃) (Semigroup.toHasMul.{0} α _inst_1) x (Holor.mul α ds₂ ds₃ (Semigroup.toHasMul.{0} α _inst_1) y z)))
-but is expected to have type
- forall {α : Type} {ds₁ : List.{0} Nat} {ds₂ : List.{0} Nat} {ds₃ : List.{0} Nat} [_inst_1 : Semigroup.{0} α] (x : Holor.{0} α ds₁) (y : Holor.{0} α ds₂) (z : Holor.{0} α ds₃), Eq.{1} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂) ds₃)) (Holor.mul α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂) ds₃ (Semigroup.toMul.{0} α _inst_1) (Holor.mul α ds₁ ds₂ (Semigroup.toMul.{0} α _inst_1) x y) z) (Holor.assocLeft α ds₁ ds₂ ds₃ (Holor.mul α ds₁ (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₂ ds₃) (Semigroup.toMul.{0} α _inst_1) x (Holor.mul α ds₂ ds₃ (Semigroup.toMul.{0} α _inst_1) y z)))
-Case conversion may be inaccurate. Consider using '#align holor.mul_assoc0 Holor.mul_assoc0ₓ'. -/
theorem mul_assoc0 [Semigroup α] (x : Holor α ds₁) (y : Holor α ds₂) (z : Holor α ds₃) :
x ⊗ y ⊗ z = (x ⊗ (y ⊗ z)).assocLeft :=
funext fun t : HolorIndex (ds₁ ++ ds₂ ++ ds₃) =>
@@ -223,67 +217,31 @@ theorem mul_assoc0 [Semigroup α] (x : Holor α ds₁) (y : Holor α ds₂) (z :
rw [append_assoc]
#align holor.mul_assoc0 Holor.mul_assoc0
-/- warning: holor.mul_assoc -> Holor.mul_assoc is a dubious translation:
-lean 3 declaration is
- forall {α : Type} {ds₁ : List.{0} Nat} {ds₂ : List.{0} Nat} {ds₃ : List.{0} Nat} [_inst_1 : Semigroup.{0} α] (x : Holor.{0} α ds₁) (y : Holor.{0} α ds₂) (z : Holor.{0} α ds₃), HEq.{1} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂) ds₃)) (Holor.mul α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂) ds₃ (Semigroup.toHasMul.{0} α _inst_1) (Holor.mul α ds₁ ds₂ (Semigroup.toHasMul.{0} α _inst_1) x y) z) (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₂ ds₃))) (Holor.mul α ds₁ (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₂ ds₃) (Semigroup.toHasMul.{0} α _inst_1) x (Holor.mul α ds₂ ds₃ (Semigroup.toHasMul.{0} α _inst_1) y z))
-but is expected to have type
- forall {α : Type} {ds₁ : List.{0} Nat} {ds₂ : List.{0} Nat} {ds₃ : List.{0} Nat} [_inst_1 : Semigroup.{0} α] (x : Holor.{0} α ds₁) (y : Holor.{0} α ds₂) (z : Holor.{0} α ds₃), HEq.{1} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂) ds₃)) (Holor.mul α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂) ds₃ (Semigroup.toMul.{0} α _inst_1) (Holor.mul α ds₁ ds₂ (Semigroup.toMul.{0} α _inst_1) x y) z) (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₂ ds₃))) (Holor.mul α ds₁ (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₂ ds₃) (Semigroup.toMul.{0} α _inst_1) x (Holor.mul α ds₂ ds₃ (Semigroup.toMul.{0} α _inst_1) y z))
-Case conversion may be inaccurate. Consider using '#align holor.mul_assoc Holor.mul_assocₓ'. -/
theorem mul_assoc [Semigroup α] (x : Holor α ds₁) (y : Holor α ds₂) (z : Holor α ds₃) :
HEq (mul (mul x y) z) (mul x (mul y z)) := by simp [cast_hEq, mul_assoc0, assoc_left]
#align holor.mul_assoc Holor.mul_assoc
-/- warning: holor.mul_left_distrib -> Holor.mul_left_distrib is a dubious translation:
-lean 3 declaration is
- forall {α : Type} {ds₁ : List.{0} Nat} {ds₂ : List.{0} Nat} [_inst_1 : Distrib.{0} α] (x : Holor.{0} α ds₁) (y : Holor.{0} α ds₂) (z : Holor.{0} α ds₂), Eq.{1} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂)) (Holor.mul α ds₁ ds₂ (Distrib.toHasMul.{0} α _inst_1) x (HAdd.hAdd.{0, 0, 0} (Holor.{0} α ds₂) (Holor.{0} α ds₂) (Holor.{0} α ds₂) (instHAdd.{0} (Holor.{0} α ds₂) (Holor.hasAdd α ds₂ (Distrib.toHasAdd.{0} α _inst_1))) y z)) (HAdd.hAdd.{0, 0, 0} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂)) (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂)) (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂)) (instHAdd.{0} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂)) (Holor.hasAdd α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂) (Distrib.toHasAdd.{0} α _inst_1))) (Holor.mul α ds₁ ds₂ (Distrib.toHasMul.{0} α _inst_1) x y) (Holor.mul α ds₁ ds₂ (Distrib.toHasMul.{0} α _inst_1) x z))
-but is expected to have type
- forall {α : Type} {ds₁ : List.{0} Nat} {ds₂ : List.{0} Nat} [_inst_1 : Distrib.{0} α] (x : Holor.{0} α ds₁) (y : Holor.{0} α ds₂) (z : Holor.{0} α ds₂), Eq.{1} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂)) (Holor.mul α ds₁ ds₂ (Distrib.toMul.{0} α _inst_1) x (HAdd.hAdd.{0, 0, 0} (Holor.{0} α ds₂) (Holor.{0} α ds₂) (Holor.{0} α ds₂) (instHAdd.{0} (Holor.{0} α ds₂) (Holor.instAddHolor α ds₂ (Distrib.toAdd.{0} α _inst_1))) y z)) (HAdd.hAdd.{0, 0, 0} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂)) (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂)) (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂)) (instHAdd.{0} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂)) (Holor.instAddHolor α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂) (Distrib.toAdd.{0} α _inst_1))) (Holor.mul α ds₁ ds₂ (Distrib.toMul.{0} α _inst_1) x y) (Holor.mul α ds₁ ds₂ (Distrib.toMul.{0} α _inst_1) x z))
-Case conversion may be inaccurate. Consider using '#align holor.mul_left_distrib Holor.mul_left_distribₓ'. -/
theorem mul_left_distrib [Distrib α] (x : Holor α ds₁) (y : Holor α ds₂) (z : Holor α ds₂) :
x ⊗ (y + z) = x ⊗ y + x ⊗ z :=
funext fun t =>
left_distrib (x (HolorIndex.take t)) (y (HolorIndex.drop t)) (z (HolorIndex.drop t))
#align holor.mul_left_distrib Holor.mul_left_distrib
-/- warning: holor.mul_right_distrib -> Holor.mul_right_distrib is a dubious translation:
-lean 3 declaration is
- forall {α : Type} {ds₁ : List.{0} Nat} {ds₂ : List.{0} Nat} [_inst_1 : Distrib.{0} α] (x : Holor.{0} α ds₁) (y : Holor.{0} α ds₁) (z : Holor.{0} α ds₂), Eq.{1} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂)) (Holor.mul α ds₁ ds₂ (Distrib.toHasMul.{0} α _inst_1) (HAdd.hAdd.{0, 0, 0} (Holor.{0} α ds₁) (Holor.{0} α ds₁) (Holor.{0} α ds₁) (instHAdd.{0} (Holor.{0} α ds₁) (Holor.hasAdd α ds₁ (Distrib.toHasAdd.{0} α _inst_1))) x y) z) (HAdd.hAdd.{0, 0, 0} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂)) (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂)) (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂)) (instHAdd.{0} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂)) (Holor.hasAdd α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂) (Distrib.toHasAdd.{0} α _inst_1))) (Holor.mul α ds₁ ds₂ (Distrib.toHasMul.{0} α _inst_1) x z) (Holor.mul α ds₁ ds₂ (Distrib.toHasMul.{0} α _inst_1) y z))
-but is expected to have type
- forall {α : Type} {ds₁ : List.{0} Nat} {ds₂ : List.{0} Nat} [_inst_1 : Distrib.{0} α] (x : Holor.{0} α ds₁) (y : Holor.{0} α ds₁) (z : Holor.{0} α ds₂), Eq.{1} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂)) (Holor.mul α ds₁ ds₂ (Distrib.toMul.{0} α _inst_1) (HAdd.hAdd.{0, 0, 0} (Holor.{0} α ds₁) (Holor.{0} α ds₁) (Holor.{0} α ds₁) (instHAdd.{0} (Holor.{0} α ds₁) (Holor.instAddHolor α ds₁ (Distrib.toAdd.{0} α _inst_1))) x y) z) (HAdd.hAdd.{0, 0, 0} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂)) (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂)) (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂)) (instHAdd.{0} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂)) (Holor.instAddHolor α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂) (Distrib.toAdd.{0} α _inst_1))) (Holor.mul α ds₁ ds₂ (Distrib.toMul.{0} α _inst_1) x z) (Holor.mul α ds₁ ds₂ (Distrib.toMul.{0} α _inst_1) y z))
-Case conversion may be inaccurate. Consider using '#align holor.mul_right_distrib Holor.mul_right_distribₓ'. -/
theorem mul_right_distrib [Distrib α] (x : Holor α ds₁) (y : Holor α ds₁) (z : Holor α ds₂) :
(x + y) ⊗ z = x ⊗ z + y ⊗ z :=
funext fun t => add_mul (x (HolorIndex.take t)) (y (HolorIndex.take t)) (z (HolorIndex.drop t))
#align holor.mul_right_distrib Holor.mul_right_distrib
-/- warning: holor.zero_mul -> Holor.zero_mul is a dubious translation:
-lean 3 declaration is
- forall {ds₁ : List.{0} Nat} {ds₂ : List.{0} Nat} {α : Type} [_inst_1 : Ring.{0} α] (x : Holor.{0} α ds₂), Eq.{1} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂)) (Holor.mul α ds₁ ds₂ (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (OfNat.ofNat.{0} (Holor.{0} α ds₁) 0 (OfNat.mk.{0} (Holor.{0} α ds₁) 0 (Zero.zero.{0} (Holor.{0} α ds₁) (Holor.hasZero α ds₁ (MulZeroClass.toHasZero.{0} α (NonUnitalNonAssocSemiring.toMulZeroClass.{0} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))))))))) x) (OfNat.ofNat.{0} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂)) 0 (OfNat.mk.{0} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂)) 0 (Zero.zero.{0} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂)) (Holor.hasZero α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂) (MulZeroClass.toHasZero.{0} α (NonUnitalNonAssocSemiring.toMulZeroClass.{0} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1)))))))))
-but is expected to have type
- forall {ds₁ : List.{0} Nat} {ds₂ : List.{0} Nat} {α : Type} [_inst_1 : Ring.{0} α] (x : Holor.{0} α ds₂), Eq.{1} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂)) (Holor.mul α ds₁ ds₂ (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) (OfNat.ofNat.{0} (Holor.{0} α ds₁) 0 (Zero.toOfNat0.{0} (Holor.{0} α ds₁) (Holor.instZeroHolor α ds₁ (MonoidWithZero.toZero.{0} α (Semiring.toMonoidWithZero.{0} α (Ring.toSemiring.{0} α _inst_1)))))) x) (OfNat.ofNat.{0} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂)) 0 (Zero.toOfNat0.{0} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂)) (Holor.instZeroHolor α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂) (MonoidWithZero.toZero.{0} α (Semiring.toMonoidWithZero.{0} α (Ring.toSemiring.{0} α _inst_1))))))
-Case conversion may be inaccurate. Consider using '#align holor.zero_mul Holor.zero_mulₓ'. -/
@[simp]
theorem zero_mul {α : Type} [Ring α] (x : Holor α ds₂) : (0 : Holor α ds₁) ⊗ x = 0 :=
funext fun t => MulZeroClass.zero_mul (x (HolorIndex.drop t))
#align holor.zero_mul Holor.zero_mul
-/- warning: holor.mul_zero -> Holor.mul_zero is a dubious translation:
-lean 3 declaration is
- forall {ds₁ : List.{0} Nat} {ds₂ : List.{0} Nat} {α : Type} [_inst_1 : Ring.{0} α] (x : Holor.{0} α ds₁), Eq.{1} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂)) (Holor.mul α ds₁ ds₂ (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) x (OfNat.ofNat.{0} (Holor.{0} α ds₂) 0 (OfNat.mk.{0} (Holor.{0} α ds₂) 0 (Zero.zero.{0} (Holor.{0} α ds₂) (Holor.hasZero α ds₂ (MulZeroClass.toHasZero.{0} α (NonUnitalNonAssocSemiring.toMulZeroClass.{0} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1)))))))))) (OfNat.ofNat.{0} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂)) 0 (OfNat.mk.{0} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂)) 0 (Zero.zero.{0} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂)) (Holor.hasZero α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) ds₁ ds₂) (MulZeroClass.toHasZero.{0} α (NonUnitalNonAssocSemiring.toMulZeroClass.{0} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1)))))))))
-but is expected to have type
- forall {ds₁ : List.{0} Nat} {ds₂ : List.{0} Nat} {α : Type} [_inst_1 : Ring.{0} α] (x : Holor.{0} α ds₁), Eq.{1} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂)) (Holor.mul α ds₁ ds₂ (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) x (OfNat.ofNat.{0} (Holor.{0} α ds₂) 0 (Zero.toOfNat0.{0} (Holor.{0} α ds₂) (Holor.instZeroHolor α ds₂ (MonoidWithZero.toZero.{0} α (Semiring.toMonoidWithZero.{0} α (Ring.toSemiring.{0} α _inst_1))))))) (OfNat.ofNat.{0} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂)) 0 (Zero.toOfNat0.{0} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂)) (Holor.instZeroHolor α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) ds₁ ds₂) (MonoidWithZero.toZero.{0} α (Semiring.toMonoidWithZero.{0} α (Ring.toSemiring.{0} α _inst_1))))))
-Case conversion may be inaccurate. Consider using '#align holor.mul_zero Holor.mul_zeroₓ'. -/
@[simp]
theorem mul_zero {α : Type} [Ring α] (x : Holor α ds₁) : x ⊗ (0 : Holor α ds₂) = 0 :=
funext fun t => MulZeroClass.mul_zero (x (HolorIndex.take t))
#align holor.mul_zero Holor.mul_zero
-/- warning: holor.mul_scalar_mul -> Holor.mul_scalar_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type} {ds : List.{0} Nat} [_inst_1 : Monoid.{0} α] (x : Holor.{0} α (List.nil.{0} Nat)) (y : Holor.{0} α ds), Eq.{1} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (List.nil.{0} Nat) ds)) (Holor.mul α (List.nil.{0} Nat) ds (MulOneClass.toHasMul.{0} α (Monoid.toMulOneClass.{0} α _inst_1)) x y) (SMul.smul.{0, 0} α (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (List.nil.{0} Nat) ds)) (Holor.hasSmul α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (List.nil.{0} Nat) ds) (MulOneClass.toHasMul.{0} α (Monoid.toMulOneClass.{0} α _inst_1))) (x (Subtype.mk.{1} (List.{0} Nat) (fun (is : List.{0} Nat) => List.Forall₂.{0, 0} Nat Nat (LT.lt.{0} Nat Nat.hasLt) is (List.nil.{0} Nat)) (List.nil.{0} Nat) (List.Forall₂.nil.{0, 0} Nat Nat (LT.lt.{0} Nat Nat.hasLt)))) y)
-but is expected to have type
- forall {α : Type} {ds : List.{0} Nat} [_inst_1 : Monoid.{0} α] (x : Holor.{0} α (List.nil.{0} Nat)) (y : Holor.{0} α ds), Eq.{1} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) (List.nil.{0} Nat) ds)) (Holor.mul α (List.nil.{0} Nat) ds (MulOneClass.toMul.{0} α (Monoid.toMulOneClass.{0} α _inst_1)) x y) (HSMul.hSMul.{0, 0, 0} α (Holor.{0} α ds) (Holor.{0} α ds) (instHSMul.{0, 0} α (Holor.{0} α ds) (Holor.instSMulHolor α ds (MulOneClass.toMul.{0} α (Monoid.toMulOneClass.{0} α _inst_1)))) (x (Subtype.mk.{1} (List.{0} Nat) (fun (is : List.{0} Nat) => List.Forall₂.{0, 0} Nat Nat (fun (x._@.Mathlib.Data.Holor._hyg.27 : Nat) (x._@.Mathlib.Data.Holor._hyg.29 : Nat) => LT.lt.{0} Nat instLTNat x._@.Mathlib.Data.Holor._hyg.27 x._@.Mathlib.Data.Holor._hyg.29) is (List.nil.{0} Nat)) (List.nil.{0} Nat) (List.Forall₂.nil.{0, 0} Nat Nat (fun (x._@.Mathlib.Data.Holor._hyg.27 : Nat) (x._@.Mathlib.Data.Holor._hyg.29 : Nat) => LT.lt.{0} Nat instLTNat x._@.Mathlib.Data.Holor._hyg.27 x._@.Mathlib.Data.Holor._hyg.29)))) y)
-Case conversion may be inaccurate. Consider using '#align holor.mul_scalar_mul Holor.mul_scalar_mulₓ'. -/
theorem mul_scalar_mul [Monoid α] (x : Holor α []) (y : Holor α ds) :
x ⊗ y = x ⟨[], Forall₂.nil⟩ • y := by simp [mul, SMul.smul, HolorIndex.take, HolorIndex.drop]
#align holor.mul_scalar_mul Holor.mul_scalar_mul
@@ -328,12 +286,6 @@ theorem slice_eq (x : Holor α (d :: ds)) (y : Holor α (d :: ds)) (h : slice x
#align holor.slice_eq Holor.slice_eq
-/
-/- warning: holor.slice_unit_vec_mul -> Holor.slice_unitVec_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] {i : Nat} {j : Nat} (hid : LT.lt.{0} Nat Nat.hasLt i d) (x : Holor.{0} α ds), Eq.{1} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) (Holor.slice α d (List.append.{0} Nat (List.nil.{0} Nat) ds) (Holor.mul α (List.cons.{0} Nat d (List.nil.{0} Nat)) ds (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (Holor.unitVec α (Ring.toMonoid.{0} α _inst_1) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (AddCommGroupWithOne.toAddGroupWithOne.{0} α (Ring.toAddCommGroupWithOne.{0} α _inst_1)))) d j) x) i hid) (ite.{1} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) (Eq.{1} Nat i j) (Nat.decidableEq i j) x (OfNat.ofNat.{0} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) 0 (OfNat.mk.{0} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) 0 (Zero.zero.{0} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) (Holor.hasZero α (List.append.{0} Nat (List.nil.{0} Nat) ds) (MulZeroClass.toHasZero.{0} α (NonUnitalNonAssocSemiring.toMulZeroClass.{0} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))))))))))
-but is expected to have type
- forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] {i : Nat} {j : Nat} (hid : LT.lt.{0} Nat instLTNat i d) (x : Holor.{0} α ds), Eq.{1} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) (Holor.slice α d (List.append.{0} Nat (List.nil.{0} Nat) ds) (Holor.mul α (List.cons.{0} Nat d (List.nil.{0} Nat)) ds (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) (Holor.unitVec α (MonoidWithZero.toMonoid.{0} α (Semiring.toMonoidWithZero.{0} α (Ring.toSemiring.{0} α _inst_1))) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (Ring.toAddGroupWithOne.{0} α _inst_1))) d j) x) i hid) (ite.{1} (Holor.{0} α ds) (Eq.{1} Nat i j) (instDecidableEqNat i j) x (OfNat.ofNat.{0} (Holor.{0} α ds) 0 (Zero.toOfNat0.{0} (Holor.{0} α ds) (Holor.instZeroHolor α ds (MonoidWithZero.toZero.{0} α (Semiring.toMonoidWithZero.{0} α (Ring.toSemiring.{0} α _inst_1)))))))
-Case conversion may be inaccurate. Consider using '#align holor.slice_unit_vec_mul Holor.slice_unitVec_mulₓ'. -/
theorem slice_unitVec_mul [Ring α] {i : ℕ} {j : ℕ} (hid : i < d) (x : Holor α ds) :
slice (unitVec d j ⊗ x) i hid = if i = j then x else 0 :=
funext fun t : HolorIndex ds =>
@@ -354,12 +306,6 @@ theorem slice_zero [Zero α] (i : ℕ) (hid : i < d) : slice (0 : Holor α (d ::
#align holor.slice_zero Holor.slice_zero
-/
-/- warning: holor.slice_sum -> Holor.slice_sum is a dubious translation:
-lean 3 declaration is
- forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : AddCommMonoid.{0} α] {β : Type} (i : Nat) (hid : LT.lt.{0} Nat Nat.hasLt i d) (s : Finset.{0} β) (f : β -> (Holor.{0} α (List.cons.{0} Nat d ds))), Eq.{1} (Holor.{0} α ds) (Finset.sum.{0, 0} (Holor.{0} α ds) β (Holor.addCommMonoid α ds _inst_1) s (fun (x : β) => Holor.slice α d ds (f x) i hid)) (Holor.slice α d ds (Finset.sum.{0, 0} (Holor.{0} α (List.cons.{0} Nat d ds)) β (Holor.addCommMonoid α (List.cons.{0} Nat d ds) _inst_1) s (fun (x : β) => f x)) i hid)
-but is expected to have type
- forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : AddCommMonoid.{0} α] {β : Type} (i : Nat) (hid : LT.lt.{0} Nat instLTNat i d) (s : Finset.{0} β) (f : β -> (Holor.{0} α (List.cons.{0} Nat d ds))), Eq.{1} (Holor.{0} α ds) (Finset.sum.{0, 0} (Holor.{0} α ds) β (Holor.instAddCommMonoidHolor α ds _inst_1) s (fun (x : β) => Holor.slice α d ds (f x) i hid)) (Holor.slice α d ds (Finset.sum.{0, 0} (Holor.{0} α (List.cons.{0} Nat d ds)) β (Holor.instAddCommMonoidHolor α (List.cons.{0} Nat d ds) _inst_1) s (fun (x : β) => f x)) i hid)
-Case conversion may be inaccurate. Consider using '#align holor.slice_sum Holor.slice_sumₓ'. -/
theorem slice_sum [AddCommMonoid α] {β : Type} (i : ℕ) (hid : i < d) (s : Finset β)
(f : β → Holor α (d :: ds)) : (∑ x in s, slice (f x) i hid) = slice (∑ x in s, f x) i hid :=
by
@@ -370,9 +316,6 @@ theorem slice_sum [AddCommMonoid α] {β : Type} (i : ℕ) (hid : i < d) (s : Fi
rw [Finset.sum_insert h_not_in, ih, slice_add, Finset.sum_insert h_not_in]
#align holor.slice_sum Holor.slice_sum
-/- warning: holor.sum_unit_vec_mul_slice -> Holor.sum_unitVec_mul_slice is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align holor.sum_unit_vec_mul_slice Holor.sum_unitVec_mul_sliceₓ'. -/
/-- The original holor can be recovered from its slices by multiplying with unit vectors and
summing up. -/
@[simp]
@@ -416,36 +359,18 @@ inductive CPRankMax [Mul α] [AddMonoid α] : ℕ → ∀ {ds}, Holor α ds →
#align holor.cprank_max Holor.CPRankMax
-/
-/- warning: holor.cprank_max_nil -> Holor.cprankMax_nil is a dubious translation:
-lean 3 declaration is
- forall {α : Type} [_inst_1 : Monoid.{0} α] [_inst_2 : AddMonoid.{0} α] (x : Holor.{0} α (List.nil.{0} Nat)), Holor.CPRankMax α (MulOneClass.toHasMul.{0} α (Monoid.toMulOneClass.{0} α _inst_1)) _inst_2 (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))) (List.nil.{0} Nat) x
-but is expected to have type
- forall {α : Type} [_inst_1 : Monoid.{0} α] [_inst_2 : AddMonoid.{0} α] (x : Holor.{0} α (List.nil.{0} Nat)), Holor.CPRankMax α (MulOneClass.toMul.{0} α (Monoid.toMulOneClass.{0} α _inst_1)) _inst_2 (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)) (List.nil.{0} Nat) x
-Case conversion may be inaccurate. Consider using '#align holor.cprank_max_nil Holor.cprankMax_nilₓ'. -/
theorem cprankMax_nil [Monoid α] [AddMonoid α] (x : Holor α nil) : CPRankMax 1 x :=
by
have h := CPRankMax.succ 0 x 0 (CPRankMax1.nil x) CPRankMax.zero
rwa [add_zero x, zero_add] at h
#align holor.cprank_max_nil Holor.cprankMax_nil
-/- warning: holor.cprank_max_1 -> Holor.cprankMax_1 is a dubious translation:
-lean 3 declaration is
- forall {α : Type} {ds : List.{0} Nat} [_inst_1 : Monoid.{0} α] [_inst_2 : AddMonoid.{0} α] {x : Holor.{0} α ds}, (Holor.CPRankMax1 α (MulOneClass.toHasMul.{0} α (Monoid.toMulOneClass.{0} α _inst_1)) ds x) -> (Holor.CPRankMax α (MulOneClass.toHasMul.{0} α (Monoid.toMulOneClass.{0} α _inst_1)) _inst_2 (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))) ds x)
-but is expected to have type
- forall {α : Type} {ds : List.{0} Nat} [_inst_1 : Monoid.{0} α] [_inst_2 : AddMonoid.{0} α] {x : Holor.{0} α ds}, (Holor.CPRankMax1 α (MulOneClass.toMul.{0} α (Monoid.toMulOneClass.{0} α _inst_1)) ds x) -> (Holor.CPRankMax α (MulOneClass.toMul.{0} α (Monoid.toMulOneClass.{0} α _inst_1)) _inst_2 (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)) ds x)
-Case conversion may be inaccurate. Consider using '#align holor.cprank_max_1 Holor.cprankMax_1ₓ'. -/
theorem cprankMax_1 [Monoid α] [AddMonoid α] {x : Holor α ds} (h : CPRankMax1 x) : CPRankMax 1 x :=
by
have h' := CPRankMax.succ 0 x 0 h CPRankMax.zero
rwa [zero_add, add_zero] at h'
#align holor.cprank_max_1 Holor.cprankMax_1
-/- warning: holor.cprank_max_add -> Holor.cprankMax_add is a dubious translation:
-lean 3 declaration is
- forall {α : Type} {ds : List.{0} Nat} [_inst_1 : Monoid.{0} α] [_inst_2 : AddMonoid.{0} α] {m : Nat} {n : Nat} {x : Holor.{0} α ds} {y : Holor.{0} α ds}, (Holor.CPRankMax α (MulOneClass.toHasMul.{0} α (Monoid.toMulOneClass.{0} α _inst_1)) _inst_2 m ds x) -> (Holor.CPRankMax α (MulOneClass.toHasMul.{0} α (Monoid.toMulOneClass.{0} α _inst_1)) _inst_2 n ds y) -> (Holor.CPRankMax α (MulOneClass.toHasMul.{0} α (Monoid.toMulOneClass.{0} α _inst_1)) _inst_2 (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) m n) ds (HAdd.hAdd.{0, 0, 0} (Holor.{0} α ds) (Holor.{0} α ds) (Holor.{0} α ds) (instHAdd.{0} (Holor.{0} α ds) (Holor.hasAdd α ds (AddZeroClass.toHasAdd.{0} α (AddMonoid.toAddZeroClass.{0} α _inst_2)))) x y))
-but is expected to have type
- forall {α : Type} {ds : List.{0} Nat} [_inst_1 : Monoid.{0} α] [_inst_2 : AddMonoid.{0} α] {m : Nat} {n : Nat} {x : Holor.{0} α ds} {y : Holor.{0} α ds}, (Holor.CPRankMax α (MulOneClass.toMul.{0} α (Monoid.toMulOneClass.{0} α _inst_1)) _inst_2 m ds x) -> (Holor.CPRankMax α (MulOneClass.toMul.{0} α (Monoid.toMulOneClass.{0} α _inst_1)) _inst_2 n ds y) -> (Holor.CPRankMax α (MulOneClass.toMul.{0} α (Monoid.toMulOneClass.{0} α _inst_1)) _inst_2 (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) m n) ds (HAdd.hAdd.{0, 0, 0} (Holor.{0} α ds) (Holor.{0} α ds) (Holor.{0} α ds) (instHAdd.{0} (Holor.{0} α ds) (Holor.instAddHolor α ds (AddZeroClass.toAdd.{0} α (AddMonoid.toAddZeroClass.{0} α _inst_2)))) x y))
-Case conversion may be inaccurate. Consider using '#align holor.cprank_max_add Holor.cprankMax_addₓ'. -/
theorem cprankMax_add [Monoid α] [AddMonoid α] :
∀ {m : ℕ} {n : ℕ} {x : Holor α ds} {y : Holor α ds},
CPRankMax m x → CPRankMax n y → CPRankMax (m + n) (x + y)
@@ -458,12 +383,6 @@ theorem cprankMax_add [Monoid α] [AddMonoid α] :
· exact cprank_max_add hx₂ hy
#align holor.cprank_max_add Holor.cprankMax_add
-/- warning: holor.cprank_max_mul -> Holor.cprankMax_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] (n : Nat) (x : Holor.{0} α (List.cons.{0} Nat d (List.nil.{0} Nat))) (y : Holor.{0} α ds), (Holor.CPRankMax α (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (AddCommGroupWithOne.toAddGroupWithOne.{0} α (Ring.toAddCommGroupWithOne.{0} α _inst_1)))) n ds y) -> (Holor.CPRankMax α (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (AddCommGroupWithOne.toAddGroupWithOne.{0} α (Ring.toAddCommGroupWithOne.{0} α _inst_1)))) n (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds) (Holor.mul α (List.cons.{0} Nat d (List.nil.{0} Nat)) ds (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) x y))
-but is expected to have type
- forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] (n : Nat) (x : Holor.{0} α (List.cons.{0} Nat d (List.nil.{0} Nat))) (y : Holor.{0} α ds), (Holor.CPRankMax α (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (Ring.toAddGroupWithOne.{0} α _inst_1))) n ds y) -> (Holor.CPRankMax α (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (Ring.toAddGroupWithOne.{0} α _inst_1))) n (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds) (Holor.mul α (List.cons.{0} Nat d (List.nil.{0} Nat)) ds (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) x y))
-Case conversion may be inaccurate. Consider using '#align holor.cprank_max_mul Holor.cprankMax_mulₓ'. -/
theorem cprankMax_mul [Ring α] :
∀ (n : ℕ) (x : Holor α [d]) (y : Holor α ds), CPRankMax n y → CPRankMax n (x ⊗ y)
| 0, x, _, cprank_max.zero => by simp [MulZeroClass.mul_zero x, cprank_max.zero]
@@ -476,12 +395,6 @@ theorem cprankMax_mul [Ring α] :
· exact cprank_max_mul k x y₂ hy₂
#align holor.cprank_max_mul Holor.cprankMax_mul
-/- warning: holor.cprank_max_sum -> Holor.cprankMax_sum is a dubious translation:
-lean 3 declaration is
- forall {α : Type} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] {β : Type.{u1}} {n : Nat} (s : Finset.{u1} β) (f : β -> (Holor.{0} α ds)), (forall (x : β), (Membership.Mem.{u1, u1} β (Finset.{u1} β) (Finset.hasMem.{u1} β) x s) -> (Holor.CPRankMax α (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (AddCommGroupWithOne.toAddGroupWithOne.{0} α (Ring.toAddCommGroupWithOne.{0} α _inst_1)))) n ds (f x))) -> (Holor.CPRankMax α (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (AddCommGroupWithOne.toAddGroupWithOne.{0} α (Ring.toAddCommGroupWithOne.{0} α _inst_1)))) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat Nat.hasMul) (Finset.card.{u1} β s) n) ds (Finset.sum.{0, u1} (Holor.{0} α ds) β (Holor.addCommMonoid α ds (AddCommGroup.toAddCommMonoid.{0} α (NonUnitalNonAssocRing.toAddCommGroup.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))))) s (fun (x : β) => f x)))
-but is expected to have type
- forall {α : Type} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] {β : Type.{u1}} {n : Nat} (s : Finset.{u1} β) (f : β -> (Holor.{0} α ds)), (forall (x : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) x s) -> (Holor.CPRankMax α (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (Ring.toAddGroupWithOne.{0} α _inst_1))) n ds (f x))) -> (Holor.CPRankMax α (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (Ring.toAddGroupWithOne.{0} α _inst_1))) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (Finset.card.{u1} β s) n) ds (Finset.sum.{0, u1} (Holor.{0} α ds) β (Holor.instAddCommMonoidHolor α ds (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))))) s (fun (x : β) => f x)))
-Case conversion may be inaccurate. Consider using '#align holor.cprank_max_sum Holor.cprankMax_sumₓ'. -/
theorem cprankMax_sum [Ring α] {β} {n : ℕ} (s : Finset β) (f : β → Holor α ds) :
(∀ x ∈ s, CPRankMax n (f x)) → CPRankMax (s.card * n) (∑ x in s, f x) :=
letI := Classical.decEq β
@@ -499,12 +412,6 @@ theorem cprankMax_sum [Ring α] {β} {n : ℕ} (s : Finset β) (f : β → Holor
exact cprank_max_add (h_cprank x (Finset.mem_insert_self x s)) ih')
#align holor.cprank_max_sum Holor.cprankMax_sum
-/- warning: holor.cprank_max_upper_bound -> Holor.cprankMax_upper_bound is a dubious translation:
-lean 3 declaration is
- forall {α : Type} [_inst_1 : Ring.{0} α] {ds : List.{0} Nat} (x : Holor.{0} α ds), Holor.CPRankMax α (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (AddCommGroupWithOne.toAddGroupWithOne.{0} α (Ring.toAddCommGroupWithOne.{0} α _inst_1)))) (List.prod.{0} Nat Nat.hasMul Nat.hasOne ds) ds x
-but is expected to have type
- forall {α : Type} [_inst_1 : Ring.{0} α] {ds : List.{0} Nat} (x : Holor.{0} α ds), Holor.CPRankMax α (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (Ring.toAddGroupWithOne.{0} α _inst_1))) (List.prod.{0} Nat instMulNat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) ds) ds x
-Case conversion may be inaccurate. Consider using '#align holor.cprank_max_upper_bound Holor.cprankMax_upper_boundₓ'. -/
theorem cprankMax_upper_bound [Ring α] : ∀ {ds}, ∀ x : Holor α ds, CPRankMax ds.Prod x
| [], x => cprankMax_nil x
| d :: ds, x =>
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -371,10 +371,7 @@ theorem slice_sum [AddCommMonoid α] {β : Type} (i : ℕ) (hid : i < d) (s : Fi
#align holor.slice_sum Holor.slice_sum
/- warning: holor.sum_unit_vec_mul_slice -> Holor.sum_unitVec_mul_slice is a dubious translation:
-lean 3 declaration is
- forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] (x : Holor.{0} α (List.cons.{0} Nat d ds)), Eq.{1} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds)) (Finset.sum.{0, 0} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds)) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) (Holor.addCommMonoid α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds) (AddCommGroup.toAddCommMonoid.{0} α (NonUnitalNonAssocRing.toAddCommGroup.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))))) (Finset.attach.{0} Nat (Finset.range d)) (fun (i : Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) => Holor.mul α (List.cons.{0} Nat d (List.nil.{0} Nat)) ds (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (Holor.unitVec α (Ring.toMonoid.{0} α _inst_1) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (AddCommGroupWithOne.toAddGroupWithOne.{0} α (Ring.toAddCommGroupWithOne.{0} α _inst_1)))) d ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i)) (Holor.slice α d ds x ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i) (Nat.succ_le_of_lt ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i) d (Iff.mp (Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i) (Finset.range d)) (LT.lt.{0} Nat Nat.hasLt ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i) d) (Finset.mem_range d ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i)) (Subtype.prop.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)) i)))))) x
-but is expected to have type
- forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] (x : Holor.{0} α (List.cons.{0} Nat d ds)), Eq.{1} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds)) (Finset.sum.{0, 0} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds)) (Subtype.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d))) (Holor.instAddCommMonoidHolor α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))))) (Finset.attach.{0} Nat (Finset.range d)) (fun (i : Subtype.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d))) => Holor.mul α (List.cons.{0} Nat d (List.nil.{0} Nat)) ds (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) (Holor.unitVec α (MonoidWithZero.toMonoid.{0} α (Semiring.toMonoidWithZero.{0} α (Ring.toSemiring.{0} α _inst_1))) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (Ring.toAddGroupWithOne.{0} α _inst_1))) d (Subtype.val.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i)) (Holor.slice α d ds x (Subtype.val.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i) (Nat.succ_le_of_lt (Subtype.val.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i) d (Iff.mp (Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) (Subtype.val.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i) (Finset.range d)) (LT.lt.{0} Nat instLTNat (Subtype.val.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i) d) (Finset.mem_range d (Subtype.val.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i)) (Subtype.prop.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i)))))) x
+<too large>
Case conversion may be inaccurate. Consider using '#align holor.sum_unit_vec_mul_slice Holor.sum_unitVec_mul_sliceₓ'. -/
/-- The original holor can be recovered from its slices by multiplying with unit vectors and
summing up. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/172bf2812857f5e56938cc148b7a539f52f84ca9
@@ -328,18 +328,18 @@ theorem slice_eq (x : Holor α (d :: ds)) (y : Holor α (d :: ds)) (h : slice x
#align holor.slice_eq Holor.slice_eq
-/
-/- warning: holor.slice_unit_vec_mul -> Holor.slice_unit_vec_mul is a dubious translation:
+/- warning: holor.slice_unit_vec_mul -> Holor.slice_unitVec_mul is a dubious translation:
lean 3 declaration is
forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] {i : Nat} {j : Nat} (hid : LT.lt.{0} Nat Nat.hasLt i d) (x : Holor.{0} α ds), Eq.{1} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) (Holor.slice α d (List.append.{0} Nat (List.nil.{0} Nat) ds) (Holor.mul α (List.cons.{0} Nat d (List.nil.{0} Nat)) ds (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (Holor.unitVec α (Ring.toMonoid.{0} α _inst_1) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (AddCommGroupWithOne.toAddGroupWithOne.{0} α (Ring.toAddCommGroupWithOne.{0} α _inst_1)))) d j) x) i hid) (ite.{1} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) (Eq.{1} Nat i j) (Nat.decidableEq i j) x (OfNat.ofNat.{0} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) 0 (OfNat.mk.{0} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) 0 (Zero.zero.{0} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) (Holor.hasZero α (List.append.{0} Nat (List.nil.{0} Nat) ds) (MulZeroClass.toHasZero.{0} α (NonUnitalNonAssocSemiring.toMulZeroClass.{0} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))))))))))
but is expected to have type
forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] {i : Nat} {j : Nat} (hid : LT.lt.{0} Nat instLTNat i d) (x : Holor.{0} α ds), Eq.{1} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) (Holor.slice α d (List.append.{0} Nat (List.nil.{0} Nat) ds) (Holor.mul α (List.cons.{0} Nat d (List.nil.{0} Nat)) ds (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) (Holor.unitVec α (MonoidWithZero.toMonoid.{0} α (Semiring.toMonoidWithZero.{0} α (Ring.toSemiring.{0} α _inst_1))) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (Ring.toAddGroupWithOne.{0} α _inst_1))) d j) x) i hid) (ite.{1} (Holor.{0} α ds) (Eq.{1} Nat i j) (instDecidableEqNat i j) x (OfNat.ofNat.{0} (Holor.{0} α ds) 0 (Zero.toOfNat0.{0} (Holor.{0} α ds) (Holor.instZeroHolor α ds (MonoidWithZero.toZero.{0} α (Semiring.toMonoidWithZero.{0} α (Ring.toSemiring.{0} α _inst_1)))))))
-Case conversion may be inaccurate. Consider using '#align holor.slice_unit_vec_mul Holor.slice_unit_vec_mulₓ'. -/
-theorem slice_unit_vec_mul [Ring α] {i : ℕ} {j : ℕ} (hid : i < d) (x : Holor α ds) :
+Case conversion may be inaccurate. Consider using '#align holor.slice_unit_vec_mul Holor.slice_unitVec_mulₓ'. -/
+theorem slice_unitVec_mul [Ring α] {i : ℕ} {j : ℕ} (hid : i < d) (x : Holor α ds) :
slice (unitVec d j ⊗ x) i hid = if i = j then x else 0 :=
funext fun t : HolorIndex ds =>
if h : i = j then by simp [slice, mul, HolorIndex.take, unit_vec, HolorIndex.drop, h]
else by simp [slice, mul, HolorIndex.take, unit_vec, HolorIndex.drop, h] <;> rfl
-#align holor.slice_unit_vec_mul Holor.slice_unit_vec_mul
+#align holor.slice_unit_vec_mul Holor.slice_unitVec_mul
#print Holor.slice_add /-
theorem slice_add [Add α] (i : ℕ) (hid : i < d) (x : Holor α (d :: ds)) (y : Holor α (d :: ds)) :
@@ -370,16 +370,16 @@ theorem slice_sum [AddCommMonoid α] {β : Type} (i : ℕ) (hid : i < d) (s : Fi
rw [Finset.sum_insert h_not_in, ih, slice_add, Finset.sum_insert h_not_in]
#align holor.slice_sum Holor.slice_sum
-/- warning: holor.sum_unit_vec_mul_slice -> Holor.sum_unit_vec_mul_slice is a dubious translation:
+/- warning: holor.sum_unit_vec_mul_slice -> Holor.sum_unitVec_mul_slice is a dubious translation:
lean 3 declaration is
forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] (x : Holor.{0} α (List.cons.{0} Nat d ds)), Eq.{1} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds)) (Finset.sum.{0, 0} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds)) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) (Holor.addCommMonoid α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds) (AddCommGroup.toAddCommMonoid.{0} α (NonUnitalNonAssocRing.toAddCommGroup.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))))) (Finset.attach.{0} Nat (Finset.range d)) (fun (i : Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) => Holor.mul α (List.cons.{0} Nat d (List.nil.{0} Nat)) ds (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (Holor.unitVec α (Ring.toMonoid.{0} α _inst_1) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (AddCommGroupWithOne.toAddGroupWithOne.{0} α (Ring.toAddCommGroupWithOne.{0} α _inst_1)))) d ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i)) (Holor.slice α d ds x ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i) (Nat.succ_le_of_lt ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i) d (Iff.mp (Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i) (Finset.range d)) (LT.lt.{0} Nat Nat.hasLt ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i) d) (Finset.mem_range d ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i)) (Subtype.prop.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)) i)))))) x
but is expected to have type
forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] (x : Holor.{0} α (List.cons.{0} Nat d ds)), Eq.{1} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds)) (Finset.sum.{0, 0} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds)) (Subtype.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d))) (Holor.instAddCommMonoidHolor α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))))) (Finset.attach.{0} Nat (Finset.range d)) (fun (i : Subtype.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d))) => Holor.mul α (List.cons.{0} Nat d (List.nil.{0} Nat)) ds (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) (Holor.unitVec α (MonoidWithZero.toMonoid.{0} α (Semiring.toMonoidWithZero.{0} α (Ring.toSemiring.{0} α _inst_1))) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (Ring.toAddGroupWithOne.{0} α _inst_1))) d (Subtype.val.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i)) (Holor.slice α d ds x (Subtype.val.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i) (Nat.succ_le_of_lt (Subtype.val.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i) d (Iff.mp (Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) (Subtype.val.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i) (Finset.range d)) (LT.lt.{0} Nat instLTNat (Subtype.val.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i) d) (Finset.mem_range d (Subtype.val.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i)) (Subtype.prop.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i)))))) x
-Case conversion may be inaccurate. Consider using '#align holor.sum_unit_vec_mul_slice Holor.sum_unit_vec_mul_sliceₓ'. -/
+Case conversion may be inaccurate. Consider using '#align holor.sum_unit_vec_mul_slice Holor.sum_unitVec_mul_sliceₓ'. -/
/-- The original holor can be recovered from its slices by multiplying with unit vectors and
summing up. -/
@[simp]
-theorem sum_unit_vec_mul_slice [Ring α] (x : Holor α (d :: ds)) :
+theorem sum_unitVec_mul_slice [Ring α] (x : Holor α (d :: ds)) :
(∑ i in (Finset.range d).attach,
unitVec d i ⊗ slice x i (Nat.succ_le_of_lt (Finset.mem_range.1 i.Prop))) =
x :=
@@ -396,7 +396,7 @@ theorem sum_unit_vec_mul_slice [Ring α] (x : Holor α (d :: ds)) :
· intro (hid' : Subtype.mk i _ ∉ Finset.attach (Finset.range d))
exfalso
exact absurd (Finset.mem_attach _ _) hid'
-#align holor.sum_unit_vec_mul_slice Holor.sum_unit_vec_mul_slice
+#align holor.sum_unit_vec_mul_slice Holor.sum_unitVec_mul_slice
#print Holor.CPRankMax1 /-
-- CP rank
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce86f4e05e9a9b8da5e316b22c76ce76440c56a1
@@ -330,7 +330,7 @@ theorem slice_eq (x : Holor α (d :: ds)) (y : Holor α (d :: ds)) (h : slice x
/- warning: holor.slice_unit_vec_mul -> Holor.slice_unit_vec_mul is a dubious translation:
lean 3 declaration is
- forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] {i : Nat} {j : Nat} (hid : LT.lt.{0} Nat Nat.hasLt i d) (x : Holor.{0} α ds), Eq.{1} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) (Holor.slice α d (List.append.{0} Nat (List.nil.{0} Nat) ds) (Holor.mul α (List.cons.{0} Nat d (List.nil.{0} Nat)) ds (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (Holor.unitVec α (Ring.toMonoid.{0} α _inst_1) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (NonAssocRing.toAddGroupWithOne.{0} α (Ring.toNonAssocRing.{0} α _inst_1)))) d j) x) i hid) (ite.{1} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) (Eq.{1} Nat i j) (Nat.decidableEq i j) x (OfNat.ofNat.{0} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) 0 (OfNat.mk.{0} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) 0 (Zero.zero.{0} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) (Holor.hasZero α (List.append.{0} Nat (List.nil.{0} Nat) ds) (MulZeroClass.toHasZero.{0} α (NonUnitalNonAssocSemiring.toMulZeroClass.{0} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))))))))))
+ forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] {i : Nat} {j : Nat} (hid : LT.lt.{0} Nat Nat.hasLt i d) (x : Holor.{0} α ds), Eq.{1} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) (Holor.slice α d (List.append.{0} Nat (List.nil.{0} Nat) ds) (Holor.mul α (List.cons.{0} Nat d (List.nil.{0} Nat)) ds (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (Holor.unitVec α (Ring.toMonoid.{0} α _inst_1) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (AddCommGroupWithOne.toAddGroupWithOne.{0} α (Ring.toAddCommGroupWithOne.{0} α _inst_1)))) d j) x) i hid) (ite.{1} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) (Eq.{1} Nat i j) (Nat.decidableEq i j) x (OfNat.ofNat.{0} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) 0 (OfNat.mk.{0} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) 0 (Zero.zero.{0} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) (Holor.hasZero α (List.append.{0} Nat (List.nil.{0} Nat) ds) (MulZeroClass.toHasZero.{0} α (NonUnitalNonAssocSemiring.toMulZeroClass.{0} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))))))))))
but is expected to have type
forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] {i : Nat} {j : Nat} (hid : LT.lt.{0} Nat instLTNat i d) (x : Holor.{0} α ds), Eq.{1} (Holor.{0} α (List.append.{0} Nat (List.nil.{0} Nat) ds)) (Holor.slice α d (List.append.{0} Nat (List.nil.{0} Nat) ds) (Holor.mul α (List.cons.{0} Nat d (List.nil.{0} Nat)) ds (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) (Holor.unitVec α (MonoidWithZero.toMonoid.{0} α (Semiring.toMonoidWithZero.{0} α (Ring.toSemiring.{0} α _inst_1))) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (Ring.toAddGroupWithOne.{0} α _inst_1))) d j) x) i hid) (ite.{1} (Holor.{0} α ds) (Eq.{1} Nat i j) (instDecidableEqNat i j) x (OfNat.ofNat.{0} (Holor.{0} α ds) 0 (Zero.toOfNat0.{0} (Holor.{0} α ds) (Holor.instZeroHolor α ds (MonoidWithZero.toZero.{0} α (Semiring.toMonoidWithZero.{0} α (Ring.toSemiring.{0} α _inst_1)))))))
Case conversion may be inaccurate. Consider using '#align holor.slice_unit_vec_mul Holor.slice_unit_vec_mulₓ'. -/
@@ -372,7 +372,7 @@ theorem slice_sum [AddCommMonoid α] {β : Type} (i : ℕ) (hid : i < d) (s : Fi
/- warning: holor.sum_unit_vec_mul_slice -> Holor.sum_unit_vec_mul_slice is a dubious translation:
lean 3 declaration is
- forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] (x : Holor.{0} α (List.cons.{0} Nat d ds)), Eq.{1} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds)) (Finset.sum.{0, 0} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds)) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) (Holor.addCommMonoid α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds) (AddCommGroup.toAddCommMonoid.{0} α (NonUnitalNonAssocRing.toAddCommGroup.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))))) (Finset.attach.{0} Nat (Finset.range d)) (fun (i : Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) => Holor.mul α (List.cons.{0} Nat d (List.nil.{0} Nat)) ds (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (Holor.unitVec α (Ring.toMonoid.{0} α _inst_1) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (NonAssocRing.toAddGroupWithOne.{0} α (Ring.toNonAssocRing.{0} α _inst_1)))) d ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i)) (Holor.slice α d ds x ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i) (Nat.succ_le_of_lt ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i) d (Iff.mp (Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i) (Finset.range d)) (LT.lt.{0} Nat Nat.hasLt ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i) d) (Finset.mem_range d ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i)) (Subtype.prop.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)) i)))))) x
+ forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] (x : Holor.{0} α (List.cons.{0} Nat d ds)), Eq.{1} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds)) (Finset.sum.{0, 0} (Holor.{0} α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds)) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) (Holor.addCommMonoid α (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds) (AddCommGroup.toAddCommMonoid.{0} α (NonUnitalNonAssocRing.toAddCommGroup.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))))) (Finset.attach.{0} Nat (Finset.range d)) (fun (i : Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) => Holor.mul α (List.cons.{0} Nat d (List.nil.{0} Nat)) ds (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (Holor.unitVec α (Ring.toMonoid.{0} α _inst_1) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (AddCommGroupWithOne.toAddGroupWithOne.{0} α (Ring.toAddCommGroupWithOne.{0} α _inst_1)))) d ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i)) (Holor.slice α d ds x ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i) (Nat.succ_le_of_lt ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i) d (Iff.mp (Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i) (Finset.range d)) (LT.lt.{0} Nat Nat.hasLt ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i) d) (Finset.mem_range d ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (HasLiftT.mk.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (CoeTCₓ.coe.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeBase.{1, 1} (Subtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d))) Nat (coeSubtype.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)))))) i)) (Subtype.prop.{1} Nat (fun (x : Nat) => Membership.Mem.{0, 0} Nat (Finset.{0} Nat) (Finset.hasMem.{0} Nat) x (Finset.range d)) i)))))) x
but is expected to have type
forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] (x : Holor.{0} α (List.cons.{0} Nat d ds)), Eq.{1} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds)) (Finset.sum.{0, 0} (Holor.{0} α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds)) (Subtype.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d))) (Holor.instAddCommMonoidHolor α (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))))) (Finset.attach.{0} Nat (Finset.range d)) (fun (i : Subtype.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d))) => Holor.mul α (List.cons.{0} Nat d (List.nil.{0} Nat)) ds (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) (Holor.unitVec α (MonoidWithZero.toMonoid.{0} α (Semiring.toMonoidWithZero.{0} α (Ring.toSemiring.{0} α _inst_1))) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (Ring.toAddGroupWithOne.{0} α _inst_1))) d (Subtype.val.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i)) (Holor.slice α d ds x (Subtype.val.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i) (Nat.succ_le_of_lt (Subtype.val.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i) d (Iff.mp (Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) (Subtype.val.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i) (Finset.range d)) (LT.lt.{0} Nat instLTNat (Subtype.val.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i) d) (Finset.mem_range d (Subtype.val.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i)) (Subtype.prop.{1} Nat (fun (x : Nat) => Membership.mem.{0, 0} Nat (Finset.{0} Nat) (Finset.instMembershipFinset.{0} Nat) x (Finset.range d)) i)))))) x
Case conversion may be inaccurate. Consider using '#align holor.sum_unit_vec_mul_slice Holor.sum_unit_vec_mul_sliceₓ'. -/
@@ -463,7 +463,7 @@ theorem cprankMax_add [Monoid α] [AddMonoid α] :
/- warning: holor.cprank_max_mul -> Holor.cprankMax_mul is a dubious translation:
lean 3 declaration is
- forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] (n : Nat) (x : Holor.{0} α (List.cons.{0} Nat d (List.nil.{0} Nat))) (y : Holor.{0} α ds), (Holor.CPRankMax α (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (NonAssocRing.toAddGroupWithOne.{0} α (Ring.toNonAssocRing.{0} α _inst_1)))) n ds y) -> (Holor.CPRankMax α (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (NonAssocRing.toAddGroupWithOne.{0} α (Ring.toNonAssocRing.{0} α _inst_1)))) n (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds) (Holor.mul α (List.cons.{0} Nat d (List.nil.{0} Nat)) ds (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) x y))
+ forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] (n : Nat) (x : Holor.{0} α (List.cons.{0} Nat d (List.nil.{0} Nat))) (y : Holor.{0} α ds), (Holor.CPRankMax α (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (AddCommGroupWithOne.toAddGroupWithOne.{0} α (Ring.toAddCommGroupWithOne.{0} α _inst_1)))) n ds y) -> (Holor.CPRankMax α (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (AddCommGroupWithOne.toAddGroupWithOne.{0} α (Ring.toAddCommGroupWithOne.{0} α _inst_1)))) n (Append.append.{0} (List.{0} Nat) (List.hasAppend.{0} Nat) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds) (Holor.mul α (List.cons.{0} Nat d (List.nil.{0} Nat)) ds (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) x y))
but is expected to have type
forall {α : Type} {d : Nat} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] (n : Nat) (x : Holor.{0} α (List.cons.{0} Nat d (List.nil.{0} Nat))) (y : Holor.{0} α ds), (Holor.CPRankMax α (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (Ring.toAddGroupWithOne.{0} α _inst_1))) n ds y) -> (Holor.CPRankMax α (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (Ring.toAddGroupWithOne.{0} α _inst_1))) n (HAppend.hAppend.{0, 0, 0} (List.{0} Nat) (List.{0} Nat) (List.{0} Nat) (instHAppend.{0} (List.{0} Nat) (List.instAppendList.{0} Nat)) (List.cons.{0} Nat d (List.nil.{0} Nat)) ds) (Holor.mul α (List.cons.{0} Nat d (List.nil.{0} Nat)) ds (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) x y))
Case conversion may be inaccurate. Consider using '#align holor.cprank_max_mul Holor.cprankMax_mulₓ'. -/
@@ -481,7 +481,7 @@ theorem cprankMax_mul [Ring α] :
/- warning: holor.cprank_max_sum -> Holor.cprankMax_sum is a dubious translation:
lean 3 declaration is
- forall {α : Type} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] {β : Type.{u1}} {n : Nat} (s : Finset.{u1} β) (f : β -> (Holor.{0} α ds)), (forall (x : β), (Membership.Mem.{u1, u1} β (Finset.{u1} β) (Finset.hasMem.{u1} β) x s) -> (Holor.CPRankMax α (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (NonAssocRing.toAddGroupWithOne.{0} α (Ring.toNonAssocRing.{0} α _inst_1)))) n ds (f x))) -> (Holor.CPRankMax α (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (NonAssocRing.toAddGroupWithOne.{0} α (Ring.toNonAssocRing.{0} α _inst_1)))) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat Nat.hasMul) (Finset.card.{u1} β s) n) ds (Finset.sum.{0, u1} (Holor.{0} α ds) β (Holor.addCommMonoid α ds (AddCommGroup.toAddCommMonoid.{0} α (NonUnitalNonAssocRing.toAddCommGroup.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))))) s (fun (x : β) => f x)))
+ forall {α : Type} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] {β : Type.{u1}} {n : Nat} (s : Finset.{u1} β) (f : β -> (Holor.{0} α ds)), (forall (x : β), (Membership.Mem.{u1, u1} β (Finset.{u1} β) (Finset.hasMem.{u1} β) x s) -> (Holor.CPRankMax α (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (AddCommGroupWithOne.toAddGroupWithOne.{0} α (Ring.toAddCommGroupWithOne.{0} α _inst_1)))) n ds (f x))) -> (Holor.CPRankMax α (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (AddCommGroupWithOne.toAddGroupWithOne.{0} α (Ring.toAddCommGroupWithOne.{0} α _inst_1)))) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat Nat.hasMul) (Finset.card.{u1} β s) n) ds (Finset.sum.{0, u1} (Holor.{0} α ds) β (Holor.addCommMonoid α ds (AddCommGroup.toAddCommMonoid.{0} α (NonUnitalNonAssocRing.toAddCommGroup.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))))) s (fun (x : β) => f x)))
but is expected to have type
forall {α : Type} {ds : List.{0} Nat} [_inst_1 : Ring.{0} α] {β : Type.{u1}} {n : Nat} (s : Finset.{u1} β) (f : β -> (Holor.{0} α ds)), (forall (x : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) x s) -> (Holor.CPRankMax α (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (Ring.toAddGroupWithOne.{0} α _inst_1))) n ds (f x))) -> (Holor.CPRankMax α (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (Ring.toAddGroupWithOne.{0} α _inst_1))) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (Finset.card.{u1} β s) n) ds (Finset.sum.{0, u1} (Holor.{0} α ds) β (Holor.instAddCommMonoidHolor α ds (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} α (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))))) s (fun (x : β) => f x)))
Case conversion may be inaccurate. Consider using '#align holor.cprank_max_sum Holor.cprankMax_sumₓ'. -/
@@ -504,7 +504,7 @@ theorem cprankMax_sum [Ring α] {β} {n : ℕ} (s : Finset β) (f : β → Holor
/- warning: holor.cprank_max_upper_bound -> Holor.cprankMax_upper_bound is a dubious translation:
lean 3 declaration is
- forall {α : Type} [_inst_1 : Ring.{0} α] {ds : List.{0} Nat} (x : Holor.{0} α ds), Holor.CPRankMax α (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (NonAssocRing.toAddGroupWithOne.{0} α (Ring.toNonAssocRing.{0} α _inst_1)))) (List.prod.{0} Nat Nat.hasMul Nat.hasOne ds) ds x
+ forall {α : Type} [_inst_1 : Ring.{0} α] {ds : List.{0} Nat} (x : Holor.{0} α ds), Holor.CPRankMax α (Distrib.toHasMul.{0} α (Ring.toDistrib.{0} α _inst_1)) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (AddCommGroupWithOne.toAddGroupWithOne.{0} α (Ring.toAddCommGroupWithOne.{0} α _inst_1)))) (List.prod.{0} Nat Nat.hasMul Nat.hasOne ds) ds x
but is expected to have type
forall {α : Type} [_inst_1 : Ring.{0} α] {ds : List.{0} Nat} (x : Holor.{0} α ds), Holor.CPRankMax α (NonUnitalNonAssocRing.toMul.{0} α (NonAssocRing.toNonUnitalNonAssocRing.{0} α (Ring.toNonAssocRing.{0} α _inst_1))) (AddMonoidWithOne.toAddMonoid.{0} α (AddGroupWithOne.toAddMonoidWithOne.{0} α (Ring.toAddGroupWithOne.{0} α _inst_1))) (List.prod.{0} Nat instMulNat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) ds) ds x
Case conversion may be inaccurate. Consider using '#align holor.cprank_max_upper_bound Holor.cprankMax_upper_boundₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -264,7 +264,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align holor.zero_mul Holor.zero_mulₓ'. -/
@[simp]
theorem zero_mul {α : Type} [Ring α] (x : Holor α ds₂) : (0 : Holor α ds₁) ⊗ x = 0 :=
- funext fun t => zero_mul (x (HolorIndex.drop t))
+ funext fun t => MulZeroClass.zero_mul (x (HolorIndex.drop t))
#align holor.zero_mul Holor.zero_mul
/- warning: holor.mul_zero -> Holor.mul_zero is a dubious translation:
@@ -275,7 +275,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align holor.mul_zero Holor.mul_zeroₓ'. -/
@[simp]
theorem mul_zero {α : Type} [Ring α] (x : Holor α ds₁) : x ⊗ (0 : Holor α ds₂) = 0 :=
- funext fun t => mul_zero (x (HolorIndex.take t))
+ funext fun t => MulZeroClass.mul_zero (x (HolorIndex.take t))
#align holor.mul_zero Holor.mul_zero
/- warning: holor.mul_scalar_mul -> Holor.mul_scalar_mul is a dubious translation:
@@ -469,7 +469,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align holor.cprank_max_mul Holor.cprankMax_mulₓ'. -/
theorem cprankMax_mul [Ring α] :
∀ (n : ℕ) (x : Holor α [d]) (y : Holor α ds), CPRankMax n y → CPRankMax n (x ⊗ y)
- | 0, x, _, cprank_max.zero => by simp [mul_zero x, cprank_max.zero]
+ | 0, x, _, cprank_max.zero => by simp [MulZeroClass.mul_zero x, cprank_max.zero]
| n + 1, x, _, cprank_max.succ k y₁ y₂ hy₁ hy₂ =>
by
rw [mul_left_distrib]
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -300,7 +300,7 @@ theorem sum_unitVec_mul_slice [Ring α] (x : Holor α (d :: ds)) :
rw [Finset.sum_eq_single (Subtype.mk i <| Finset.mem_range.2 hid)]
· simp
· intro (b : { x // x ∈ Finset.range d }) (_ : b ∈ (Finset.range d).attach) (hbi : b ≠ ⟨i, _⟩)
- have hbi' : i ≠ b := by simpa only [Ne.def, Subtype.ext_iff, Subtype.coe_mk] using hbi.symm
+ have hbi' : i ≠ b := by simpa only [Ne, Subtype.ext_iff, Subtype.coe_mk] using hbi.symm
simp [hbi']
· intro (hid' : Subtype.mk i _ ∉ Finset.attach (Finset.range d))
exfalso
@@ -196,7 +196,8 @@ theorem mul_assoc0 [Semigroup α] (x : Holor α ds₁) (y : Holor α ds₂) (z :
funext fun t : HolorIndex (ds₁ ++ ds₂ ++ ds₃) => by
rw [assocLeft]
unfold mul
- rw [mul_assoc, ←HolorIndex.take_take, ←HolorIndex.drop_take, ←HolorIndex.drop_drop, cast_type]
+ rw [mul_assoc, ← HolorIndex.take_take, ← HolorIndex.drop_take, ← HolorIndex.drop_drop,
+ cast_type]
rfl
rw [append_assoc]
#align holor.mul_assoc0 Holor.mul_assoc0
This is the supremum of
along with some minor fixes from failures on nightly-testing as Mathlib master
is merged into it.
Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.
I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0
branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.
In particular this includes adjustments for the Lean PRs
We can get rid of all the
local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)
macros across Mathlib (and in any projects that want to write natural number powers of reals).
Changes the default behaviour of simp
to (config := {decide := false})
. This makes simp
(and consequentially norm_num
) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp
or norm_num
to decide
or rfl
, or adding (config := {decide := true})
.
This changed the behaviour of simp
so that simp [f]
will only unfold "fully applied" occurrences of f
. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true })
. We may in future add a syntax for this, e.g. simp [!f]
; please provide feedback! In the meantime, we have made the following changes:
(config := { unfoldPartialApp := true })
in some places, to recover the old behaviour@[eqns]
to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp
and Function.flip
.This change in Lean may require further changes down the line (e.g. adding the !f
syntax, and/or upstreaming the special treatment for Function.comp
and Function.flip
, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>
@@ -225,7 +225,8 @@ nonrec theorem mul_zero {α : Type} [Ring α] (x : Holor α ds₁) : x ⊗ (0 :
theorem mul_scalar_mul [Monoid α] (x : Holor α []) (y : Holor α ds) :
x ⊗ y = x ⟨[], Forall₂.nil⟩ • y := by
- simp [mul, SMul.smul, HolorIndex.take, HolorIndex.drop, HSMul.hSMul]
+ simp (config := { unfoldPartialApp := true }) [mul, SMul.smul, HolorIndex.take, HolorIndex.drop,
+ HSMul.hSMul]
#align holor.mul_scalar_mul Holor.mul_scalar_mul
-- holor slices
@@ -363,7 +363,7 @@ theorem cprankMax_sum [Ring α] {β} {n : ℕ} (s : Finset β) (f : β → Holor
letI := Classical.decEq β
Finset.induction_on s (by simp [CPRankMax.zero])
(by
- intro x s(h_x_notin_s : x ∉ s)ih h_cprank
+ intro x s (h_x_notin_s : x ∉ s) ih h_cprank
simp only [Finset.sum_insert h_x_notin_s, Finset.card_insert_of_not_mem h_x_notin_s]
rw [Nat.right_distrib]
simp only [Nat.one_mul, Nat.add_comm]
@@ -327,7 +327,7 @@ theorem cprankMax_nil [Monoid α] [AddMonoid α] (x : Holor α nil) : CPRankMax
#align holor.cprank_max_nil Holor.cprankMax_nil
theorem cprankMax_1 [Monoid α] [AddMonoid α] {x : Holor α ds} (h : CPRankMax1 x) :
- CPRankMax 1 x := by
+ CPRankMax 1 x := by
have h' := CPRankMax.succ 0 x 0 h CPRankMax.zero
rwa [zero_add, add_zero] at h'
#align holor.cprank_max_1 Holor.cprankMax_1
@@ -2,15 +2,12 @@
Copyright (c) 2018 Alexander Bentkamp. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Alexander Bentkamp
-
-! This file was ported from Lean 3 source module data.holor
-! leanprover-community/mathlib commit 509de852e1de55e1efa8eacfa11df0823f26f226
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Algebra.Module.Pi
import Mathlib.Algebra.BigOperators.Basic
+#align_import data.holor from "leanprover-community/mathlib"@"509de852e1de55e1efa8eacfa11df0823f26f226"
+
/-!
# Basic properties of holors
ext
(#5258)
Co-authored-by: Xavier Roblot <46200072+xroblot@users.noreply.github.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr> Co-authored-by: Riccardo Brasca <riccardo.brasca@gmail.com> Co-authored-by: Yury G. Kudryashov <urkud@urkud.name> Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Pol'tta / Miyahara Kō <pol_tta@outlook.jp> Co-authored-by: Jason Yuen <jason_yuen2007@hotmail.com> Co-authored-by: Mario Carneiro <di.gama@gmail.com> Co-authored-by: Jireh Loreaux <loreaujy@gmail.com> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Heather Macbeth <25316162+hrmacbeth@users.noreply.github.com> Co-authored-by: Jujian Zhang <jujian.zhang1998@outlook.com> Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>
@@ -295,7 +295,7 @@ theorem sum_unitVec_mul_slice [Ring α] (x : Holor α (d :: ds)) :
unitVec d i ⊗ slice x i (Nat.succ_le_of_lt (Finset.mem_range.1 i.prop))) =
x := by
apply slice_eq _ _ _
- ext (i hid)
+ ext i hid
rw [← slice_sum]
simp only [slice_unitVec_mul hid]
rw [Finset.sum_eq_single (Subtype.mk i <| Finset.mem_range.2 hid)]
@@ -300,7 +300,7 @@ theorem sum_unitVec_mul_slice [Ring α] (x : Holor α (d :: ds)) :
simp only [slice_unitVec_mul hid]
rw [Finset.sum_eq_single (Subtype.mk i <| Finset.mem_range.2 hid)]
· simp
- · intro (b : { x // x ∈ Finset.range d }) (_ : b ∈ (Finset.range d).attach)(hbi : b ≠ ⟨i, _⟩)
+ · intro (b : { x // x ∈ Finset.range d }) (_ : b ∈ (Finset.range d).attach) (hbi : b ≠ ⟨i, _⟩)
have hbi' : i ≠ b := by simpa only [Ne.def, Subtype.ext_iff, Subtype.coe_mk] using hbi.symm
simp [hbi']
· intro (hid' : Subtype.mk i _ ∉ Finset.attach (Finset.range d))
@@ -372,7 +372,7 @@ theorem cprankMax_sum [Ring α] {β} {n : ℕ} (s : Finset β) (f : β → Holor
simp only [Nat.one_mul, Nat.add_comm]
have ih' : CPRankMax (Finset.card s * n) (∑ x in s, f x) := by
apply ih
- intro (x : β)(h_x_in_s : x ∈ s)
+ intro (x : β) (h_x_in_s : x ∈ s)
simp only [h_cprank, Finset.mem_insert_of_mem, h_x_in_s]
exact cprankMax_add (h_cprank x (Finset.mem_insert_self x s)) ih')
#align holor.cprank_max_sum Holor.cprankMax_sum
@@ -179,7 +179,6 @@ def mul [Mul α] (x : Holor α ds₁) (y : Holor α ds₂) : Holor α (ds₁ ++
x t.take * y t.drop
#align holor.mul Holor.mul
--- mathport name: «expr ⊗ »
local infixl:70 " ⊗ " => mul
theorem cast_type (eq : ds₁ = ds₂) (a : Holor α ds₁) :
@@ -263,12 +262,12 @@ theorem slice_eq (x : Holor α (d :: ds)) (y : Holor α (d :: ds)) (h : slice x
_ = y ⟨i :: is, _⟩ := congr_arg (fun t => y t) (Subtype.eq rfl)
#align holor.slice_eq Holor.slice_eq
-theorem slice_unit_vec_mul [Ring α] {i : ℕ} {j : ℕ} (hid : i < d) (x : Holor α ds) :
+theorem slice_unitVec_mul [Ring α] {i : ℕ} {j : ℕ} (hid : i < d) (x : Holor α ds) :
slice (unitVec d j ⊗ x) i hid = if i = j then x else 0 :=
funext fun t : HolorIndex ds =>
if h : i = j then by simp [slice, mul, HolorIndex.take, unitVec, HolorIndex.drop, h]
else by simp [slice, mul, HolorIndex.take, unitVec, HolorIndex.drop, h]; rfl
-#align holor.slice_unit_vec_mul Holor.slice_unit_vec_mul
+#align holor.slice_unit_vec_mul Holor.slice_unitVec_mul
theorem slice_add [Add α] (i : ℕ) (hid : i < d) (x : Holor α (d :: ds)) (y : Holor α (d :: ds)) :
slice x i hid + slice y i hid = slice (x + y) i hid :=
@@ -291,14 +290,14 @@ theorem slice_sum [AddCommMonoid α] {β : Type} (i : ℕ) (hid : i < d) (s : Fi
/-- The original holor can be recovered from its slices by multiplying with unit vectors and
summing up. -/
@[simp]
-theorem sum_unit_vec_mul_slice [Ring α] (x : Holor α (d :: ds)) :
+theorem sum_unitVec_mul_slice [Ring α] (x : Holor α (d :: ds)) :
(∑ i in (Finset.range d).attach,
unitVec d i ⊗ slice x i (Nat.succ_le_of_lt (Finset.mem_range.1 i.prop))) =
x := by
apply slice_eq _ _ _
ext (i hid)
rw [← slice_sum]
- simp only [slice_unit_vec_mul hid]
+ simp only [slice_unitVec_mul hid]
rw [Finset.sum_eq_single (Subtype.mk i <| Finset.mem_range.2 hid)]
· simp
· intro (b : { x // x ∈ Finset.range d }) (_ : b ∈ (Finset.range d).attach)(hbi : b ≠ ⟨i, _⟩)
@@ -307,7 +306,7 @@ theorem sum_unit_vec_mul_slice [Ring α] (x : Holor α (d :: ds)) :
· intro (hid' : Subtype.mk i _ ∉ Finset.attach (Finset.range d))
exfalso
exact absurd (Finset.mem_attach _ _) hid'
-#align holor.sum_unit_vec_mul_slice Holor.sum_unit_vec_mul_slice
+#align holor.sum_unit_vec_mul_slice Holor.sum_unitVec_mul_slice
-- CP rank
/-- `CPRankMax1 x` means `x` has CP rank at most 1, that is,
@@ -347,7 +346,7 @@ theorem cprankMax_add [Monoid α] [AddMonoid α] :
apply CPRankMax.succ
· assumption
· -- Porting note: Single line is added.
- simp [add_zero, add_comm n m]
+ simp only [Nat.add_eq, add_zero, add_comm n m]
exact cprankMax_add hx₂ hy
#align holor.cprank_max_add Holor.cprankMax_add
@@ -396,7 +395,7 @@ theorem cprankMax_upper_bound [Ring α] : ∀ {ds}, ∀ x : Holor α ds, CPRankM
CPRankMax (Finset.card (Finset.range d) * prod ds)
(∑ i in Finset.attach (Finset.range d),
unitVec d i.val ⊗ slice x i.val (mem_range.1 i.2)) := by rwa [Finset.card_attach] at this
- rw [← sum_unit_vec_mul_slice x]
+ rw [← sum_unitVec_mul_slice x]
rw [h_dds_prod]
exact h_cprankMax_sum
#align holor.cprank_max_upper_bound Holor.cprankMax_upper_bound
The unported dependencies are