data.pfunctor.multivariate.W
⟷
Mathlib.Data.PFunctor.Multivariate.W
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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"
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -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"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -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.
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -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` -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -58,7 +58,7 @@ namespace MvPFunctor
open TypeVec
-open MvFunctor
+open scoped MvFunctor
variable {n : ℕ} (P : MvPFunctor.{u} (n + 1))
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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)
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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]
mathlib commit https://github.com/leanprover-community/mathlib/commit/3ade05ac9447ae31a22d2ea5423435e054131240
@@ -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.
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -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
This is the supremum of
along with some minor fixes from failures on nightly-testing as Mathlib master
is merged into it.
Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.
I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0
branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.
In particular this includes adjustments for the Lean PRs
We can get rid of all the
local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)
macros across Mathlib (and in any projects that want to write natural number powers of reals).
Changes the default behaviour of simp
to (config := {decide := false})
. This makes simp
(and consequentially norm_num
) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp
or norm_num
to decide
or rfl
, or adding (config := {decide := true})
.
This changed the behaviour of simp
so that simp [f]
will only unfold "fully applied" occurrences of f
. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true })
. We may in future add a syntax for this, e.g. simp [!f]
; please provide feedback! In the meantime, we have made the following changes:
(config := { unfoldPartialApp := true })
in some places, to recover the old behaviour@[eqns]
to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp
and Function.flip
.This change in Lean may require further changes down the line (e.g. adding the !f
syntax, and/or upstreaming the special treatment for Function.comp
and Function.flip
, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>
@@ -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]
@@ -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'
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.
@@ -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
@@ -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⟩
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -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
@@ -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.
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.
@@ -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'
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>
@@ -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
The unported dependencies are