Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓to navigate, Ctrl+🖱️to focus. On Mac, use Cmdinstead of Ctrl.
/-
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.8
γ
:
Type _: Type (?u.4846+1)
Type _
} namespace List theorem
injOn_insertNth_index_of_not_mem: ∀ {α : Type u_1} (l : List α) (x : α), ¬x lSet.InjOn (fun k => insertNth k x l) { n | n length l }
injOn_insertNth_index_of_not_mem
(
l: List α
l
:
List: Type ?u.20 → Type ?u.20
List
α: Type ?u.11
α
) (
x: α
x
:
α: Type ?u.11
α
) (
hx: ¬x l
hx
:
x: α
x
l: List α
l
) :
Set.InjOn: {α : Type ?u.43} → {β : Type ?u.42} → (αβ) → Set αProp
Set.InjOn
(fun
k: ?m.47
k
=>
insertNth: {α : Type ?u.49} → αList αList α
insertNth
k: ?m.47
k
x: α
x
l: List α
l
) {
n: ?m.59
n
|
n: ?m.59
n
l: List α
l
.
length: {α : Type ?u.62} → List α
length
} :=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx: ¬x l


Set.InjOn (fun k => insertNth k x l) { n | n length l }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hx: ¬x []


nil
Set.InjOn (fun k => insertNth k x []) { n | n length [] }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.InjOn (fun k => insertNth k x tl) { n | n length tl }

hx: ¬x hd :: tl


cons
Set.InjOn (fun k => insertNth k x (hd :: tl)) { n | n length (hd :: tl) }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx: ¬x l


Set.InjOn (fun k => insertNth k x l) { n | n length l }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hx: ¬x []


nil
Set.InjOn (fun k => insertNth k x []) { n | n length [] }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hx: ¬x []


nil
Set.InjOn (fun k => insertNth k x []) { n | n length [] }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.InjOn (fun k => insertNth k x tl) { n | n length tl }

hx: ¬x hd :: tl


cons
Set.InjOn (fun k => insertNth k x (hd :: tl)) { n | n length (hd :: tl) }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hx: ¬x []

n:

hn: n { n | n length [] }

m:

hm: m { n | n length [] }

a✝: (fun k => insertNth k x []) n = (fun k => insertNth k x []) m


nil
n = m
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hx: ¬x []


nil
Set.InjOn (fun k => insertNth k x []) { n | n length [] }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hx: ¬x []

n, m:

a✝: (fun k => insertNth k x []) n = (fun k => insertNth k x []) m

hn: n = 0

hm: m = 0


nil
n = m
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hx: ¬x []


nil
Set.InjOn (fun k => insertNth k x []) { n | n length [] }

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx: ¬x l


Set.InjOn (fun k => insertNth k x l) { n | n length l }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.InjOn (fun k => insertNth k x tl) { n | n length tl }

hx: ¬x hd :: tl


cons
Set.InjOn (fun k => insertNth k x (hd :: tl)) { n | n length (hd :: tl) }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.InjOn (fun k => insertNth k x tl) { n | n length tl }

hx: ¬x hd :: tl


cons
Set.InjOn (fun k => insertNth k x (hd :: tl)) { n | n length (hd :: tl) }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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


cons
n = m
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.InjOn (fun k => insertNth k x tl) { n | n length tl }

hx: ¬x hd :: tl


cons
Set.InjOn (fun k => insertNth k x (hd :: tl)) { n | n length (hd :: tl) }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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


cons
n = m
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.InjOn (fun k => insertNth k x tl) { n | n length tl }

hx: ¬x hd :: tl


cons
Set.InjOn (fun k => insertNth k x (hd :: tl)) { n | n length (hd :: tl) }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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


cons
n = m
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.InjOn (fun k => insertNth k x tl) { n | n length tl }

hx: ¬x hd :: tl


cons
Set.InjOn (fun k => insertNth k x (hd :: tl)) { n | n length (hd :: tl) }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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 tlSet.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
Nat.succ n✝ = m
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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


cons
n = m
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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 tlSet.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
Nat.succ n✝ = m
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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


cons
n = m
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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 tlSet.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 tlSet.InjOn (fun k => insertNth k x tl) { n | n length tl }

hx: ¬x hd :: tl


cons
Set.InjOn (fun k => insertNth k x (hd :: tl)) { n | n length (hd :: tl) }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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 tlSet.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 tlSet.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 tlSet.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 tlSet.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
Nat.succ n✝¹ = Nat.succ n✝

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.InjOn (fun k => insertNth k x tl) { n | n length tl }

hx: ¬x hd :: tl


cons
Set.InjOn (fun k => insertNth k x (hd :: tl)) { n | n length (hd :: tl) }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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 tlSet.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 tlSet.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 tlSet.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
Nat.succ n✝¹ = Nat.succ n✝

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.InjOn (fun k => insertNth k x tl) { n | n length tl }

hx: ¬x hd :: tl


cons
Set.InjOn (fun k => insertNth k x (hd :: tl)) { n | n length (hd :: tl) }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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 tlSet.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 tlSet.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
Nat.succ n✝¹ = Nat.succ n✝

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.InjOn (fun k => insertNth k x tl) { n | n length tl }

hx: ¬x hd :: tl


cons
Set.InjOn (fun k => insertNth k x (hd :: tl)) { n | n length (hd :: tl) }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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
Nat.succ n✝¹ = Nat.succ n✝
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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
Nat.succ n✝¹ = Nat.succ n✝
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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
Nat.succ n✝¹ = Nat.succ n✝
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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
Nat.succ n✝¹ = Nat.succ n✝
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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
Nat.succ n✝¹ = Nat.succ n✝
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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
n✝¹ = n✝
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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
n✝¹ = n✝
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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
Nat.succ n✝¹ = Nat.succ n✝
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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
n✝¹ = n✝

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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


(fun k => insertNth k x tl) n✝¹ = (fun k => insertNth k x tl) n✝

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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
n✝¹ { n | n length tl }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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
n✝ { n | n length tl }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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
Nat.succ n✝¹ = Nat.succ n✝
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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
n✝¹ { n | n length tl }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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
n✝¹ { n | n length tl }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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
n✝ { n | n length tl }

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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
Nat.succ n✝¹ = Nat.succ n✝
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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
n✝ { n | n length tl }
α: Type u_1

β: Type ?u.14

γ: Type ?u.17

l: List α

x: α

hx✝: ¬x l

hd: α

tl: List α

IH: ¬x tlSet.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
n✝ { n | n length tl }

Goals accomplished! 🐙
#align list.inj_on_insert_nth_index_of_not_mem
List.injOn_insertNth_index_of_not_mem: ∀ {α : Type u_1} (l : List α) (x : α), ¬x lSet.InjOn (fun k => insertNth k x l) { n | n length l }
List.injOn_insertNth_index_of_not_mem
theorem
foldr_range_subset_of_range_subset: ∀ {f : βαα} {g : γαα}, Set.range f Set.range g∀ (a : α), Set.range (foldr f a) Set.range (foldr g a)
foldr_range_subset_of_range_subset
{
f: βαα
f
:
β: Type ?u.2956
β
α: Type ?u.2953
α
α: Type ?u.2953
α
} {
g: γαα
g
:
γ: Type ?u.2959
γ
α: Type ?u.2953
α
α: Type ?u.2953
α
} (hfg :
Set.range: {α : Type ?u.2983} → {ι : Sort ?u.2982} → (ια) → Set α
Set.range
f: βαα
f
Set.range: {α : Type ?u.2995} → {ι : Sort ?u.2994} → (ια) → Set α
Set.range
g: γαα
g
) (
a: α
a
:
α: Type ?u.2953
α
) :
Set.range: {α : Type ?u.3027} → {ι : Sort ?u.3026} → (ια) → Set α
Set.range
(
foldr: {α : Type ?u.3032} → {β : Type ?u.3031} → (αββ) → βList αβ
foldr
f: βαα
f
a: α
a
) ⊆
Set.range: {α : Type ?u.3049} → {ι : Sort ?u.3048} → (ια) → Set α
Set.range
(
foldr: {α : Type ?u.3054} → {β : Type ?u.3053} → (αββ) → βList αβ
foldr
g: γαα
g
a: α
a
) :=

Goals accomplished! 🐙
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α


α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α

l: List β


intro
foldr f a l Set.range (foldr g a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α


α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α


intro.nil
foldr f a [] Set.range (foldr g a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α

b: β

l: List β

H: foldr f a l Set.range (foldr g a)


intro.cons
foldr f a (b :: l) Set.range (foldr g a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α


α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α


intro.nil
foldr f a [] Set.range (foldr g a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α


intro.nil
foldr f a [] Set.range (foldr g a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α

b: β

l: List β

H: foldr f a l Set.range (foldr g a)


intro.cons
foldr f a (b :: l) Set.range (foldr g a)

Goals accomplished! 🐙
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α


α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α

b: β

l: List β

H: foldr f a l Set.range (foldr g a)


intro.cons
foldr f a (b :: l) Set.range (foldr g a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α

b: β

l: List β

H: foldr f a l Set.range (foldr g a)


intro.cons
foldr f a (b :: l) Set.range (foldr g a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α

b: β

l: List β

H: foldr f a l Set.range (foldr g a)

c: γ

hgf: g c = f b


intro.cons.intro
foldr f a (b :: l) Set.range (foldr g a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α

b: β

l: List β

H: foldr f a l Set.range (foldr g a)


intro.cons
foldr f a (b :: l) Set.range (foldr g a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α

b: β

l: List β

c: γ

hgf: g c = f b

m: List γ

hgf': foldr g a m = foldr f a l


intro.cons.intro.intro
foldr f a (b :: l) Set.range (foldr g a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α

b: β

l: List β

H: foldr f a l Set.range (foldr g a)


intro.cons
foldr f a (b :: l) Set.range (foldr g a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α

b: β

l: List β

c: γ

hgf: g c = f b

m: List γ

hgf': foldr g a m = foldr f a l


intro.cons.intro.intro
foldr f a (b :: l) Set.range (foldr g a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α

b: β

l: List β

c: γ

hgf: g c = f b

m: List γ

hgf': foldr g a m = foldr f a l


intro.cons.intro.intro
f b (foldr f a l) Set.range (foldr g a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α

b: β

l: List β

c: γ

hgf: g c = f b

m: List γ

hgf': foldr g a m = foldr f a l


intro.cons.intro.intro
foldr f a (b :: l) Set.range (foldr g a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α

b: β

l: List β

c: γ

hgf: g c = f b

m: List γ

hgf': foldr g a m = foldr f a l


intro.cons.intro.intro
g c (foldr f a l) Set.range (foldr g a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α

b: β

l: List β

c: γ

hgf: g c = f b

m: List γ

hgf': foldr g a m = foldr f a l


intro.cons.intro.intro
foldr f a (b :: l) Set.range (foldr g a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α

b: β

l: List β

c: γ

hgf: g c = f b

m: List γ

hgf': foldr g a m = foldr f a l


intro.cons.intro.intro
g c (foldr g a m) Set.range (foldr g a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α

b: β

l: List β

c: γ

hgf: g c = f b

m: List γ

hgf': foldr g a m = foldr f a l


intro.cons.intro.intro
g c (foldr g a m) Set.range (foldr g a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: βαα

g: γαα

hfg: Set.range f Set.range g

a: α

b: β

l: List β

H: foldr f a l Set.range (foldr g a)


intro.cons
foldr f a (b :: l) Set.range (foldr g a)

Goals accomplished! 🐙
#align list.foldr_range_subset_of_range_subset
List.foldr_range_subset_of_range_subset: ∀ {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : βαα} {g : γαα}, Set.range f Set.range g∀ (a : α), Set.range (foldr f a) Set.range (foldr g a)
List.foldr_range_subset_of_range_subset
theorem
foldl_range_subset_of_range_subset: ∀ {f : αβα} {g : αγα}, ((Set.range fun a c => f c a) Set.range fun b c => g c b) → ∀ (a : α), Set.range (foldl f a) Set.range (foldl g a)
foldl_range_subset_of_range_subset
{
f: αβα
f
:
α: Type ?u.3430
α
β: Type ?u.3433
β
α: Type ?u.3430
α
} {
g: αγα
g
:
α: Type ?u.3430
α
γ: Type ?u.3436
γ
α: Type ?u.3430
α
} (
hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b
hfg
: (
Set.range: {α : Type ?u.3460} → {ι : Sort ?u.3459} → (ια) → Set α
Set.range
fun
a: ?m.3465
a
c: ?m.3468
c
=>
f: αβα
f
c: ?m.3468
c
a: ?m.3465
a
) ⊆
Set.range: {α : Type ?u.3477} → {ι : Sort ?u.3476} → (ια) → Set α
Set.range
fun
b: ?m.3483
b
c: ?m.3486
c
=>
g: αγα
g
c: ?m.3486
c
b: ?m.3483
b
) (
a: α
a
:
α: Type ?u.3430
α
) :
Set.range: {α : Type ?u.3514} → {ι : Sort ?u.3513} → (ια) → Set α
Set.range
(
foldl: {α : Type ?u.3519} → {β : Type ?u.3518} → (αβα) → αList βα
foldl
f: αβα
f
a: α
a
) ⊆
Set.range: {α : Type ?u.3536} → {ι : Sort ?u.3535} → (ια) → Set α
Set.range
(
foldl: {α : Type ?u.3541} → {β : Type ?u.3540} → (αβα) → αList βα
foldl
g: αγα
g
a: α
a
) :=

Goals accomplished! 🐙
α: Type u_1

β: Type u_2

γ: Type u_3

f: αβα

g: αγα

hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b

a: α


α: Type u_1

β: Type u_2

γ: Type u_3

f: αβα

g: αγα

hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b

a: α


(Set.range fun l => foldl f a l) Set.range fun l => foldl g a l
α: Type u_1

β: Type u_2

γ: Type u_3

f: αβα

g: αγα

hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b

a: α


α: Type u_1

β: Type u_2

γ: Type u_3

f: αβα

g: αγα

hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b

a: α


(Set.range fun l => foldl f a l) Set.range fun l => foldl g a l
α: Type u_1

β: Type u_2

γ: Type u_3

f: αβα

g: αγα

hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b

a: α


(Set.range fun l => foldl f a l) Set.range fun l => foldr (fun z w => g w z) a (reverse l)
α: Type u_1

β: Type u_2

γ: Type u_3

f: αβα

g: αγα

hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b

a: α


(Set.range fun l => foldl f a l) Set.range fun l => foldl g a l
α: Type u_1

β: Type u_2

γ: Type u_3

f: αβα

g: αγα

hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b

a: α


(Set.range fun l => foldr (fun z w => f w z) a (reverse l)) Set.range fun l => foldr (fun z w => g w z) a (reverse l)
α: Type u_1

β: Type u_2

γ: Type u_3

f: αβα

g: αγα

hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b

a: α


(Set.range fun l => foldr (fun z w => f w z) a (reverse l)) Set.range fun l => foldr (fun z w => g w z) a (reverse l)
α: Type u_1

β: Type u_2

γ: Type u_3

f: αβα

g: αγα

hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b

a: α


α: Type u_1

β: Type u_2

γ: Type u_3

f: αβα

g: αγα

hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b

a: α


Set.range (foldr (fun z w => f w z) a reverse) Set.range (foldr (fun z w => g w z) a reverse)
α: Type u_1

β: Type u_2

γ: Type u_3

f: αβα

g: αγα

hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b

a: α


α: Type u_1

β: Type u_2

γ: Type u_3

f: αβα

g: αγα

hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b

a: α


Set.range (foldr (fun z w => f w z) a reverse) Set.range (foldr (fun z w => g w z) a reverse)
α: Type u_1

β: Type u_2

γ: Type u_3

f: αβα

g: αγα

hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b

a: α


foldr (fun z w => f w z) a '' Set.range reverse foldr (fun z w => g w z) a '' Set.range reverse
α: Type u_1

β: Type u_2

γ: Type u_3

f: αβα

g: αγα

hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b

a: α


Set.range (foldr (fun z w => f w z) a reverse) Set.range (foldr (fun z w => g w z) a reverse)
α: Type u_1

β: Type u_2

γ: Type u_3

f: αβα

g: αγα

hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b

a: α


foldr (fun z w => f w z) a '' Set.univ foldr (fun z w => g w z) a '' Set.univ
α: Type u_1

β: Type u_2

γ: Type u_3

f: αβα

g: αγα

hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b

a: α


Set.range (foldr (fun z w => f w z) a reverse) Set.range (foldr (fun z w => g w z) a reverse)
α: Type u_1

β: Type u_2

γ: Type u_3

f: αβα

g: αγα

hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b

a: α


Set.range (foldr (fun z w => f w z) a) Set.range (foldr (fun z w => g w z) a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: αβα

g: αγα

hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b

a: α


Set.range (foldr (fun z w => f w z) a) Set.range (foldr (fun z w => g w z) a)
α: Type u_1

β: Type u_2

γ: Type u_3

f: αβα

g: αγα

hfg: (Set.range fun a c => f c a) Set.range fun b c => g c b

a: α



Goals accomplished! 🐙
#align list.foldl_range_subset_of_range_subset
List.foldl_range_subset_of_range_subset: ∀ {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : αβα} {g : αγα}, ((Set.range fun a c => f c a) Set.range fun b c => g c b) → ∀ (a : α), Set.range (foldl f a) Set.range (foldl g a)
List.foldl_range_subset_of_range_subset
theorem
foldr_range_eq_of_range_eq: ∀ {f : βαα} {g : γαα}, Set.range f = Set.range g∀ (a : α), Set.range (foldr f a) = Set.range (foldr g a)
foldr_range_eq_of_range_eq
{
f: βαα
f
:
β: Type ?u.4846
β
α: Type ?u.4843
α
α: Type ?u.4843
α
} {
g: γαα
g
:
γ: Type ?u.4849
γ
α: Type ?u.4843
α
α: Type ?u.4843
α
} (hfg :
Set.range: {α : Type ?u.4866} → {ι : Sort ?u.4865} → (ια) → Set α
Set.range
f: βαα
f
=
Set.range: {α : Type ?u.4876} → {ι : Sort ?u.4875} → (ια) → Set α
Set.range
g: γαα
g
) (
a: α
a
:
α: Type ?u.4843
α
) :
Set.range: {α : Type ?u.4893} → {ι : Sort ?u.4892} → (ια) → Set α
Set.range
(
foldr: {α : Type ?u.4897} → {β : Type ?u.4896} → (αββ) → βList αβ
foldr
f: βαα
f
a: α
a
) =
Set.range: {α : Type ?u.4914} → {ι : Sort ?u.4913} → (ια) → Set α
Set.range
(
foldr: {α : Type ?u.4918} → {β : Type ?u.4917} → (αββ) → βList αβ
foldr
g: γαα
g
a: α
a
) := (
foldr_range_subset_of_range_subset: ∀ {α : Type ?u.4940} {β : Type ?u.4941} {γ : Type ?u.4942} {f : βαα} {g : γαα}, Set.range f Set.range g∀ (a : α), Set.range (foldr f a) Set.range (foldr g a)
foldr_range_subset_of_range_subset
hfg.
le: ∀ {α : Type ?u.4948} [inst : Preorder α] {a b : α}, a = ba b
le
a: α
a
).
antisymm: ∀ {α : Type ?u.5269} [inst : HasSubset α] {a b : α} [inst_1 : IsAntisymm α fun x x_1 => x x_1], a bb aa = b
antisymm
(
foldr_range_subset_of_range_subset: ∀ {α : Type ?u.5309} {β : Type ?u.5310} {γ : Type ?u.5311} {f : βαα} {g : γαα}, Set.range f Set.range g∀ (a : α), Set.range (foldr f a) Set.range (foldr g a)
foldr_range_subset_of_range_subset
hfg.
ge: ∀ {α : Type ?u.5317} [inst : Preorder α] {x y : α}, x = yy x
ge
a: α
a
) #align list.foldr_range_eq_of_range_eq
List.foldr_range_eq_of_range_eq: ∀ {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : βαα} {g : γαα}, Set.range f = Set.range g∀ (a : α), Set.range (foldr f a) = Set.range (foldr g a)
List.foldr_range_eq_of_range_eq
theorem
foldl_range_eq_of_range_eq: ∀ {f : αβα} {g : αγα}, ((Set.range fun a c => f c a) = Set.range fun b c => g c b) → ∀ (a : α), Set.range (foldl f a) = Set.range (foldl g a)
foldl_range_eq_of_range_eq
{
f: αβα
f
:
α: Type ?u.5360
α
β: Type ?u.5363
β
α: Type ?u.5360
α
} {
g: αγα
g
:
α: Type ?u.5360
α
γ: Type ?u.5366
γ
α: Type ?u.5360
α
} (
hfg: (Set.range fun a c => f c a) = Set.range fun b c => g c b
hfg
: (
Set.range: {α : Type ?u.5383} → {ι : Sort ?u.5382} → (ια) → Set α
Set.range
fun
a: ?m.5387
a
c: ?m.5390
c
=>
f: αβα
f
c: ?m.5390
c
a: ?m.5387
a
) =
Set.range: {α : Type ?u.5398} → {ι : Sort ?u.5397} → (ια) → Set α
Set.range
fun
b: ?m.5402
b
c: ?m.5405
c
=>
g: αγα
g
c: ?m.5405
c
b: ?m.5402
b
) (
a: α
a
:
α: Type ?u.5360
α
) :
Set.range: {α : Type ?u.5420} → {ι : Sort ?u.5419} → (ια) → Set α
Set.range
(
foldl: {α : Type ?u.5424} → {β : Type ?u.5423} → (αβα) → αList βα
foldl
f: αβα
f
a: α
a
) =
Set.range: {α : Type ?u.5441} → {ι : Sort ?u.5440} → (ια) → Set α
Set.range
(
foldl: {α : Type ?u.5445} → {β : Type ?u.5444} → (αβα) → αList βα
foldl
g: αγα
g
a: α
a
) := (
foldl_range_subset_of_range_subset: ∀ {α : Type ?u.5467} {β : Type ?u.5468} {γ : Type ?u.5469} {f : αβα} {g : αγα}, ((Set.range fun a c => f c a) Set.range fun b c => g c b) → ∀ (a : α), Set.range (foldl f a) Set.range (foldl g a)
foldl_range_subset_of_range_subset
hfg: (Set.range fun a c => f c a) = Set.range fun b c => g c b
hfg
.
le: ∀ {α : Type ?u.5475} [inst : Preorder α] {a b : α}, a = ba b
le
a: α
a
).
antisymm: ∀ {α : Type ?u.5804} [inst : HasSubset α] {a b : α} [inst_1 : IsAntisymm α fun x x_1 => x x_1], a bb aa = b
antisymm
(
foldl_range_subset_of_range_subset: ∀ {α : Type ?u.5864} {β : Type ?u.5865} {γ : Type ?u.5866} {f : αβα} {g : αγα}, ((Set.range fun a c => f c a) Set.range fun b c => g c b) → ∀ (a : α), Set.range (foldl f a) Set.range (foldl g a)
foldl_range_subset_of_range_subset
hfg: (Set.range fun a c => f c a) = Set.range fun b c => g c b
hfg
.
ge: ∀ {α : Type ?u.5872} [inst : Preorder α] {x y : α}, x = yy x
ge
a: α
a
) #align list.foldl_range_eq_of_range_eq
List.foldl_range_eq_of_range_eq: ∀ {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : αβα} {g : αγα}, ((Set.range fun a c => f c a) = Set.range fun b c => g c b) → ∀ (a : α), Set.range (foldl f a) = Set.range (foldl g a)
List.foldl_range_eq_of_range_eq
end List