/- Copyright (c) 2021 Yakov Pechersky. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Yakov Pechersky, Yury Kudryashov ! This file was ported from Lean 3 source module data.list.lemmas ! leanprover-community/mathlib commit 2ec920d35348cb2d13ac0e1a2ad9df0fdf1a76b4 ! Please do not edit these lines, except to modify the commit id ! if you have ported upstream changes. -/ import Mathlib.Data.Set.Function import Mathlib.Data.List.Basic /-! # Some lemmas about lists involving sets Split out from `Data.List.Basic` to reduce its dependencies. -/ open List variable {αα: Type ?u.2ββ: Type ?u.3433γ :γ: Type ?u.8Type _} namespace List theoremType _: Type (?u.4846+1)injOn_insertNth_index_of_not_mem (l : Listl: List αα) (α: Type ?u.11x :x: αα) (hx :α: Type ?u.11x ∉x: αl) : Set.InjOn (funl: List αk => insertNthk: ?m.47kk: ?m.47xx: αl) {l: List αn |n: ?m.59n ≤n: ?m.59l.length } :=l: List αGoals accomplished! 🐙Goals accomplished! 🐙α: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x ∈ hd :: tl
n: ℕ
hn: n ∈ { n | n ≤ length (hd :: tl) }
m: ℕ
hm: m ∈ { n | n ≤ length (hd :: tl) }
h: (fun k => insertNth k x (hd :: tl)) n = (fun k => insertNth k x (hd :: tl)) m
consn = mα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x ∈ hd :: tl
n: ℕ
hn: n ≤ length tl + 1
m: ℕ
hm: m ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) n = (fun k => insertNth k x (hd :: tl)) m
consn = mα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
n: ℕ
hn: n ≤ length tl + 1
m: ℕ
hm: m ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) n = (fun k => insertNth k x (hd :: tl)) m
hx: ¬x = hd ∧ ¬x ∈ tl
consn = mα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
m: ℕ
hm: m ≤ length tl + 1
hx: ¬x = hd ∧ ¬x ∈ tl
hn: Nat.zero ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) Nat.zero = (fun k => insertNth k x (hd :: tl)) m
cons.zeroα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
m: ℕ
hm: m ≤ length tl + 1
hx: ¬x = hd ∧ ¬x ∈ tl
n✝: ℕ
hn: Nat.succ n✝ ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝) = (fun k => insertNth k x (hd :: tl)) m
cons.succα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
n: ℕ
hn: n ≤ length tl + 1
m: ℕ
hm: m ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) n = (fun k => insertNth k x (hd :: tl)) m
hx: ¬x = hd ∧ ¬x ∈ tl
consn = mα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
m: ℕ
hm: m ≤ length tl + 1
hx: ¬x = hd ∧ ¬x ∈ tl
hn: Nat.zero ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) Nat.zero = (fun k => insertNth k x (hd :: tl)) m
cons.zeroα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
m: ℕ
hm: m ≤ length tl + 1
hx: ¬x = hd ∧ ¬x ∈ tl
n✝: ℕ
hn: Nat.succ n✝ ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝) = (fun k => insertNth k x (hd :: tl)) m
cons.succα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
n: ℕ
hn: n ≤ length tl + 1
m: ℕ
hm: m ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) n = (fun k => insertNth k x (hd :: tl)) m
hx: ¬x = hd ∧ ¬x ∈ tl
consn = mα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
hn, hm: Nat.zero ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) Nat.zero = (fun k => insertNth k x (hd :: tl)) Nat.zero
cons.zero.zeroα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
hn: Nat.zero ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) Nat.zero = (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝)
cons.zero.succα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
hn, hm: Nat.zero ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) Nat.zero = (fun k => insertNth k x (hd :: tl)) Nat.zero
cons.zero.zeroα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
hn, hm: Nat.zero ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) Nat.zero = (fun k => insertNth k x (hd :: tl)) Nat.zero
cons.zero.zeroα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
hn: Nat.zero ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) Nat.zero = (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝)
cons.zero.succα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝: ℕ
hn: Nat.succ n✝ ≤ length tl + 1
hm: Nat.zero ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝) = (fun k => insertNth k x (hd :: tl)) Nat.zero
cons.succ.zeroα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝¹) = (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝)
cons.succ.succGoals accomplished! 🐙α: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
hn: Nat.zero ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) Nat.zero = (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝)
cons.zero.succα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
hn: Nat.zero ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) Nat.zero = (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝)
cons.zero.succα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝: ℕ
hn: Nat.succ n✝ ≤ length tl + 1
hm: Nat.zero ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝) = (fun k => insertNth k x (hd :: tl)) Nat.zero
cons.succ.zeroα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝¹) = (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝)
cons.succ.succGoals accomplished! 🐙α: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝: ℕ
hn: Nat.succ n✝ ≤ length tl + 1
hm: Nat.zero ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝) = (fun k => insertNth k x (hd :: tl)) Nat.zero
cons.succ.zeroα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝: ℕ
hn: Nat.succ n✝ ≤ length tl + 1
hm: Nat.zero ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝) = (fun k => insertNth k x (hd :: tl)) Nat.zero
cons.succ.zeroα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝¹) = (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝)
cons.succ.succGoals accomplished! 🐙α: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝¹) = (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝)
cons.succ.succα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝¹) = (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝)
cons.succ.succα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: hd :: insertNth n✝¹ x tl = hd :: insertNth n✝ x tl
cons.succ.succα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝¹) = (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝)
cons.succ.succα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: hd :: insertNth n✝¹ x tl = hd :: insertNth n✝ x tl
cons.succ.succα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: hd :: insertNth n✝¹ x tl = hd :: insertNth n✝ x tl
cons.succ.succn✝¹ = n✝α: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: hd :: insertNth n✝¹ x tl = hd :: insertNth n✝ x tl
cons.succ.succn✝¹ = n✝α: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝¹) = (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝)
cons.succ.succα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: hd :: insertNth n✝¹ x tl = hd :: insertNth n✝ x tl
cons.succ.succn✝¹ = n✝Goals accomplished! 🐙Goals accomplished! 🐙α: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: hd :: insertNth n✝¹ x tl = hd :: insertNth n✝ x tl
cons.succ.succ.refine'_1α: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: hd :: insertNth n✝¹ x tl = hd :: insertNth n✝ x tl
cons.succ.succ.refine'_2α: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝¹) = (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝)
cons.succ.succα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: hd :: insertNth n✝¹ x tl = hd :: insertNth n✝ x tl
cons.succ.succ.refine'_1α: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: hd :: insertNth n✝¹ x tl = hd :: insertNth n✝ x tl
cons.succ.succ.refine'_1α: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: hd :: insertNth n✝¹ x tl = hd :: insertNth n✝ x tl
cons.succ.succ.refine'_2Goals accomplished! 🐙α: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝¹) = (fun k => insertNth k x (hd :: tl)) (Nat.succ n✝)
cons.succ.succα: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: hd :: insertNth n✝¹ x tl = hd :: insertNth n✝ x tl
cons.succ.succ.refine'_2α: Type u_1
β: Type ?u.14
γ: Type ?u.17
l: List α
x: α
hx✝: ¬x ∈ l
hd: α
tl: List α
IH: ¬x ∈ tl → Set.InjOn (fun k => insertNth k x tl) { n | n ≤ length tl }
hx: ¬x = hd ∧ ¬x ∈ tl
n✝¹: ℕ
hn: Nat.succ n✝¹ ≤ length tl + 1
n✝: ℕ
hm: Nat.succ n✝ ≤ length tl + 1
h: hd :: insertNth n✝¹ x tl = hd :: insertNth n✝ x tl
cons.succ.succ.refine'_2#align list.inj_on_insert_nth_index_of_not_mem List.injOn_insertNth_index_of_not_mem theoremGoals accomplished! 🐙foldr_range_subset_of_range_subset {f :f: β → α → αβ →β: Type ?u.2956α →α: Type ?u.2953α} {α: Type ?u.2953g :g: γ → α → αγ →γ: Type ?u.2959α →α: Type ?u.2953α} (hfg : Set.rangeα: Type ?u.2953f ⊆ Set.rangef: β → α → αg) (g: γ → α → αa :a: αα) : Set.range (foldrα: Type ?u.2953ff: β → α → αa) ⊆ Set.range (foldra: αgg: γ → α → αa) :=a: αGoals accomplished! 🐙Goals accomplished! 🐙#align list.foldr_range_subset_of_range_subset List.foldr_range_subset_of_range_subset theoremGoals accomplished! 🐙foldl_range_subset_of_range_subset {f :f: α → β → αα →α: Type ?u.3430β →β: Type ?u.3433α} {α: Type ?u.3430g :g: α → γ → αα →α: Type ?u.3430γ →γ: Type ?u.3436α} (hfg : (Set.range funα: Type ?u.3430aa: ?m.3465c =>c: ?m.3468ff: α → β → αcc: ?m.3468a) ⊆ Set.range funa: ?m.3465bb: ?m.3483c =>c: ?m.3486gg: α → γ → αcc: ?m.3486b) (b: ?m.3483a :a: αα) : Set.range (foldlα: Type ?u.3430ff: α → β → αa) ⊆ Set.range (foldla: αgg: α → γ → αa) :=a: αGoals accomplished! 🐙#align list.foldl_range_subset_of_range_subset List.foldl_range_subset_of_range_subset theoremGoals accomplished! 🐙foldr_range_eq_of_range_eq {f :f: β → α → αβ →β: Type ?u.4846α →α: Type ?u.4843α} {α: Type ?u.4843g :g: γ → α → αγ →γ: Type ?u.4849α →α: Type ?u.4843α} (hfg : Set.rangeα: Type ?u.4843f = Set.rangef: β → α → αg) (g: γ → α → αa :a: αα) : Set.range (foldrα: Type ?u.4843ff: β → α → αa) = Set.range (foldra: αgg: γ → α → αa) := (foldr_range_subset_of_range_subset hfg.lea: αa).a: αantisymm (foldr_range_subset_of_range_subset hfg.gea) #align list.foldr_range_eq_of_range_eq List.foldr_range_eq_of_range_eq theorema: αfoldl_range_eq_of_range_eq {f :f: α → β → αα →α: Type ?u.5360β →β: Type ?u.5363α} {α: Type ?u.5360g :g: α → γ → αα →α: Type ?u.5360γ →γ: Type ?u.5366α} (hfg : (Set.range funα: Type ?u.5360aa: ?m.5387c =>c: ?m.5390ff: α → β → αcc: ?m.5390a) = Set.range funa: ?m.5387bb: ?m.5402c =>c: ?m.5405gg: α → γ → αcc: ?m.5405b) (b: ?m.5402a :a: αα) : Set.range (foldlα: Type ?u.5360ff: α → β → αa) = Set.range (foldla: αgg: α → γ → αa) := (foldl_range_subset_of_range_subset hfg.lea: αa).a: αantisymm (foldl_range_subset_of_range_subset hfg.gea) #align list.foldl_range_eq_of_range_eq List.foldl_range_eq_of_range_eq end Lista: α