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) 2019 Seul Baek. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Seul Baek

! This file was ported from Lean 3 source module data.list.func
! leanprover-community/mathlib commit d11893b411025250c8e61ff2f12ccbd7ee35ab15
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Data.Nat.Order.Basic

/-!
# Lists as Functions

Definitions for using lists as finite representations of finitely-supported functions with domain
ℕ.

These include pointwise operations on lists, as well as get and set operations.

## Notations

An index notation is introduced in this file for setting a particular element of a list. With `as`
as a list `m` as an index, and `a` as a new element, the notation is `as {m ↦ a}`.

So, for example
`[1, 3, 5] {1 ↦ 9}` would result in `[1, 9, 5]`

This notation is in the locale `list.func`.
-/


open List

universe u v w

variable {
α: Type u
α
:
Type u: Type (u+1)
Type u
} {
β: Type v
β
:
Type v: Type (v+1)
Type v
} {
γ: Type w
γ
:
Type w: Type (w+1)
Type w
} namespace List namespace Func variable {
a: α
a
:
α: Type u
α
} variable {
as: List α
as
as1: List α
as1
as2: List α
as2
as3: List α
as3
:
List: Type ?u.36927 → Type ?u.36927
List
α: Type u
α
} /-- Elementwise negation of a list -/ def
neg: [inst : Neg α] → (as : List α) → ?m.63 as
neg
[
Neg: Type ?u.56 → Type ?u.56
Neg
α: Type u
α
] (
as: List α
as
:
List: Type ?u.59 → Type ?u.59
List
α: Type u
α
) :=
as: List α
as
.
map: {α : Type ?u.68} → {β : Type ?u.67} → (αβ) → List αList β
map
fun
a: ?m.84
a
↦ -
a: ?m.84
a
#align list.func.neg
List.Func.neg: {α : Type u} → [inst : Neg α] → List αList α
List.Func.neg
variable [
Inhabited: Sort ?u.18210 → Sort (max1?u.18210)
Inhabited
α: Type u
α
] [
Inhabited: Sort ?u.15708 → Sort (max1?u.15708)
Inhabited
β: Type v
β
] /-- Update element of a list by index. If the index is out of range, extend the list with default elements -/ @[simp] def
set: {α : Type u} → [inst : Inhabited α] → αList αList α
set
(
a: α
a
:
α: Type u
α
) :
List: Type ?u.225 → Type ?u.225
List
α: Type u
α
: Type
List: Type ?u.229 → Type ?u.229
List
α: Type u
α
| _ ::
as: List α
as
,
0:
0
=>
a: α
a
::
as: List α
as
| [],
0:
0
=> [
a: α
a
] |
h: α
h
::
as: List α
as
,
k:
k
+ 1 =>
h: α
h
::
set: αList αList α
set
a: α
a
as: List α
as
k:
k
| [],
k:
k
+ 1 =>
default: {α : Sort ?u.460} → [self : Inhabited α] → α
default
::
set: αList αList α
set
a: α
a
(
[]: List ?m.608
[]
:
List: Type ?u.606 → Type ?u.606
List
α: Type u
α
)
k:
k
#align list.func.set
List.Func.set: {α : Type u} → [inst : Inhabited α] → αList αList α
List.Func.set
-- mathport name: list.func.set @[inherit_doc] scoped notation
as: ?m.4355 a
as
" {"
m: ?m.2161
m
" ↦ "
a: ?m.2152
a
"}" =>
List.Func.set: {α : Type u} → [inst : Inhabited α] → αList αList α
List.Func.set
a: ?m.4342
a
as: ?m.4345
as
m: ?m.4348
m
/-- Get element of a list by index. If the index is out of range, return the default element -/ @[simp] def
get: {α : Type u} → [inst : Inhabited α] → List αα
get
:
: Type
List: Type ?u.10879 → Type ?u.10879
List
α: Type u
α
α: Type u
α
| _, [] =>
default: {α : Sort ?u.10905} → [self : Inhabited α] → α
default
|
0:
0
,
a: α
a
:: _ =>
a: α
a
|
n:
n
+ 1, _ ::
as: List α
as
=>
get: List αα
get
n:
n
as: List α
as
#align list.func.get
List.Func.get: {α : Type u} → [inst : Inhabited α] → List αα
List.Func.get
/-- Pointwise equality of lists. If lists are different lengths, compare with the default element. -/ def
Equiv: List αList αProp
Equiv
(
as1: List α
as1
as2: List α
as2
:
List: Type ?u.15714 → Type ?u.15714
List
α: Type u
α
) :
Prop: Type
Prop
:= ∀
m:
m
:
Nat: Type
Nat
,
get: {α : Type ?u.15724} → [inst : Inhabited α] → List αα
get
m:
m
as1: List α
as1
=
get: {α : Type ?u.15735} → [inst : Inhabited α] → List αα
get
m:
m
as2: List α
as2
#align list.func.equiv
List.Func.Equiv: {α : Type u} → [inst : Inhabited α] → List αList αProp
List.Func.Equiv
/-- Pointwise operations on lists. If lists are different lengths, use the default element. -/ @[simp] def
pointwise: {α : Type u} → {β : Type v} → {γ : Type w} → [inst : Inhabited α] → [inst : Inhabited β] → (αβγ) → List αList βList γ
pointwise
(
f: αβγ
f
:
α: Type u
α
β: Type v
β
γ: Type w
γ
) :
List: Type ?u.15785 → Type ?u.15785
List
α: Type u
α
List: Type ?u.15788 → Type ?u.15788
List
β: Type v
β
List: Type ?u.15790 → Type ?u.15790
List
γ: Type w
γ
| [], [] =>
[]: List ?m.15820
[]
| [],
b: β
b
::
bs: List β
bs
=>
map: {α : Type ?u.15852} → {β : Type ?u.15851} → (αβ) → List αList β
map
(
f: αβγ
f
default: {α : Sort ?u.15857} → [self : Inhabited α] → α
default
) (
b: β
b
::
bs: List β
bs
) |
a: α
a
::
as: List α
as
, [] =>
map: {α : Type ?u.16037} → {β : Type ?u.16036} → (αβ) → List αList β
map
(fun
x: ?m.16041
x
f: αβγ
f
x: ?m.16041
x
default: {α : Sort ?u.16043} → [self : Inhabited α] → α
default
) (
a: α
a
::
as: List α
as
) |
a: α
a
::
as: List α
as
,
b: β
b
::
bs: List β
bs
=>
f: αβγ
f
a: α
a
b: β
b
::
pointwise: (αβγ) → List αList βList γ
pointwise
f: αβγ
f
as: List α
as
bs: List β
bs
#align list.func.pointwise
List.Func.pointwise: {α : Type u} → {β : Type v} → {γ : Type w} → [inst : Inhabited α] → [inst : Inhabited β] → (αβγ) → List αList βList γ
List.Func.pointwise
/-- Pointwise addition on lists. If lists are different lengths, use zero. -/ def
add: {α : Type u} → [inst : Zero α] → [inst : Add α] → List αList αList α
add
{
α: Type u
α
:
Type u: Type (u+1)
Type u
} [
Zero: Type ?u.17835 → Type ?u.17835
Zero
α: Type u
α
] [
Add: Type ?u.17838 → Type ?u.17838
Add
α: Type u
α
] :
List: Type ?u.17842 → Type ?u.17842
List
α: Type u
α
List: Type ?u.17845 → Type ?u.17845
List
α: Type u
α
List: Type ?u.17847 → Type ?u.17847
List
α: Type u
α
:= @
pointwise: {α : Type ?u.17854} → {β : Type ?u.17853} → {γ : Type ?u.17852} → [inst : Inhabited α] → [inst : Inhabited β] → (αβγ) → List αList βList γ
pointwise
α: Type u
α
α: Type u
α
α: Type u
α
0: ?m.17866
0
⟩ ⟨
0: ?m.17896
0
(· + ·): ααα
(· + ·)
#align list.func.add
List.Func.add: {α : Type u} → [inst : Zero α] → [inst : Add α] → List αList αList α
List.Func.add
/-- Pointwise subtraction on lists. If lists are different lengths, use zero. -/ def
sub: {α : Type u} → [inst : Zero α] → [inst : Sub α] → List αList αList α
sub
{
α: Type u
α
:
Type u: Type (u+1)
Type u
} [
Zero: Type ?u.18063 → Type ?u.18063
Zero
α: Type u
α
] [
Sub: Type ?u.18066 → Type ?u.18066
Sub
α: Type u
α
] :
List: Type ?u.18070 → Type ?u.18070
List
α: Type u
α
List: Type ?u.18073 → Type ?u.18073
List
α: Type u
α
List: Type ?u.18075 → Type ?u.18075
List
α: Type u
α
:= @
pointwise: {α : Type ?u.18082} → {β : Type ?u.18081} → {γ : Type ?u.18080} → [inst : Inhabited α] → [inst : Inhabited β] → (αβγ) → List αList βList γ
pointwise
α: Type u
α
α: Type u
α
α: Type u
α
0: ?m.18094
0
⟩ ⟨
0: ?m.18124
0
⟩ (@
Sub.sub: {α : Type ?u.18126} → [self : Sub α] → ααα
Sub.sub
α: Type u
α
_) #align list.func.sub
List.Func.sub: {α : Type u} → [inst : Zero α] → [inst : Sub α] → List αList αList α
List.Func.sub
-- set theorem
length_set: ∀ {m : } {as : List α}, length (as {m a}) = max (length as) (m + 1)
length_set
: ∀ {
m:
m
:
: Type
} {
as: List α
as
:
List: Type ?u.18219 → Type ?u.18219
List
α: Type u
α
},
as: List α
as
{
m:
m
a: α
a
}.
length: {α : Type ?u.18233} → List α
length
=
max: {α : Type ?u.18237} → [self : Max α] → ααα
max
as: List α
as
.
length: {α : Type ?u.18240} → List α
length
(
m:
m
+
1: ?m.18248
1
) |
0:
0
, [] =>
rfl: ∀ {α : Sort ?u.18350} {a : α}, a = a
rfl
|
0:
0
,
a: α
a
::
as: List α
as
=>

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α


length ((a :: as) {0 a✝}) = max (length (a :: as)) (0 + 1)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α


length ((a :: as) {0 a✝}) = max (length (a :: as)) (0 + 1)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α


length ((a :: as) {0 a✝}) = length (a :: as)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α


0 + 1 length (a :: as)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α


length ((a :: as) {0 a✝}) = length (a :: as)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α


0 + 1 length (a :: as)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α


length ((a :: as) {0 a✝}) = max (length (a :: as)) (0 + 1)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α


length ((a :: as) {0 a✝}) = length (a :: as)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α


length ((a :: as) {0 a✝}) = length (a :: as)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α


0 + 1 length (a :: as)

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α


length ((a :: as) {0 a✝}) = max (length (a :: as)) (0 + 1)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α


0 + 1 length (a :: as)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α


0 + 1 length (a :: as)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α


α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α


0 + 1 length (a :: as)

Goals accomplished! 🐙
|
m:
m
+ 1, [] =>

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

m:


length ([] {m + 1 a}) = max (length []) (m + 1 + 1)
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

m:

this: length ([] {m a}) = max (length []) (m + 1)


length ([] {m + 1 a}) = max (length []) (m + 1 + 1)
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

m:


length ([] {m + 1 a}) = max (length []) (m + 1 + 1)

Goals accomplished! 🐙
|
m:
m
+ 1, _ ::
as: List α
as
=>

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

m:

head✝: α

as: List α


length ((head✝ :: as) {m + 1 a}) = max (length (head✝ :: as)) (m + 1 + 1)

Goals accomplished! 🐙
#align list.func.length_set
List.Func.length_set: ∀ {α : Type u} {a : α} [inst : Inhabited α] {m : } {as : List α}, length (as {m a}) = max (length as) (m + 1)
List.Func.length_set
-- porting note : @[simp] has been removed since `#lint` says this is theorem
get_nil: ∀ {k : }, get k [] = default
get_nil
{
k:
k
:
: Type
} : (
get: {α : Type ?u.23738} → [inst : Inhabited α] → List αα
get
k:
k
[]: List ?m.23878
[]
:
α: Type u
α
) =
default: {α : Sort ?u.23886} → [self : Inhabited α] → α
default
:=

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

k:


get k [] = default
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β


zero
get Nat.zero [] = default
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n✝:


succ
get (Nat.succ n✝) [] = default
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

k:


get k [] = default
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β


zero
get Nat.zero [] = default
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n✝:


succ
get (Nat.succ n✝) [] = default
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

k:


get k [] = default

Goals accomplished! 🐙
#align list.func.get_nil
List.Func.get_nil: ∀ {α : Type u} [inst : Inhabited α] {k : }, get k [] = default
List.Func.get_nil
theorem
get_eq_default_of_le: ∀ (k : ) {as : List α}, length as kget k as = default
get_eq_default_of_le
: ∀ (
k:
k
:
: Type
) {
as: List α
as
:
List: Type ?u.24274 → Type ?u.24274
List
α: Type u
α
},
as: List α
as
.
length: {α : Type ?u.24279} → List α
length
k:
k
get: {α : Type ?u.24291} → [inst : Inhabited α] → List αα
get
k:
k
as: List α
as
=
default: {α : Sort ?u.24301} → [self : Inhabited α] → α
default
|
0:
0
, [], _ =>
rfl: ∀ {α : Sort ?u.24619} {a : α}, a = a
rfl
|
0:
0
,
a: α
a
::
as: List α
as
,
h1: length (a :: as) 0
h1
=>

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

h1: length (a :: as) 0


get 0 (a :: as) = default

Goals accomplished! 🐙
|
k:
k
+ 1, [], _ =>
rfl: ∀ {α : Sort ?u.24775} {a : α}, a = a
rfl
|
k:
k
+ 1, _ ::
as: List α
as
,
h1: length (head✝ :: as) k + 1
h1
=>

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

k:

head✝: α

as: List α

h1: length (head✝ :: as) k + 1


get (k + 1) (head✝ :: as) = default
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

k:

head✝: α

as: List α

h1: length (head✝ :: as) k + 1


length as k
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

k:

head✝: α

as: List α

h1: length (head✝ :: as) k + 1


get (k + 1) (head✝ :: as) = default
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

k:

head✝: α

as: List α

h1: length (head✝ :: as) k + 1


length as k
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

k:

head✝: α

as: List α

h1: length (head✝ :: as) k + 1


α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

k:

head✝: α

as: List α

h1: length (head✝ :: as) k + 1


α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

k:

head✝: α

as: List α

h1: length (head✝ :: as) k + 1


α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

k:

head✝: α

as: List α

h1: length (head✝ :: as) k + 1


get (k + 1) (head✝ :: as) = default

Goals accomplished! 🐙
#align list.func.get_eq_default_of_le
List.Func.get_eq_default_of_le: ∀ {α : Type u} [inst : Inhabited α] (k : ) {as : List α}, length as kget k as = default
List.Func.get_eq_default_of_le
@[simp] theorem
get_set: ∀ {α : Type u} [inst : Inhabited α] {a : α} {k : } {as : List α}, get k (as {k a}) = a
get_set
{
a: α
a
:
α: Type u
α
} : ∀ {
k:
k
:
: Type
} {
as: List α
as
:
List: Type ?u.25438 → Type ?u.25438
List
α: Type u
α
},
get: {α : Type ?u.25442} → [inst : Inhabited α] → List αα
get
k:
k
(
as: List α
as
{
k:
k
a: α
a
}) =
a: α
a
|
0:
0
,
as: List α
as
=>

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α


get 0 (as {0 a}) = a
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α


nil
get 0 ([] {0 a}) = a
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a, head✝: α

tail✝: List α


cons
get 0 ((head✝ :: tail✝) {0 a}) = a
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α


get 0 (as {0 a}) = a
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α


nil
get 0 ([] {0 a}) = a
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a, head✝: α

tail✝: List α


cons
get 0 ((head✝ :: tail✝) {0 a}) = a
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α


get 0 (as {0 a}) = a

Goals accomplished! 🐙
|
k:
k
+ 1,
as: List α
as
=>

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k:

as: List α


get (k + 1) (as {k + 1 a}) = a
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k:


nil
get (k + 1) ([] {k + 1 a}) = a
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k:

head✝: α

tail✝: List α


cons
get (k + 1) ((head✝ :: tail✝) {k + 1 a}) = a
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k:

as: List α


get (k + 1) (as {k + 1 a}) = a
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k:


nil
get (k + 1) ([] {k + 1 a}) = a
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k:

head✝: α

tail✝: List α


cons
get (k + 1) ((head✝ :: tail✝) {k + 1 a}) = a
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k:

as: List α


get (k + 1) (as {k + 1 a}) = a

Goals accomplished! 🐙
#align list.func.get_set
List.Func.get_set: ∀ {α : Type u} [inst : Inhabited α] {a : α} {k : } {as : List α}, get k (as {k a}) = a
List.Func.get_set
theorem
eq_get_of_mem: ∀ {a : α} {as : List α}, a asn, a = get n as
eq_get_of_mem
{
a: α
a
:
α: Type u
α
} : ∀ {
as: List α
as
:
List: Type ?u.26368 → Type ?u.26368
List
α: Type u
α
},
a: α
a
as: List α
as
→ ∃
n:
n
:
Nat: Type
Nat
,
a: α
a
=
get: {α : Type ?u.26403} → [inst : Inhabited α] → List αα
get
n:
n
as: List α
as
| [],
h: a []
h
=>

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

h: a []


n, a = get n []

Goals accomplished! 🐙
|
b: α
b
::
as: List α
as
,
h: a b :: as
h
=>

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a, b: α

as: List α

h: a b :: as


n, a = get n (b :: as)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a, b: α

as: List α

h: a b :: as


n, a = get n (b :: as)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a, b: α

as: List α

h: a = b a as


n, a = get n (b :: as)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a, b: α

as: List α

h: a = b a as


n, a = get n (b :: as)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a, b: α

as: List α

h: a = b a as


n, a = get n (b :: as)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a, b: α

as: List α

h: a b :: as


n, a = get n (b :: as)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a, b: α

as: List α

h: a = b a as


n, a = get n (b :: as)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a, b: α

as: List α

h: a = b


inl
n, a = get n (b :: as)

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a, b: α

as: List α

h: a = b a as


n, a = get n (b :: as)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a, b: α

as: List α

h: a as


inr
n, a = get n (b :: as)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a, b: α

as: List α

h✝: a as

n:

h: a = get n as


inr.intro
n, a = get n (b :: as)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a, b: α

as: List α

h: a as


inr
n, a = get n (b :: as)

Goals accomplished! 🐙
#noalign list.func.eq_get_of_mem -- porting note : the signature has been changed to correct what was presumably a bug, -- hence the #noalign theorem
mem_get_of_le: ∀ {α : Type u} [inst : Inhabited α] {n : } {as : List α}, n < length asget n as as
mem_get_of_le
: ∀ {
n:
n
:
: Type
} {
as: List α
as
:
List: Type ?u.27084 → Type ?u.27084
List
α: Type u
α
},
n:
n
<
as: List α
as
.
length: {α : Type ?u.27089} → List α
length
get: {α : Type ?u.27115} → [inst : Inhabited α] → List αα
get
n:
n
as: List α
as
as: List α
as
| _, [],
h1: x✝ < length []
h1
=>

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

x✝:

h1: x✝ < length []


get x✝ [] []

Goals accomplished! 🐙
-- porting note : needed to add to `rw [mem_cons] here` in the two cases below -- and in other lemmas (presumably because previously lean could see through the def of `mem` ?) |
0:
0
,
a: α
a
::
as: List α
as
, _ =>

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

x✝: 0 < length (a :: as)


get 0 (a :: as) a :: as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

x✝: 0 < length (a :: as)


get 0 (a :: as) a :: as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

x✝: 0 < length (a :: as)


get 0 (a :: as) = a get 0 (a :: as) as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

x✝: 0 < length (a :: as)


get 0 (a :: as) = a get 0 (a :: as) as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

x✝: 0 < length (a :: as)


get 0 (a :: as) = a get 0 (a :: as) as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

x✝: 0 < length (a :: as)


get 0 (a :: as) a :: as

Goals accomplished! 🐙
|
n:
n
+ 1,
a: α
a
::
as: List α
as
,
h1: n + 1 < length (a :: as)
h1
=>

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: n + 1 < length (a :: as)


get (n + 1) (a :: as) a :: as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: n + 1 < length (a :: as)


get (n + 1) (a :: as) a :: as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: n + 1 < length (a :: as)


get (n + 1) (a :: as) = a get (n + 1) (a :: as) as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: n + 1 < length (a :: as)


get (n + 1) (a :: as) = a get (n + 1) (a :: as) as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: n + 1 < length (a :: as)


get (n + 1) (a :: as) = a get (n + 1) (a :: as) as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: n + 1 < length (a :: as)


get (n + 1) (a :: as) a :: as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: n + 1 < length (a :: as)


h
get (n + 1) (a :: as) as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: n + 1 < length (a :: as)


h
get (n + 1) (a :: as) as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: n + 1 < length (a :: as)


get (n + 1) (a :: as) a :: as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: n + 1 < length (a :: as)


h
get (Nat.add n 0) as as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: n + 1 < length (a :: as)


get (n + 1) (a :: as) a :: as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: n + 1 < length (a :: as)


h.a
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: n + 1 < length (a :: as)


get (n + 1) (a :: as) a :: as

Goals accomplished! 🐙
#align list.func.mem_get_of_le
List.Func.mem_get_of_le: ∀ {α : Type u} [inst : Inhabited α] {n : } {as : List α}, n < length asget n as as
List.Func.mem_get_of_le
theorem
mem_get_of_ne_zero: ∀ {n : } {as : List α}, get n as defaultget n as as
mem_get_of_ne_zero
: ∀ {
n:
n
:
: Type
} {
as: List α
as
:
List: Type ?u.28583 → Type ?u.28583
List
α: Type u
α
},
get: {α : Type ?u.28589} → [inst : Inhabited α] → List αα
get
n:
n
as: List α
as
default: {α : Sort ?u.28736} → [self : Inhabited α] → α
default
get: {α : Type ?u.28891} → [inst : Inhabited α] → List αα
get
n:
n
as: List α
as
as: List α
as
| _, [],
h1: get x✝ [] default
h1
=>

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

x✝:

h1: get x✝ [] default


get x✝ [] []
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

x✝:

h1: get x✝ [] default


h
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

x✝:

h1: get x✝ [] default


h
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

x✝:

h1: get x✝ [] default


get x✝ [] []
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

x✝:

h1: get x✝ [] default


h
get x✝ [] = default
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

x✝:

h1: get x✝ [] default


h
get x✝ [] = default
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

x✝:

h1: get x✝ [] default


get x✝ [] []
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

x✝:

h1: get x✝ [] default


h
get x✝ [] = default
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

x✝:

h1: get x✝ [] default


h
default = default

Goals accomplished! 🐙
|
0:
0
,
a: α
a
::
as: List α
as
, _ =>

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

x✝: get 0 (a :: as) default


get 0 (a :: as) a :: as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

x✝: get 0 (a :: as) default


get 0 (a :: as) a :: as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

x✝: get 0 (a :: as) default


get 0 (a :: as) = a get 0 (a :: as) as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

x✝: get 0 (a :: as) default


get 0 (a :: as) = a get 0 (a :: as) as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

x✝: get 0 (a :: as) default


get 0 (a :: as) = a get 0 (a :: as) as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

x✝: get 0 (a :: as) default


get 0 (a :: as) a :: as

Goals accomplished! 🐙
|
n:
n
+ 1,
a: α
a
::
as: List α
as
,
h1: get (n + 1) (a :: as) default
h1
=>

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: get (n + 1) (a :: as) default


get (n + 1) (a :: as) a :: as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: get (n + 1) (a :: as) default


get (n + 1) (a :: as) a :: as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: get (n + 1) (a :: as) default


get (n + 1) (a :: as) = a get (n + 1) (a :: as) as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: get (n + 1) (a :: as) default


get (n + 1) (a :: as) = a get (n + 1) (a :: as) as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: get (n + 1) (a :: as) default


get (n + 1) (a :: as) = a get (n + 1) (a :: as) as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: get (n + 1) (a :: as) default


get (n + 1) (a :: as) a :: as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: get (n + 1) (a :: as) default


get (Nat.add n 0) as = a get (Nat.add n 0) as as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: get (n + 1) (a :: as) default


get (n + 1) (a :: as) a :: as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: get (n + 1) (a :: as) default


get (Nat.add n 0) as default
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

n:

a: α

as: List α

h1: get (n + 1) (a :: as) default


get (n + 1) (a :: as) a :: as

Goals accomplished! 🐙
#align list.func.mem_get_of_ne_zero
List.Func.mem_get_of_ne_zero: ∀ {α : Type u} [inst : Inhabited α] {n : } {as : List α}, get n as defaultget n as as
List.Func.mem_get_of_ne_zero
theorem
get_set_eq_of_ne: ∀ {α : Type u} [inst : Inhabited α] {a : α} {as : List α} (k m : ), m kget m (as {k a}) = get m as
get_set_eq_of_ne
{
a: α
a
:
α: Type u
α
} : ∀ {
as: List α
as
:
List: Type ?u.30172 → Type ?u.30172
List
α: Type u
α
} (
k:
k
:
: Type
) (
m:
m
:
: Type
),
m:
m
k:
k
get: {α : Type ?u.30184} → [inst : Inhabited α] → List αα
get
m:
m
(
as: List α
as
{
k:
k
a: α
a
}) =
get: {α : Type ?u.30334} → [inst : Inhabited α] → List αα
get
m:
m
as: List α
as
|
as: List α
as
,
0:
0
,
m:
m
,
h1: m 0
h1
=>

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

m:

h1: m 0


get m (as {0 a}) = get m as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

h1: Nat.zero 0


zero
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

n✝:

h1: Nat.succ n✝ 0


succ
get (Nat.succ n✝) (as {0 a}) = get (Nat.succ n✝) as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

m:

h1: m 0


get m (as {0 a}) = get m as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

n✝:

h1: Nat.succ n✝ 0


succ
get (Nat.succ n✝) (as {0 a}) = get (Nat.succ n✝) as
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

m:

h1: m 0


get m (as {0 a}) = get m as
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

n✝:

h1: Nat.succ n✝ 0


succ.nil
get (Nat.succ n✝) ([] {0 a}) = get (Nat.succ n✝) []
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

n✝:

h1: Nat.succ n✝ 0

head✝: α

tail✝: List α


succ.cons
get (Nat.succ n✝) ((head✝ :: tail✝) {0 a}) = get (Nat.succ n✝) (head✝ :: tail✝)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

n✝:

h1: Nat.succ n✝ 0


succ
get (Nat.succ n✝) (as {0 a}) = get (Nat.succ n✝) as
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

n✝:

h1: Nat.succ n✝ 0


succ.nil
get (Nat.succ n✝) ([] {0 a}) = get (Nat.succ n✝) []
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

n✝:

h1: Nat.succ n✝ 0

head✝: α

tail✝: List α


succ.cons
get (Nat.succ n✝) ((head✝ :: tail✝) {0 a}) = get (Nat.succ n✝) (head✝ :: tail✝)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

n✝:

h1: Nat.succ n✝ 0


succ
get (Nat.succ n✝) (as {0 a}) = get (Nat.succ n✝) as

Goals accomplished! 🐙
|
as: List α
as
,
k:
k
+ 1,
m:
m
,
h1: m k + 1
h1
=>

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

k, m:

h1: m k + 1


get m (as {k + 1 a}) = get m as
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: m k + 1


nil
get m ([] {k + 1 a}) = get m []
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: m k + 1

head✝: α

tail✝: List α


cons
get m ((head✝ :: tail✝) {k + 1 a}) = get m (head✝ :: tail✝)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

k, m:

h1: m k + 1


get m (as {k + 1 a}) = get m as
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: m k + 1


nil
get m ([] {k + 1 a}) = get m []
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: m k + 1

head✝: α

tail✝: List α


cons
get m ((head✝ :: tail✝) {k + 1 a}) = get m (head✝ :: tail✝)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

k, m:

h1: m k + 1


get m (as {k + 1 a}) = get m as
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k:

head✝: α

tail✝: List α

h1: Nat.zero k + 1


cons.zero
get Nat.zero ((head✝ :: tail✝) {k + 1 a}) = get Nat.zero (head✝ :: tail✝)
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k:

head✝: α

tail✝: List α

n✝:

h1: Nat.succ n✝ k + 1


cons.succ
get (Nat.succ n✝) ((head✝ :: tail✝) {k + 1 a}) = get (Nat.succ n✝) (head✝ :: tail✝)
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

k, m:

h1: m k + 1


get m (as {k + 1 a}) = get m as
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k:

h1: Nat.zero k + 1


get Nat.zero ([] {k + 1 a}) = get Nat.zero []

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

k, m:

h1: m k + 1


get m (as {k + 1 a}) = get m as
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: Nat.succ m k + 1


get (Nat.succ m) ([] {k + 1 a}) = get (Nat.succ m) []
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: Nat.succ m k + 1


get (Nat.succ m) ([] {k + 1 a}) = get (Nat.succ m) []

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: Nat.succ m k + 1


get m ([] {k a}) = default
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: Nat.succ m k + 1


get m ([] {k a}) = default
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: Nat.succ m k + 1


get m [] = default
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: Nat.succ m k + 1


m k
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: Nat.succ m k + 1


get m ([] {k a}) = default
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: Nat.succ m k + 1


default = default
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: Nat.succ m k + 1


m k
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: Nat.succ m k + 1


m k
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: Nat.succ m k + 1


get m ([] {k a}) = default
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: Nat.succ m k + 1

hc: m = k


α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: Nat.succ m k + 1


get m ([] {k a}) = default
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: Nat.succ m k + 1

hc: m = k


Nat.succ m = k + 1
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: Nat.succ m k + 1


get m ([] {k a}) = default

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k, m:

h1: Nat.succ m k + 1


get (Nat.succ m) ([] {k + 1 a}) = get (Nat.succ m) []

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

k, m:

h1: m k + 1


get m (as {k + 1 a}) = get m as
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k:

head✝: α

tail✝: List α

h1: Nat.zero k + 1


get Nat.zero ((head✝ :: tail✝) {k + 1 a}) = get Nat.zero (head✝ :: tail✝)

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a✝: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

as: List α

k, m:

h1: m k + 1


get m (as {k + 1 a}) = get m as
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k:

head✝: α

tail✝: List α

m:

h1: Nat.succ m k + 1


get (Nat.succ m) ((head✝ :: tail✝) {k + 1 a}) = get (Nat.succ m) (head✝ :: tail✝)
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k:

head✝: α

tail✝: List α

m:

h1: Nat.succ m k + 1


m k
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k:

head✝: α

tail✝: List α

m:

h1: Nat.succ m k + 1


get (Nat.succ m) ((head✝ :: tail✝) {k + 1 a}) = get (Nat.succ m) (head✝ :: tail✝)
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k:

head✝: α

tail✝: List α

m:

h1: Nat.succ m k + 1

hc: m = k


α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k:

head✝: α

tail✝: List α

m:

h1: Nat.succ m k + 1


get (Nat.succ m) ((head✝ :: tail✝) {k + 1 a}) = get (Nat.succ m) (head✝ :: tail✝)
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k:

head✝: α

tail✝: List α

m:

h1: Nat.succ m k + 1

hc: m = k


Nat.succ m = k + 1
α: Type u

β: Type v

γ: Type w

a✝: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

a: α

k:

head✝: α

tail✝: List α

m:

h1: Nat.succ m k + 1


get (Nat.succ m) ((head✝ :: tail✝) {k + 1 a}) = get (Nat.succ m) (head✝ :: tail✝)

Goals accomplished! 🐙
#align list.func.get_set_eq_of_ne
List.Func.get_set_eq_of_ne: ∀ {α : Type u} [inst : Inhabited α] {a : α} {as : List α} (k m : ), m kget m (as {k a}) = get m as
List.Func.get_set_eq_of_ne
theorem
get_map: ∀ {f : αβ} {n : } {as : List α}, n < length asget n (map f as) = f (get n as)
get_map
{
f: αβ
f
:
α: Type u
α
β: Type v
β
} : ∀ {
n:
n
:
: Type
} {
as: List α
as
:
List: Type ?u.32615 → Type ?u.32615
List
α: Type u
α
},
n:
n
<
as: List α
as
.
length: {α : Type ?u.32620} → List α
length
get: {α : Type ?u.32632} → [inst : Inhabited α] → List αα
get
n:
n
(
as: List α
as
.
map: {α : Type ?u.32636} → {β : Type ?u.32635} → (αβ) → List αList β
map
f: αβ
f
) =
f: αβ
f
(
get: {α : Type ?u.32654} → [inst : Inhabited α] → List αα
get
n:
n
as: List α
as
) | _, [],
h: x✝ < length []
h
=>

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a: α

as, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

x✝:

h: x✝ < length []


get x✝ (map f []) = f (get x✝ [])

Goals accomplished! 🐙
|
0:
0
,
a: α
a
::
as: List α
as
, _ =>
rfl: ∀ {α : Sort ?u.32888} {a : α}, a = a
rfl
|
n:
n
+ 1, _ ::
as: List α
as
,
h1: n + 1 < length (head✝ :: as)
h1
=>

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

head✝: α

as: List α

h1: n + 1 < length (head✝ :: as)


get (n + 1) (map f (head✝ :: as)) = f (get (n + 1) (head✝ :: as))
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

head✝: α

as: List α

h1: n + 1 < length (head✝ :: as)


get (n + 1) (map f (head✝ :: as)) = f (get (n + 1) (head✝ :: as))

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

head✝: α

as: List α

h1: n + 1 < length (head✝ :: as)


n < length as
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

head✝: α

as: List α

h1: n + 1 < length (head✝ :: as)


n < length as
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

head✝: α

as: List α

h1: n + 1 < length (head✝ :: as)


α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

head✝: α

as: List α

h1: n + 1 < length (head✝ :: as)


n < length as
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

head✝: α

as: List α

h1: n + 1 < length (head✝ :: as)


α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

head✝: α

as: List α

h1: n + 1 < length (head✝ :: as)


α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

head✝: α

as: List α

h1: n + 1 < length (head✝ :: as)


n < length as

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

head✝: α

as: List α

h1: n + 1 < length (head✝ :: as)


get (n + 1) (map f (head✝ :: as)) = f (get (n + 1) (head✝ :: as))

Goals accomplished! 🐙
#align list.func.get_map
List.Func.get_map: ∀ {α : Type u} {β : Type v} [inst : Inhabited α] [inst_1 : Inhabited β] {f : αβ} {n : } {as : List α}, n < length asget n (map f as) = f (get n as)
List.Func.get_map
theorem
get_map': ∀ {f : αβ} {n : } {as : List α}, f default = defaultget n (map f as) = f (get n as)
get_map'
{
f: αβ
f
:
α: Type u
α
β: Type v
β
} {
n:
n
:
: Type
} {
as: List α
as
:
List: Type ?u.33575 → Type ?u.33575
List
α: Type u
α
} :
f: αβ
f
default: {α : Sort ?u.33580} → [self : Inhabited α] → α
default
=
default: {α : Sort ?u.33725} → [self : Inhabited α] → α
default
get: {α : Type ?u.34008} → [inst : Inhabited α] → List αα
get
n:
n
(
as: List α
as
.
map: {α : Type ?u.34012} → {β : Type ?u.34011} → (αβ) → List αList β
map
f: αβ
f
) =
f: αβ
f
(
get: {α : Type ?u.34025} → [inst : Inhabited α] → List αα
get
n:
n
as: List α
as
) :=

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α


f default = defaultget n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default


get n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default


get n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α


f default = defaultget n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: n < length as


pos
get n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: ¬n < length as


neg
get n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α


f default = defaultget n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: n < length as


pos
get n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: n < length as


pos
get n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: ¬n < length as


neg
get n (map f as) = f (get n as)

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α


f default = defaultget n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: ¬n < length as


neg
get n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: ¬n < length as


neg
get n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: ¬n < length as


neg
get n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: length as n


neg
get n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: length as n


neg
get n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: length as n


neg
get n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: ¬n < length as


neg
get n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: length as n


neg
get n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: length as n


neg
get n (map f as) = f default
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: length as n


neg
get n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: length as n


neg
default = f default
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: length as n


neg.a
length (map f as) n
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: length as n


neg
get n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: length as n


neg
default = default
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: length as n


neg.a
length (map f as) n
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: length as n


neg.a
length (map f as) n
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: ¬n < length as


neg
get n (map f as) = f (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: length as n


neg.a
length (map f as) n
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: length as n


neg.a
length as n
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: length as n


neg.a
length as n
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

f: αβ

n:

as: List α

h1: f default = default

h2: ¬n < length as


neg
get n (map f as) = f (get n as)

Goals accomplished! 🐙
#align list.func.get_map'
List.Func.get_map': ∀ {α : Type u} {β : Type v} [inst : Inhabited α] [inst_1 : Inhabited β] {f : αβ} {n : } {as : List α}, f default = defaultget n (map f as) = f (get n as)
List.Func.get_map'
theorem
forall_val_of_forall_mem: ∀ {α : Type u} [inst : Inhabited α] {as : List α} {p : αProp}, p default(∀ (x : α), x asp x) → ∀ (n : ), p (get n as)
forall_val_of_forall_mem
{
as: List α
as
:
List: Type ?u.35030 → Type ?u.35030
List
α: Type u
α
} {
p: αProp
p
:
α: Type u
α
Prop: Type
Prop
} :
p: αProp
p
default: {α : Sort ?u.35038} → [self : Inhabited α] → α
default
→ (∀
x: ?m.35186
x
as: List α
as
,
p: αProp
p
x: ?m.35186
x
) → ∀
n: ?m.35220
n
,
p: αProp
p
(
get: {α : Type ?u.35223} → [inst : Inhabited α] → List αα
get
n: ?m.35220
n
as: List α
as
) :=

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

as: List α

p: αProp


p default(∀ (x : α), x asp x) → ∀ (n : ), p (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

as: List α

p: αProp

h1: p default

h2: ∀ (x : α), x asp x

n:


p (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

as: List α

p: αProp


p default(∀ (x : α), x asp x) → ∀ (n : ), p (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

as: List α

p: αProp

h1: p default

h2: ∀ (x : α), x asp x

n:

h3: n < length as


pos
p (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

as: List α

p: αProp

h1: p default

h2: ∀ (x : α), x asp x

n:

h3: ¬n < length as


neg
p (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

as: List α

p: αProp


p default(∀ (x : α), x asp x) → ∀ (n : ), p (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

as: List α

p: αProp

h1: p default

h2: ∀ (x : α), x asp x

n:

h3: n < length as


pos
p (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

as: List α

p: αProp

h1: p default

h2: ∀ (x : α), x asp x

n:

h3: n < length as


pos
p (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

as: List α

p: αProp

h1: p default

h2: ∀ (x : α), x asp x

n:

h3: ¬n < length as


neg
p (get n as)

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

as: List α

p: αProp


p default(∀ (x : α), x asp x) → ∀ (n : ), p (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

as: List α

p: αProp

h1: p default

h2: ∀ (x : α), x asp x

n:

h3: ¬n < length as


neg
p (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

as: List α

p: αProp

h1: p default

h2: ∀ (x : α), x asp x

n:

h3: ¬n < length as


neg
p (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

as: List α

p: αProp

h1: p default

h2: ∀ (x : α), x asp x

n:

h3: ¬n < length as


neg
p (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

as: List α

p: αProp

h1: p default

h2: ∀ (x : α), x asp x

n:

h3: length as n


neg
p (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

as: List α

p: αProp

h1: p default

h2: ∀ (x : α), x asp x

n:

h3: length as n


neg
p (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

as: List α

p: αProp

h1: p default

h2: ∀ (x : α), x asp x

n:

h3: length as n


neg
p (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

as: List α

p: αProp

h1: p default

h2: ∀ (x : α), x asp x

n:

h3: ¬n < length as


neg
p (get n as)
α: Type u

β: Type v

γ: Type w

a: α

as✝, as1, as2, as3: List α

inst✝¹: Inhabited α

inst✝: Inhabited β

as: List α

p: αProp

h1: p default

h2