data.pfunctor.multivariate.WMathlib.Data.PFunctor.Multivariate.W

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)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -3,7 +3,7 @@ Copyright (c) 2018 Jeremy Avigad. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Jeremy Avigad, Simon Hudon
 -/
-import Data.Pfunctor.Multivariate.Basic
+import Data.PFunctor.Multivariate.Basic
 
 #align_import data.pfunctor.multivariate.W from "leanprover-community/mathlib"@"23aa88e32dcc9d2a24cca7bc23268567ed4cd7d6"
 
Diff
@@ -255,9 +255,9 @@ theorem w_ind {α : TypeVec n} {C : P.W α → Prop}
   intro x; cases' x with a f
   apply @Wp_ind n P α fun a f => C ⟨a, f⟩; dsimp
   intro a f f' ih'
-  dsimp [W_mk] at ih 
+  dsimp [W_mk] at ih
   let ih'' := ih a (P.W_path_dest_left f') fun i => ⟨f i, P.W_path_dest_right f' i⟩
-  dsimp at ih'' ; rw [W_path_cases_on_eta] at ih'' 
+  dsimp at ih''; rw [W_path_cases_on_eta] at ih''
   apply ih''
   apply ih'
 #align mvpfunctor.W_ind MvPFunctor.w_ind
Diff
@@ -3,7 +3,7 @@ Copyright (c) 2018 Jeremy Avigad. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Jeremy Avigad, Simon Hudon
 -/
-import Mathbin.Data.Pfunctor.Multivariate.Basic
+import Data.Pfunctor.Multivariate.Basic
 
 #align_import data.pfunctor.multivariate.W from "leanprover-community/mathlib"@"23aa88e32dcc9d2a24cca7bc23268567ed4cd7d6"
 
Diff
@@ -2,14 +2,11 @@
 Copyright (c) 2018 Jeremy Avigad. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Jeremy Avigad, Simon Hudon
-
-! This file was ported from Lean 3 source module data.pfunctor.multivariate.W
-! leanprover-community/mathlib commit 23aa88e32dcc9d2a24cca7bc23268567ed4cd7d6
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Data.Pfunctor.Multivariate.Basic
 
+#align_import data.pfunctor.multivariate.W from "leanprover-community/mathlib"@"23aa88e32dcc9d2a24cca7bc23268567ed4cd7d6"
+
 /-!
 # The W construction as a multivariate polynomial functor.
 
Diff
@@ -126,7 +126,7 @@ theorem wPathDestRight_wPathCasesOn {α : TypeVec n} {a : P.A} {f : P.getLast.B
 #print MvPFunctor.wPathCasesOn_eta /-
 theorem wPathCasesOn_eta {α : TypeVec n} {a : P.A} {f : P.getLast.B a → P.getLast.W}
     (h : P.WPath ⟨a, f⟩ ⟹ α) : P.wPathCasesOn (P.wPathDestLeft h) (P.wPathDestRight h) = h := by
-  ext (i x) <;> cases x <;> rfl
+  ext i x <;> cases x <;> rfl
 #align mvpfunctor.W_path_cases_on_eta MvPFunctor.wPathCasesOn_eta
 -/
 
@@ -134,7 +134,7 @@ theorem wPathCasesOn_eta {α : TypeVec n} {a : P.A} {f : P.getLast.B a → P.get
 theorem comp_wPathCasesOn {α β : TypeVec n} (h : α ⟹ β) {a : P.A} {f : P.getLast.B a → P.getLast.W}
     (g' : P.drop.B a ⟹ α) (g : ∀ j : P.getLast.B a, P.WPath (f j) ⟹ α) :
     h ⊚ P.wPathCasesOn g' g = P.wPathCasesOn (h ⊚ g') fun i => h ⊚ g i := by
-  ext (i x) <;> cases x <;> rfl
+  ext i x <;> cases x <;> rfl
 #align mvpfunctor.comp_W_path_cases_on MvPFunctor.comp_wPathCasesOn
 -/
 
Diff
@@ -107,28 +107,36 @@ def wPathDestRight {α : TypeVec n} {a : P.A} {f : P.getLast.B a → P.getLast.W
 #align mvpfunctor.W_path_dest_right MvPFunctor.wPathDestRight
 -/
 
+#print MvPFunctor.wPathDestLeft_wPathCasesOn /-
 theorem wPathDestLeft_wPathCasesOn {α : TypeVec n} {a : P.A} {f : P.getLast.B a → P.getLast.W}
     (g' : P.drop.B a ⟹ α) (g : ∀ j : P.getLast.B a, P.WPath (f j) ⟹ α) :
     P.wPathDestLeft (P.wPathCasesOn g' g) = g' :=
   rfl
 #align mvpfunctor.W_path_dest_left_W_path_cases_on MvPFunctor.wPathDestLeft_wPathCasesOn
+-/
 
+#print MvPFunctor.wPathDestRight_wPathCasesOn /-
 theorem wPathDestRight_wPathCasesOn {α : TypeVec n} {a : P.A} {f : P.getLast.B a → P.getLast.W}
     (g' : P.drop.B a ⟹ α) (g : ∀ j : P.getLast.B a, P.WPath (f j) ⟹ α) :
     P.wPathDestRight (P.wPathCasesOn g' g) = g :=
   rfl
 #align mvpfunctor.W_path_dest_right_W_path_cases_on MvPFunctor.wPathDestRight_wPathCasesOn
+-/
 
+#print MvPFunctor.wPathCasesOn_eta /-
 theorem wPathCasesOn_eta {α : TypeVec n} {a : P.A} {f : P.getLast.B a → P.getLast.W}
     (h : P.WPath ⟨a, f⟩ ⟹ α) : P.wPathCasesOn (P.wPathDestLeft h) (P.wPathDestRight h) = h := by
   ext (i x) <;> cases x <;> rfl
 #align mvpfunctor.W_path_cases_on_eta MvPFunctor.wPathCasesOn_eta
+-/
 
+#print MvPFunctor.comp_wPathCasesOn /-
 theorem comp_wPathCasesOn {α β : TypeVec n} (h : α ⟹ β) {a : P.A} {f : P.getLast.B a → P.getLast.W}
     (g' : P.drop.B a ⟹ α) (g : ∀ j : P.getLast.B a, P.WPath (f j) ⟹ α) :
     h ⊚ P.wPathCasesOn g' g = P.wPathCasesOn (h ⊚ g') fun i => h ⊚ g i := by
   ext (i x) <;> cases x <;> rfl
 #align mvpfunctor.comp_W_path_cases_on MvPFunctor.comp_wPathCasesOn
+-/
 
 #print MvPFunctor.wp /-
 /-- Polynomial functor for the W-type of `P`. `A` is a data-less well-founded
@@ -177,6 +185,7 @@ def wpRec {α : TypeVec n} {C : Type _}
 #align mvpfunctor.Wp_rec MvPFunctor.wpRec
 -/
 
+#print MvPFunctor.wpRec_eq /-
 theorem wpRec_eq {α : TypeVec n} {C : Type _}
     (g :
       ∀ (a : P.A) (f : P.getLast.B a → P.getLast.W), P.WPath ⟨a, f⟩ ⟹ α → (P.getLast.B a → C) → C)
@@ -184,7 +193,9 @@ theorem wpRec_eq {α : TypeVec n} {C : Type _}
     P.wpRec g ⟨a, f⟩ f' = g a f f' fun i => P.wpRec g (f i) (P.wPathDestRight f' i) :=
   rfl
 #align mvpfunctor.Wp_rec_eq MvPFunctor.wpRec_eq
+-/
 
+#print MvPFunctor.wp_ind /-
 -- Note: we could replace Prop by Type* and obtain a dependent recursor
 theorem wp_ind {α : TypeVec n} {C : ∀ x : P.getLast.W, P.WPath x ⟹ α → Prop}
     (ih :
@@ -193,6 +204,7 @@ theorem wp_ind {α : TypeVec n} {C : ∀ x : P.getLast.W, P.WPath x ⟹ α → P
     ∀ (x : P.getLast.W) (f' : P.WPath x ⟹ α), C x f'
   | ⟨a, f⟩, f' => ih a f f' fun i => Wp_ind _ _
 #align mvpfunctor.Wp_ind MvPFunctor.wp_ind
+-/
 
 /-!
 Now think of W as defined inductively by the data ⟨a, f', f⟩ where
@@ -223,6 +235,7 @@ def wRec {α : TypeVec n} {C : Type _}
 #align mvpfunctor.W_rec MvPFunctor.wRec
 -/
 
+#print MvPFunctor.wRec_eq /-
 /-- Defining equation for the recursor of `W` -/
 theorem wRec_eq {α : TypeVec n} {C : Type _}
     (g : ∀ a : P.A, P.drop.B a ⟹ α → (P.getLast.B a → P.W α) → (P.getLast.B a → C) → C) (a : P.A)
@@ -233,6 +246,7 @@ theorem wRec_eq {α : TypeVec n} {C : Type _}
   dsimp only [W_path_dest_left_W_path_cases_on, W_path_dest_right_W_path_cases_on]
   congr <;> ext1 i <;> cases f i <;> rfl
 #align mvpfunctor.W_rec_eq MvPFunctor.wRec_eq
+-/
 
 #print MvPFunctor.w_ind /-
 /-- Induction principle for `W` -/
Diff
@@ -244,9 +244,9 @@ theorem w_ind {α : TypeVec n} {C : P.W α → Prop}
   intro x; cases' x with a f
   apply @Wp_ind n P α fun a f => C ⟨a, f⟩; dsimp
   intro a f f' ih'
-  dsimp [W_mk] at ih
+  dsimp [W_mk] at ih 
   let ih'' := ih a (P.W_path_dest_left f') fun i => ⟨f i, P.W_path_dest_right f' i⟩
-  dsimp at ih''; rw [W_path_cases_on_eta] at ih''
+  dsimp at ih'' ; rw [W_path_cases_on_eta] at ih'' 
   apply ih''
   apply ih'
 #align mvpfunctor.W_ind MvPFunctor.w_ind
Diff
@@ -58,7 +58,7 @@ namespace MvPFunctor
 
 open TypeVec
 
-open MvFunctor
+open scoped MvFunctor
 
 variable {n : ℕ} (P : MvPFunctor.{u} (n + 1))
 
Diff
@@ -107,47 +107,23 @@ def wPathDestRight {α : TypeVec n} {a : P.A} {f : P.getLast.B a → P.getLast.W
 #align mvpfunctor.W_path_dest_right MvPFunctor.wPathDestRight
 -/
 
-/- warning: mvpfunctor.W_path_dest_left_W_path_cases_on -> MvPFunctor.wPathDestLeft_wPathCasesOn is a dubious translation:
-lean 3 declaration is
-  forall {n : Nat} (P : MvPFunctor.{u1} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) {α : TypeVec.{u2} n} {a : MvPFunctor.A.{u1} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))) P} {f : (PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) -> (PFunctor.W.{u1} (MvPFunctor.last.{u1} n P))} (g' : TypeVec.Arrow.{u1, u2} n (MvPFunctor.b.{u1} n (MvPFunctor.drop.{u1} n P) a) α) (g : forall (j : PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a), TypeVec.Arrow.{u1, u2} n (MvPFunctor.WPath.{u1} n P (f j)) α), Eq.{max 1 (succ u1) (succ u2)} (TypeVec.Arrow.{u1, u2} n (MvPFunctor.b.{u1} n (MvPFunctor.drop.{u1} n P) a) α) (MvPFunctor.wPathDestLeft.{u1, u2} n P α a (fun (j : PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) => f j) (MvPFunctor.wPathCasesOn.{u1, u2} n P α a (fun (j : PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) => f j) g' g)) g'
-but is expected to have type
-  forall {n : Nat} (P : MvPFunctor.{u2} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) {α : TypeVec.{u1} n} {a : MvPFunctor.A.{u2} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) P} {f : (PFunctor.B.{u2} (MvPFunctor.last.{u2} n P) a) -> (PFunctor.W.{u2} (MvPFunctor.last.{u2} n P))} (g' : TypeVec.Arrow.{u2, u1} n (MvPFunctor.B.{u2} n (MvPFunctor.drop.{u2} n P) a) α) (g : forall (j : PFunctor.B.{u2} (MvPFunctor.last.{u2} n P) a), TypeVec.Arrow.{u2, u1} n (MvPFunctor.WPath.{u2} n P (f j)) α), Eq.{max (succ u2) (succ u1)} (TypeVec.Arrow.{u2, u1} n (MvPFunctor.B.{u2} n (MvPFunctor.drop.{u2} n P) a) α) (MvPFunctor.wPathDestLeft.{u2, u1} n P α a (fun (j : PFunctor.B.{u2} (MvPFunctor.last.{u2} n P) a) => f j) (MvPFunctor.wPathCasesOn.{u2, u1} n P α a (fun (j : PFunctor.B.{u2} (MvPFunctor.last.{u2} n P) a) => f j) g' g)) g'
-Case conversion may be inaccurate. Consider using '#align mvpfunctor.W_path_dest_left_W_path_cases_on MvPFunctor.wPathDestLeft_wPathCasesOnₓ'. -/
 theorem wPathDestLeft_wPathCasesOn {α : TypeVec n} {a : P.A} {f : P.getLast.B a → P.getLast.W}
     (g' : P.drop.B a ⟹ α) (g : ∀ j : P.getLast.B a, P.WPath (f j) ⟹ α) :
     P.wPathDestLeft (P.wPathCasesOn g' g) = g' :=
   rfl
 #align mvpfunctor.W_path_dest_left_W_path_cases_on MvPFunctor.wPathDestLeft_wPathCasesOn
 
-/- warning: mvpfunctor.W_path_dest_right_W_path_cases_on -> MvPFunctor.wPathDestRight_wPathCasesOn is a dubious translation:
-lean 3 declaration is
-  forall {n : Nat} (P : MvPFunctor.{u1} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) {α : TypeVec.{u2} n} {a : MvPFunctor.A.{u1} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))) P} {f : (PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) -> (PFunctor.W.{u1} (MvPFunctor.last.{u1} n P))} (g' : TypeVec.Arrow.{u1, u2} n (MvPFunctor.b.{u1} n (MvPFunctor.drop.{u1} n P) a) α) (g : forall (j : PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a), TypeVec.Arrow.{u1, u2} n (MvPFunctor.WPath.{u1} n P (f j)) α), Eq.{max (succ u1) 1 (succ u1) (succ u2)} (forall (j : PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a), TypeVec.Arrow.{u1, u2} n (MvPFunctor.WPath.{u1} n P (f j)) α) (MvPFunctor.wPathDestRight.{u1, u2} n P α a (fun (j : PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) => f j) (MvPFunctor.wPathCasesOn.{u1, u2} n P α a (fun (j : PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) => f j) g' g)) g
-but is expected to have type
-  forall {n : Nat} (P : MvPFunctor.{u2} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) {α : TypeVec.{u1} n} {a : MvPFunctor.A.{u2} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) P} {f : (PFunctor.B.{u2} (MvPFunctor.last.{u2} n P) a) -> (PFunctor.W.{u2} (MvPFunctor.last.{u2} n P))} (g' : TypeVec.Arrow.{u2, u1} n (MvPFunctor.B.{u2} n (MvPFunctor.drop.{u2} n P) a) α) (g : forall (j : PFunctor.B.{u2} (MvPFunctor.last.{u2} n P) a), TypeVec.Arrow.{u2, u1} n (MvPFunctor.WPath.{u2} n P (f j)) α), Eq.{max (succ u2) (succ u1)} (forall (j : PFunctor.B.{u2} (MvPFunctor.last.{u2} n P) a), TypeVec.Arrow.{u2, u1} n (MvPFunctor.WPath.{u2} n P (f j)) α) (MvPFunctor.wPathDestRight.{u2, u1} n P α a (fun (j : PFunctor.B.{u2} (MvPFunctor.last.{u2} n P) a) => f j) (MvPFunctor.wPathCasesOn.{u2, u1} n P α a (fun (j : PFunctor.B.{u2} (MvPFunctor.last.{u2} n P) a) => f j) g' g)) g
-Case conversion may be inaccurate. Consider using '#align mvpfunctor.W_path_dest_right_W_path_cases_on MvPFunctor.wPathDestRight_wPathCasesOnₓ'. -/
 theorem wPathDestRight_wPathCasesOn {α : TypeVec n} {a : P.A} {f : P.getLast.B a → P.getLast.W}
     (g' : P.drop.B a ⟹ α) (g : ∀ j : P.getLast.B a, P.WPath (f j) ⟹ α) :
     P.wPathDestRight (P.wPathCasesOn g' g) = g :=
   rfl
 #align mvpfunctor.W_path_dest_right_W_path_cases_on MvPFunctor.wPathDestRight_wPathCasesOn
 
-/- warning: mvpfunctor.W_path_cases_on_eta -> MvPFunctor.wPathCasesOn_eta is a dubious translation:
-lean 3 declaration is
-  forall {n : Nat} (P : MvPFunctor.{u1} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) {α : TypeVec.{u2} n} {a : MvPFunctor.A.{u1} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))) P} {f : (PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) -> (PFunctor.W.{u1} (MvPFunctor.last.{u1} n P))} (h : TypeVec.Arrow.{u1, u2} n (MvPFunctor.WPath.{u1} n P (WType.mk.{u1, u1} (PFunctor.A.{u1} (MvPFunctor.last.{u1} n P)) (PFunctor.B.{u1} (MvPFunctor.last.{u1} n P)) a f)) α), Eq.{max 1 (succ u1) (succ u2)} (TypeVec.Arrow.{u1, u2} n (MvPFunctor.WPath.{u1} n P (WType.mk.{u1, u1} (PFunctor.A.{u1} (MvPFunctor.last.{u1} n P)) (PFunctor.B.{u1} (MvPFunctor.last.{u1} n P)) a (fun (j : PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) => f j))) α) (MvPFunctor.wPathCasesOn.{u1, u2} n P α a (fun (j : PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) => f j) (MvPFunctor.wPathDestLeft.{u1, u2} n P α a f h) (MvPFunctor.wPathDestRight.{u1, u2} n P α a f h)) h
-but is expected to have type
-  forall {n : Nat} (P : MvPFunctor.{u2} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) {α : TypeVec.{u1} n} {a : MvPFunctor.A.{u2} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) P} {f : (PFunctor.B.{u2} (MvPFunctor.last.{u2} n P) a) -> (PFunctor.W.{u2} (MvPFunctor.last.{u2} n P))} (h : TypeVec.Arrow.{u2, u1} n (MvPFunctor.WPath.{u2} n P (WType.mk.{u2, u2} (PFunctor.A.{u2} (MvPFunctor.last.{u2} n P)) (PFunctor.B.{u2} (MvPFunctor.last.{u2} n P)) a f)) α), Eq.{max (succ u2) (succ u1)} (TypeVec.Arrow.{u2, u1} n (MvPFunctor.WPath.{u2} n P (WType.mk.{u2, u2} (PFunctor.A.{u2} (MvPFunctor.last.{u2} n P)) (PFunctor.B.{u2} (MvPFunctor.last.{u2} n P)) a (fun (j : PFunctor.B.{u2} (MvPFunctor.last.{u2} n P) a) => f j))) α) (MvPFunctor.wPathCasesOn.{u2, u1} n P α a (fun (j : PFunctor.B.{u2} (MvPFunctor.last.{u2} n P) a) => f j) (MvPFunctor.wPathDestLeft.{u2, u1} n P α a f h) (MvPFunctor.wPathDestRight.{u2, u1} n P α a f h)) h
-Case conversion may be inaccurate. Consider using '#align mvpfunctor.W_path_cases_on_eta MvPFunctor.wPathCasesOn_etaₓ'. -/
 theorem wPathCasesOn_eta {α : TypeVec n} {a : P.A} {f : P.getLast.B a → P.getLast.W}
     (h : P.WPath ⟨a, f⟩ ⟹ α) : P.wPathCasesOn (P.wPathDestLeft h) (P.wPathDestRight h) = h := by
   ext (i x) <;> cases x <;> rfl
 #align mvpfunctor.W_path_cases_on_eta MvPFunctor.wPathCasesOn_eta
 
-/- warning: mvpfunctor.comp_W_path_cases_on -> MvPFunctor.comp_wPathCasesOn is a dubious translation:
-lean 3 declaration is
-  forall {n : Nat} (P : MvPFunctor.{u1} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) {α : TypeVec.{u2} n} {β : TypeVec.{u3} n} (h : TypeVec.Arrow.{u2, u3} n α β) {a : MvPFunctor.A.{u1} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))) P} {f : (PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) -> (PFunctor.W.{u1} (MvPFunctor.last.{u1} n P))} (g' : TypeVec.Arrow.{u1, u2} n (MvPFunctor.b.{u1} n (MvPFunctor.drop.{u1} n P) a) α) (g : forall (j : PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a), TypeVec.Arrow.{u1, u2} n (MvPFunctor.WPath.{u1} n P (f j)) α), Eq.{max 1 (succ u1) (succ u3)} (TypeVec.Arrow.{u1, u3} n (MvPFunctor.WPath.{u1} n P (WType.mk.{u1, u1} (PFunctor.A.{u1} (MvPFunctor.last.{u1} n P)) (PFunctor.B.{u1} (MvPFunctor.last.{u1} n P)) a (fun (j : PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) => f j))) β) (TypeVec.comp.{u1, u2, u3} n (MvPFunctor.WPath.{u1} n P (WType.mk.{u1, u1} (PFunctor.A.{u1} (MvPFunctor.last.{u1} n P)) (PFunctor.B.{u1} (MvPFunctor.last.{u1} n P)) a (fun (j : PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) => f j))) α β h (MvPFunctor.wPathCasesOn.{u1, u2} n P α a (fun (j : PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) => f j) g' g)) (MvPFunctor.wPathCasesOn.{u1, u3} n P β a (fun (j : PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) => f j) (TypeVec.comp.{u1, u2, u3} n (MvPFunctor.b.{u1} n (MvPFunctor.drop.{u1} n P) a) α β h g') (fun (i : PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) => TypeVec.comp.{u1, u2, u3} n (MvPFunctor.WPath.{u1} n P (f i)) α β h (g i)))
-but is expected to have type
-  forall {n : Nat} (P : MvPFunctor.{u3} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) {α : TypeVec.{u2} n} {β : TypeVec.{u1} n} (h : TypeVec.Arrow.{u2, u1} n α β) {a : MvPFunctor.A.{u3} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) P} {f : (PFunctor.B.{u3} (MvPFunctor.last.{u3} n P) a) -> (PFunctor.W.{u3} (MvPFunctor.last.{u3} n P))} (g' : TypeVec.Arrow.{u3, u2} n (MvPFunctor.B.{u3} n (MvPFunctor.drop.{u3} n P) a) α) (g : forall (j : PFunctor.B.{u3} (MvPFunctor.last.{u3} n P) a), TypeVec.Arrow.{u3, u2} n (MvPFunctor.WPath.{u3} n P (f j)) α), Eq.{max (succ u3) (succ u1)} (TypeVec.Arrow.{u3, u1} n (MvPFunctor.WPath.{u3} n P (WType.mk.{u3, u3} (PFunctor.A.{u3} (MvPFunctor.last.{u3} n P)) (PFunctor.B.{u3} (MvPFunctor.last.{u3} n P)) a (fun (j : PFunctor.B.{u3} (MvPFunctor.last.{u3} n P) a) => f j))) β) (TypeVec.comp.{u3, u2, u1} n (MvPFunctor.WPath.{u3} n P (WType.mk.{u3, u3} (PFunctor.A.{u3} (MvPFunctor.last.{u3} n P)) (PFunctor.B.{u3} (MvPFunctor.last.{u3} n P)) a (fun (j : PFunctor.B.{u3} (MvPFunctor.last.{u3} n P) a) => f j))) α β h (MvPFunctor.wPathCasesOn.{u3, u2} n P α a (fun (j : PFunctor.B.{u3} (MvPFunctor.last.{u3} n P) a) => f j) g' g)) (MvPFunctor.wPathCasesOn.{u3, u1} n P β a (fun (j : PFunctor.B.{u3} (MvPFunctor.last.{u3} n P) a) => f j) (TypeVec.comp.{u3, u2, u1} n (MvPFunctor.B.{u3} n (MvPFunctor.drop.{u3} n P) a) α β h g') (fun (i : PFunctor.B.{u3} (MvPFunctor.last.{u3} n P) a) => TypeVec.comp.{u3, u2, u1} n (MvPFunctor.WPath.{u3} n P (f i)) α β h (g i)))
-Case conversion may be inaccurate. Consider using '#align mvpfunctor.comp_W_path_cases_on MvPFunctor.comp_wPathCasesOnₓ'. -/
 theorem comp_wPathCasesOn {α β : TypeVec n} (h : α ⟹ β) {a : P.A} {f : P.getLast.B a → P.getLast.W}
     (g' : P.drop.B a ⟹ α) (g : ∀ j : P.getLast.B a, P.WPath (f j) ⟹ α) :
     h ⊚ P.wPathCasesOn g' g = P.wPathCasesOn (h ⊚ g') fun i => h ⊚ g i := by
@@ -201,12 +177,6 @@ def wpRec {α : TypeVec n} {C : Type _}
 #align mvpfunctor.Wp_rec MvPFunctor.wpRec
 -/
 
-/- warning: mvpfunctor.Wp_rec_eq -> MvPFunctor.wpRec_eq is a dubious translation:
-lean 3 declaration is
-  forall {n : Nat} (P : MvPFunctor.{u1} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) {α : TypeVec.{u2} n} {C : Type.{u3}} (g : forall (a : MvPFunctor.A.{u1} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))) P) (f : (PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) -> (PFunctor.W.{u1} (MvPFunctor.last.{u1} n P))), (TypeVec.Arrow.{u1, u2} n (MvPFunctor.WPath.{u1} n P (WType.mk.{u1, u1} (PFunctor.A.{u1} (MvPFunctor.last.{u1} n P)) (PFunctor.B.{u1} (MvPFunctor.last.{u1} n P)) a f)) α) -> ((PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) -> C) -> C) (a : MvPFunctor.A.{u1} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))) P) (f : (PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) -> (PFunctor.W.{u1} (MvPFunctor.last.{u1} n P))) (f' : TypeVec.Arrow.{u1, u2} n (MvPFunctor.WPath.{u1} n P (WType.mk.{u1, u1} (PFunctor.A.{u1} (MvPFunctor.last.{u1} n P)) (PFunctor.B.{u1} (MvPFunctor.last.{u1} n P)) a f)) α), Eq.{succ u3} C (MvPFunctor.wpRec.{u1, u2, u3} n P α C g (WType.mk.{u1, u1} (PFunctor.A.{u1} (MvPFunctor.last.{u1} n P)) (PFunctor.B.{u1} (MvPFunctor.last.{u1} n P)) a f) f') (g a f f' (fun (i : PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) => MvPFunctor.wpRec.{u1, u2, u3} n P α C g (f i) (MvPFunctor.wPathDestRight.{u1, u2} n P α a f f' i)))
-but is expected to have type
-  forall {n : Nat} (P : MvPFunctor.{u3} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) {α : TypeVec.{u2} n} {C : Type.{u1}} (g : forall (a : MvPFunctor.A.{u3} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) P) (f : (PFunctor.B.{u3} (MvPFunctor.last.{u3} n P) a) -> (PFunctor.W.{u3} (MvPFunctor.last.{u3} n P))), (TypeVec.Arrow.{u3, u2} n (MvPFunctor.WPath.{u3} n P (WType.mk.{u3, u3} (PFunctor.A.{u3} (MvPFunctor.last.{u3} n P)) (PFunctor.B.{u3} (MvPFunctor.last.{u3} n P)) a f)) α) -> ((PFunctor.B.{u3} (MvPFunctor.last.{u3} n P) a) -> C) -> C) (a : MvPFunctor.A.{u3} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) P) (f : (PFunctor.B.{u3} (MvPFunctor.last.{u3} n P) a) -> (PFunctor.W.{u3} (MvPFunctor.last.{u3} n P))) (f' : TypeVec.Arrow.{u3, u2} n (MvPFunctor.WPath.{u3} n P (WType.mk.{u3, u3} (PFunctor.A.{u3} (MvPFunctor.last.{u3} n P)) (PFunctor.B.{u3} (MvPFunctor.last.{u3} n P)) a f)) α), Eq.{succ u1} C (MvPFunctor.wpRec.{u3, u2, u1} n P α C g (WType.mk.{u3, u3} (PFunctor.A.{u3} (MvPFunctor.last.{u3} n P)) (PFunctor.B.{u3} (MvPFunctor.last.{u3} n P)) a f) f') (g a f f' (fun (i : PFunctor.B.{u3} (MvPFunctor.last.{u3} n P) a) => MvPFunctor.wpRec.{u3, u2, u1} n P α C g (f i) (MvPFunctor.wPathDestRight.{u3, u2} n P α a f f' i)))
-Case conversion may be inaccurate. Consider using '#align mvpfunctor.Wp_rec_eq MvPFunctor.wpRec_eqₓ'. -/
 theorem wpRec_eq {α : TypeVec n} {C : Type _}
     (g :
       ∀ (a : P.A) (f : P.getLast.B a → P.getLast.W), P.WPath ⟨a, f⟩ ⟹ α → (P.getLast.B a → C) → C)
@@ -215,12 +185,6 @@ theorem wpRec_eq {α : TypeVec n} {C : Type _}
   rfl
 #align mvpfunctor.Wp_rec_eq MvPFunctor.wpRec_eq
 
-/- warning: mvpfunctor.Wp_ind -> MvPFunctor.wp_ind is a dubious translation:
-lean 3 declaration is
-  forall {n : Nat} (P : MvPFunctor.{u1} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) {α : TypeVec.{u2} n} {C : forall (x : PFunctor.W.{u1} (MvPFunctor.last.{u1} n P)), (TypeVec.Arrow.{u1, u2} n (MvPFunctor.WPath.{u1} n P x) α) -> Prop}, (forall (a : MvPFunctor.A.{u1} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))) P) (f : (PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) -> (PFunctor.W.{u1} (MvPFunctor.last.{u1} n P))) (f' : TypeVec.Arrow.{u1, u2} n (MvPFunctor.WPath.{u1} n P (WType.mk.{u1, u1} (PFunctor.A.{u1} (MvPFunctor.last.{u1} n P)) (PFunctor.B.{u1} (MvPFunctor.last.{u1} n P)) a f)) α), (forall (i : PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a), C (f i) (MvPFunctor.wPathDestRight.{u1, u2} n P α a f f' i)) -> (C (WType.mk.{u1, u1} (PFunctor.A.{u1} (MvPFunctor.last.{u1} n P)) (PFunctor.B.{u1} (MvPFunctor.last.{u1} n P)) a f) f')) -> (forall (x : PFunctor.W.{u1} (MvPFunctor.last.{u1} n P)) (f' : TypeVec.Arrow.{u1, u2} n (MvPFunctor.WPath.{u1} n P x) α), C x f')
-but is expected to have type
-  forall {n : Nat} (P : MvPFunctor.{u2} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) {α : TypeVec.{u1} n} {C : forall (x : PFunctor.W.{u2} (MvPFunctor.last.{u2} n P)), (TypeVec.Arrow.{u2, u1} n (MvPFunctor.WPath.{u2} n P x) α) -> Prop}, (forall (a : MvPFunctor.A.{u2} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) P) (f : (PFunctor.B.{u2} (MvPFunctor.last.{u2} n P) a) -> (PFunctor.W.{u2} (MvPFunctor.last.{u2} n P))) (f' : TypeVec.Arrow.{u2, u1} n (MvPFunctor.WPath.{u2} n P (WType.mk.{u2, u2} (PFunctor.A.{u2} (MvPFunctor.last.{u2} n P)) (PFunctor.B.{u2} (MvPFunctor.last.{u2} n P)) a f)) α), (forall (i : PFunctor.B.{u2} (MvPFunctor.last.{u2} n P) a), C (f i) (MvPFunctor.wPathDestRight.{u2, u1} n P α a f f' i)) -> (C (WType.mk.{u2, u2} (PFunctor.A.{u2} (MvPFunctor.last.{u2} n P)) (PFunctor.B.{u2} (MvPFunctor.last.{u2} n P)) a f) f')) -> (forall (x : PFunctor.W.{u2} (MvPFunctor.last.{u2} n P)) (f' : TypeVec.Arrow.{u2, u1} n (MvPFunctor.WPath.{u2} n P x) α), C x f')
-Case conversion may be inaccurate. Consider using '#align mvpfunctor.Wp_ind MvPFunctor.wp_indₓ'. -/
 -- Note: we could replace Prop by Type* and obtain a dependent recursor
 theorem wp_ind {α : TypeVec n} {C : ∀ x : P.getLast.W, P.WPath x ⟹ α → Prop}
     (ih :
@@ -259,12 +223,6 @@ def wRec {α : TypeVec n} {C : Type _}
 #align mvpfunctor.W_rec MvPFunctor.wRec
 -/
 
-/- warning: mvpfunctor.W_rec_eq -> MvPFunctor.wRec_eq is a dubious translation:
-lean 3 declaration is
-  forall {n : Nat} (P : MvPFunctor.{u1} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) {α : TypeVec.{u1} n} {C : Type.{u2}} (g : forall (a : MvPFunctor.A.{u1} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))) P), (TypeVec.Arrow.{u1, u1} n (MvPFunctor.b.{u1} n (MvPFunctor.drop.{u1} n P) a) α) -> ((PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) -> (MvPFunctor.W.{u1} n P α)) -> ((PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) -> C) -> C) (a : MvPFunctor.A.{u1} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))) P) (f' : TypeVec.Arrow.{u1, u1} n (MvPFunctor.b.{u1} n (MvPFunctor.drop.{u1} n P) a) α) (f : (PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) -> (MvPFunctor.W.{u1} n P α)), Eq.{succ u2} C (MvPFunctor.wRec.{u1, u2} n P α C g (MvPFunctor.wMk.{u1} n P α a f' f)) (g a f' f (fun (i : PFunctor.B.{u1} (MvPFunctor.last.{u1} n P) a) => MvPFunctor.wRec.{u1, u2} n P α C g (f i)))
-but is expected to have type
-  forall {n : Nat} (P : MvPFunctor.{u2} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) {α : TypeVec.{u2} n} {C : Type.{u1}} (g : forall (a : MvPFunctor.A.{u2} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) P), (TypeVec.Arrow.{u2, u2} n (MvPFunctor.B.{u2} n (MvPFunctor.drop.{u2} n P) a) α) -> ((PFunctor.B.{u2} (MvPFunctor.last.{u2} n P) a) -> (MvPFunctor.W.{u2} n P α)) -> ((PFunctor.B.{u2} (MvPFunctor.last.{u2} n P) a) -> C) -> C) (a : MvPFunctor.A.{u2} (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) P) (f' : TypeVec.Arrow.{u2, u2} n (MvPFunctor.B.{u2} n (MvPFunctor.drop.{u2} n P) a) α) (f : (PFunctor.B.{u2} (MvPFunctor.last.{u2} n P) a) -> (MvPFunctor.W.{u2} n P α)), Eq.{succ u1} C (MvPFunctor.wRec.{u2, u1} n P α C g (MvPFunctor.wMk.{u2} n P α a f' f)) (g a f' f (fun (i : PFunctor.B.{u2} (MvPFunctor.last.{u2} n P) a) => MvPFunctor.wRec.{u2, u1} n P α C g (f i)))
-Case conversion may be inaccurate. Consider using '#align mvpfunctor.W_rec_eq MvPFunctor.wRec_eqₓ'. -/
 /-- Defining equation for the recursor of `W` -/
 theorem wRec_eq {α : TypeVec n} {C : Type _}
     (g : ∀ a : P.A, P.drop.B a ⟹ α → (P.getLast.B a → P.W α) → (P.getLast.B a → C) → C) (a : P.A)
Diff
@@ -321,19 +321,11 @@ theorem w_map_wMk {α β : TypeVec n} (g : α ⟹ β) (a : P.A) (f' : P.drop.B a
     (f : P.getLast.B a → P.W α) : g <$$> P.wMk a f' f = P.wMk a (g ⊚ f') fun i => g <$$> f i :=
   by
   show _ = P.W_mk a (g ⊚ f') (MvFunctor.map g ∘ f)
-  have : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩ :=
-    by
-    ext i : 1
-    dsimp [Function.comp]
-    cases f i
-    rfl
+  have : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩ := by ext i : 1;
+    dsimp [Function.comp]; cases f i; rfl
   rw [this]
-  have : f = fun i => ⟨(f i).fst, (f i).snd⟩ := by
-    ext1
-    cases f x
-    rfl
-  rw [this]
-  dsimp
+  have : f = fun i => ⟨(f i).fst, (f i).snd⟩ := by ext1; cases f x; rfl
+  rw [this]; dsimp
   rw [W_mk_eq, W_mk_eq]
   have h := MvPFunctor.map_eq P.Wp g
   rw [h, comp_W_path_cases_on]
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Jeremy Avigad, Simon Hudon
 
 ! This file was ported from Lean 3 source module data.pfunctor.multivariate.W
-! leanprover-community/mathlib commit 14b69e9f3c16630440a2cbd46f1ddad0d561dee7
+! leanprover-community/mathlib commit 23aa88e32dcc9d2a24cca7bc23268567ed4cd7d6
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -13,6 +13,9 @@ import Mathbin.Data.Pfunctor.Multivariate.Basic
 /-!
 # The W construction as a multivariate polynomial functor.
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 W types are well-founded tree-like structures. They are defined
 as the least fixpoint of a polynomial functor.
 

Changes in mathlib4

mathlib3
mathlib4
chore: classify porting notes referring to missing linters (#12098)

Reference the newly created issues #12094 and #12096, as well as the pre-existing #5171. Change all references to #10927 to #5171. Some of these changes were not labelled as "porting note"; change this for good measure.

Diff
@@ -130,7 +130,7 @@ set_option linter.uppercaseLean3 false in
 #align mvpfunctor.Wp MvPFunctor.wp
 
 /-- W-type of `P` -/
--- Porting note: used to have @[nolint has_nonempty_instance]
+-- Porting note(#5171): used to have @[nolint has_nonempty_instance]
 def W (α : TypeVec n) : Type _ :=
   P.wp α
 set_option linter.uppercaseLean3 false in
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
@@ -251,7 +251,7 @@ theorem w_map_wMk {α β : TypeVec n} (g : α ⟹ β) (a : P.A) (f' : P.drop.B a
   show _ = P.wMk a (g ⊚ f') (MvFunctor.map g ∘ f)
   have : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩ := by
     ext i : 1
-    dsimp [Function.comp]
+    dsimp [Function.comp_def]
     cases f i
     rfl
   rw [this]
style: CoeFun for PFunctor.Obj & MvPFunctor.Obj (#7526)
Diff
@@ -36,7 +36,7 @@ Specifically, we define the polynomial functor `wp` as:
  * B := given the tree-like structure `t`, `B t` is a valid path
    (specified inductively by `W_path`) from the root of `t` to any given node.
 
-As a result `wp.Obj α` is made of a dataless tree and a function from
+As a result `wp α` is made of a dataless tree and a function from
 its valid paths to values of `α`
 
 ## Reference
@@ -132,7 +132,7 @@ set_option linter.uppercaseLean3 false in
 /-- W-type of `P` -/
 -- Porting note: used to have @[nolint has_nonempty_instance]
 def W (α : TypeVec n) : Type _ :=
-  P.wp.Obj α
+  P.wp α
 set_option linter.uppercaseLean3 false in
 #align mvpfunctor.W MvPFunctor.W
 
@@ -273,7 +273,7 @@ set_option linter.uppercaseLean3 false in
 Useful to avoid complicated type annotation -/
 @[reducible]
 def objAppend1 {α : TypeVec n} {β : Type u} (a : P.A) (f' : P.drop.B a ⟹ α)
-    (f : P.last.B a → β) : P.Obj (α ::: β) :=
+    (f : P.last.B a → β) : P (α ::: β) :=
   ⟨a, splitFun f' f⟩
 #align mvpfunctor.obj_append1 MvPFunctor.objAppend1
 
@@ -292,13 +292,13 @@ the qpf axioms are expressed in terms of `map` on `P`.
 
 
 /-- Constructor for the W-type of `P` -/
-def wMk' {α : TypeVec n} : P.Obj (α ::: P.W α) → P.W α
+def wMk' {α : TypeVec n} : P (α ::: P.W α) → P.W α
   | ⟨a, f⟩ => P.wMk a (dropFun f) (lastFun f)
 set_option linter.uppercaseLean3 false in
 #align mvpfunctor.W_mk' MvPFunctor.wMk'
 
 /-- Destructor for the W-type of `P` -/
-def wDest' {α : TypeVec.{u} n} : P.W α → P.Obj (α.append1 (P.W α)) :=
+def wDest' {α : TypeVec.{u} n} : P.W α → P (α.append1 (P.W α)) :=
   P.wRec fun a f' f _ => ⟨a, splitFun f' f⟩
 set_option linter.uppercaseLean3 false in
 #align mvpfunctor.W_dest' MvPFunctor.wDest'
@@ -308,7 +308,7 @@ theorem wDest'_wMk {α : TypeVec n} (a : P.A) (f' : P.drop.B a ⟹ α) (f : P.la
 set_option linter.uppercaseLean3 false in
 #align mvpfunctor.W_dest'_W_mk MvPFunctor.wDest'_wMk
 
-theorem wDest'_wMk' {α : TypeVec n} (x : P.Obj (α.append1 (P.W α))) : P.wDest' (P.wMk' x) = x := by
+theorem wDest'_wMk' {α : TypeVec n} (x : P (α.append1 (P.W α))) : P.wDest' (P.wMk' x) = x := by
   cases' x with a f; rw [wMk', wDest'_wMk, split_dropFun_lastFun]
 set_option linter.uppercaseLean3 false in
 #align mvpfunctor.W_dest'_W_mk' MvPFunctor.wDest'_wMk'
chore: remove many Type _ before the colon (#7718)

We have turned to Type* instead of Type _, but many of them remained in mathlib because the straight replacement did not work. In general, having Type _ before the colon is a code smell, though, as it hides which types should be in the same universe and which shouldn't, and is not very robust.

This PR replaces most of the remaining Type _ before the colon (except those in category theory) by Type* or Type u. This has uncovered a few bugs (where declarations were not as polymorphic as they should be).

I had to increase heartbeats at two places when replacing Type _ by Type*, but I think it's worth it as it's really more robust.

Diff
@@ -272,7 +272,7 @@ set_option linter.uppercaseLean3 false in
 /-- Constructor of a value of `P.obj (α ::: β)` from components.
 Useful to avoid complicated type annotation -/
 @[reducible]
-def objAppend1 {α : TypeVec n} {β : Type _} (a : P.A) (f' : P.drop.B a ⟹ α)
+def objAppend1 {α : TypeVec n} {β : Type u} (a : P.A) (f' : P.drop.B a ⟹ α)
     (f : P.last.B a → β) : P.Obj (α ::: β) :=
   ⟨a, splitFun f' f⟩
 #align mvpfunctor.obj_append1 MvPFunctor.objAppend1
chore: remove unused simps (#6632)

Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -219,7 +219,7 @@ theorem w_ind {α : TypeVec n} {C : P.W α → Prop}
         (∀ i, C (f i)) → C (P.wMk a f' f)) :
     ∀ x, C x := by
   intro x; cases' x with a f
-  apply @wp_ind n P α fun a f => C ⟨a, f⟩; dsimp
+  apply @wp_ind n P α fun a f => C ⟨a, f⟩
   intro a f f' ih'
   dsimp [wMk] at ih
   let ih'' := ih a (P.wPathDestLeft f') fun i => ⟨f i, P.wPathDestRight f' i⟩
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -152,21 +152,21 @@ def wpMk {α : TypeVec n} (a : P.A) (f : P.last.B a → P.last.W) (f' : P.WPath
 set_option linter.uppercaseLean3 false in
 #align mvpfunctor.Wp_mk MvPFunctor.wpMk
 
-def wpRec {α : TypeVec n} {C : Type _}
+def wpRec {α : TypeVec n} {C : Type*}
     (g : ∀ (a : P.A) (f : P.last.B a → P.last.W), P.WPath ⟨a, f⟩ ⟹ α → (P.last.B a → C) → C) :
     ∀ (x : P.last.W) (_ : P.WPath x ⟹ α), C
   | ⟨a, f⟩, f' => g a f f' fun i => wpRec g (f i) (P.wPathDestRight f' i)
 set_option linter.uppercaseLean3 false in
 #align mvpfunctor.Wp_rec MvPFunctor.wpRec
 
-theorem wpRec_eq {α : TypeVec n} {C : Type _}
+theorem wpRec_eq {α : TypeVec n} {C : Type*}
     (g : ∀ (a : P.A) (f : P.last.B a → P.last.W), P.WPath ⟨a, f⟩ ⟹ α → (P.last.B a → C) → C)
     (a : P.A) (f : P.last.B a → P.last.W) (f' : P.WPath ⟨a, f⟩ ⟹ α) :
     P.wpRec g ⟨a, f⟩ f' = g a f f' fun i => P.wpRec g (f i) (P.wPathDestRight f' i) := rfl
 set_option linter.uppercaseLean3 false in
 #align mvpfunctor.Wp_rec_eq MvPFunctor.wpRec_eq
 
--- Note: we could replace Prop by Type _ and obtain a dependent recursor
+-- Note: we could replace Prop by Type* and obtain a dependent recursor
 theorem wp_ind {α : TypeVec n} {C : ∀ x : P.last.W, P.WPath x ⟹ α → Prop}
     (ih : ∀ (a : P.A) (f : P.last.B a → P.last.W) (f' : P.WPath ⟨a, f⟩ ⟹ α),
         (∀ i : P.last.B a, C (f i) (P.wPathDestRight f' i)) → C ⟨a, f⟩ f') :
@@ -192,7 +192,7 @@ set_option linter.uppercaseLean3 false in
 #align mvpfunctor.W_mk MvPFunctor.wMk
 
 /-- Recursor for `W` -/
-def wRec {α : TypeVec n} {C : Type _}
+def wRec {α : TypeVec n} {C : Type*}
     (g : ∀ a : P.A, P.drop.B a ⟹ α → (P.last.B a → P.W α) → (P.last.B a → C) → C) : P.W α → C
   | ⟨a, f'⟩ =>
     let g' (a : P.A) (f : P.last.B a → P.last.W) (h : P.WPath ⟨a, f⟩ ⟹ α)
@@ -203,7 +203,7 @@ set_option linter.uppercaseLean3 false in
 #align mvpfunctor.W_rec MvPFunctor.wRec
 
 /-- Defining equation for the recursor of `W` -/
-theorem wRec_eq {α : TypeVec n} {C : Type _}
+theorem wRec_eq {α : TypeVec n} {C : Type*}
     (g : ∀ a : P.A, P.drop.B a ⟹ α → (P.last.B a → P.W α) → (P.last.B a → C) → C) (a : P.A)
     (f' : P.drop.B a ⟹ α) (f : P.last.B a → P.W α) :
     P.wRec g (P.wMk a f' f) = g a f' f fun i => P.wRec g (f i) := by
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,14 +2,11 @@
 Copyright (c) 2018 Jeremy Avigad. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Jeremy Avigad, Simon Hudon
-
-! This file was ported from Lean 3 source module data.pfunctor.multivariate.W
-! leanprover-community/mathlib commit dc6c365e751e34d100e80fe6e314c3c3e0fd2988
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Data.PFunctor.Multivariate.Basic
 
+#align_import data.pfunctor.multivariate.W from "leanprover-community/mathlib"@"dc6c365e751e34d100e80fe6e314c3c3e0fd2988"
+
 /-!
 # The W construction as a multivariate polynomial functor.
 
chore: remove occurrences of semicolon after space (#5713)

This is the second half of the changes originally in #5699, removing all occurrences of ; after a space and implementing a linter rule to enforce it.

In most cases this 2-character substring has a space after it, so the following command was run first:

find . -type f -name "*.lean" -exec sed -i -E 's/ ; /; /g' {} \;

The remaining cases were few enough in number that they were done manually.

Diff
@@ -111,14 +111,14 @@ set_option linter.uppercaseLean3 false in
 
 theorem wPathCasesOn_eta {α : TypeVec n} {a : P.A} {f : P.last.B a → P.last.W}
     (h : P.WPath ⟨a, f⟩ ⟹ α) : P.wPathCasesOn (P.wPathDestLeft h) (P.wPathDestRight h) = h := by
-  ext i x ; cases x <;> rfl
+  ext i x; cases x <;> rfl
 set_option linter.uppercaseLean3 false in
 #align mvpfunctor.W_path_cases_on_eta MvPFunctor.wPathCasesOn_eta
 
 theorem comp_wPathCasesOn {α β : TypeVec n} (h : α ⟹ β) {a : P.A} {f : P.last.B a → P.last.W}
     (g' : P.drop.B a ⟹ α) (g : ∀ j : P.last.B a, P.WPath (f j) ⟹ α) :
     h ⊚ P.wPathCasesOn g' g = P.wPathCasesOn (h ⊚ g') fun i => h ⊚ g i := by
-  ext i x ; cases x <;> rfl
+  ext i x; cases x <;> rfl
 set_option linter.uppercaseLean3 false in
 #align mvpfunctor.comp_W_path_cases_on MvPFunctor.comp_wPathCasesOn
 
@@ -139,7 +139,7 @@ def W (α : TypeVec n) : Type _ :=
 set_option linter.uppercaseLean3 false in
 #align mvpfunctor.W MvPFunctor.W
 
-instance mvfunctorW : MvFunctor P.W := by delta MvPFunctor.W ; infer_instance
+instance mvfunctorW : MvFunctor P.W := by delta MvPFunctor.W; infer_instance
 set_option linter.uppercaseLean3 false in
 #align mvpfunctor.mvfunctor_W MvPFunctor.mvfunctorW
 
@@ -284,7 +284,7 @@ theorem map_objAppend1 {α γ : TypeVec n} (g : α ⟹ γ) (a : P.A) (f' : P.dro
     (f : P.last.B a → P.W α) :
     appendFun g (P.wMap g) <$$> P.objAppend1 a f' f =
       P.objAppend1 a (g ⊚ f') fun x => P.wMap g (f x) :=
-  by rw [objAppend1, objAppend1, map_eq, appendFun, ← splitFun_comp] ; rfl
+  by rw [objAppend1, objAppend1, map_eq, appendFun, ← splitFun_comp]; rfl
 #align mvpfunctor.map_obj_append1 MvPFunctor.map_objAppend1
 
 /-!
@@ -312,7 +312,7 @@ set_option linter.uppercaseLean3 false in
 #align mvpfunctor.W_dest'_W_mk MvPFunctor.wDest'_wMk
 
 theorem wDest'_wMk' {α : TypeVec n} (x : P.Obj (α.append1 (P.W α))) : P.wDest' (P.wMk' x) = x := by
-  cases' x with a f ; rw [wMk', wDest'_wMk, split_dropFun_lastFun]
+  cases' x with a f; rw [wMk', wDest'_wMk, split_dropFun_lastFun]
 set_option linter.uppercaseLean3 false in
 #align mvpfunctor.W_dest'_W_mk' MvPFunctor.wDest'_wMk'
 
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
@@ -111,14 +111,14 @@ set_option linter.uppercaseLean3 false in
 
 theorem wPathCasesOn_eta {α : TypeVec n} {a : P.A} {f : P.last.B a → P.last.W}
     (h : P.WPath ⟨a, f⟩ ⟹ α) : P.wPathCasesOn (P.wPathDestLeft h) (P.wPathDestRight h) = h := by
-  ext (i x) ; cases x <;> rfl
+  ext i x ; cases x <;> rfl
 set_option linter.uppercaseLean3 false in
 #align mvpfunctor.W_path_cases_on_eta MvPFunctor.wPathCasesOn_eta
 
 theorem comp_wPathCasesOn {α β : TypeVec n} (h : α ⟹ β) {a : P.A} {f : P.last.B a → P.last.W}
     (g' : P.drop.B a ⟹ α) (g : ∀ j : P.last.B a, P.WPath (f j) ⟹ α) :
     h ⊚ P.wPathCasesOn g' g = P.wPathCasesOn (h ⊚ g') fun i => h ⊚ g i := by
-  ext (i x) ; cases x <;> rfl
+  ext i x ; cases x <;> rfl
 set_option linter.uppercaseLean3 false in
 #align mvpfunctor.comp_W_path_cases_on MvPFunctor.comp_wPathCasesOn
 
feat: Port Data.PFunctor.Multivariate.W (#2233)

Co-authored-by: Johan Commelin <johan@commelin.net>

Dependencies 6 + 216

217 files ported (97.3%)
95090 lines ported (97.8%)
Show graph

The unported dependencies are