data.holorMathlib.Data.Holor

This file has been ported!

Changes since the initial port

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.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(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)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -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
Diff
@@ -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"
 
Diff
@@ -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
 
Diff
@@ -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)]
Diff
@@ -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
Diff
@@ -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 _ _ _
Diff
@@ -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
 -/
 
Diff
@@ -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
Diff
@@ -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
Diff
@@ -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 =>
Diff
@@ -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. -/
Diff
@@ -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
Diff
@@ -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ₓ'. -/
Diff
@@ -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]

Changes in mathlib4

mathlib3
mathlib4
chore: avoid Ne.def (adaptation for nightly-2024-03-27) (#11801)
Diff
@@ -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
chore: space after (#8178)

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -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
chore: bump to v4.3.0-rc2 (#8366)

PR contents

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.

Lean PRs involved in this bump

In particular this includes adjustments for the Lean PRs

leanprover/lean4#2778

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).

leanprover/lean4#2722

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}).

leanprover/lean4#2783

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:

  • switching to using explicit lemmas that have the intended level of application
  • (config := { unfoldPartialApp := true }) in some places, to recover the old behaviour
  • Using @[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>

Diff
@@ -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
chore: cleanup some spaces (#7490)

Purely cosmetic PR

Diff
@@ -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]
chore: only four spaces for subsequent lines (#7286)

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -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
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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
 
chore: remove superfluous parentheses in calls to 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>

Diff
@@ -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)]
chore: formatting issues (#4947)

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>

Diff
@@ -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
chore: tidy various files (#3124)
Diff
@@ -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
feat: port Data.Holor (#1669)

Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Komyyy <pol_tta@outlook.jp>

Dependencies 3 + 203

204 files ported (98.6%)
88771 lines ported (98.8%)
Show graph

The unported dependencies are