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 YaΓ«l Dillies. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: YaΓ«l Dillies

! This file was ported from Lean 3 source module data.int.interval
! leanprover-community/mathlib commit f93c11933efbc3c2f0299e47b8ff83e9b539cbf6
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Algebra.CharZero.Lemmas
import Mathlib.Order.LocallyFinite
import Mathlib.Data.Finset.LocallyFinite

/-!
# Finite intervals of integers

This file proves that `β„€` is a `LocallyFiniteOrder` and calculates the cardinality of its
intervals as finsets and fintypes.
-/


open Finset Int

instance : 
LocallyFiniteOrder: (Ξ± : Type ?u.2) β†’ [inst : Preorder Ξ±] β†’ Type ?u.2
LocallyFiniteOrder
β„€: Type
β„€
where finsetIcc
a: ?m.90
a
b: ?m.93
b
:= (
Finset.range: β„• β†’ Finset β„•
Finset.range
(
b: ?m.93
b
+
1: ?m.102
1
-
a: ?m.90
a
).
toNat: β„€ β†’ β„•
toNat
).
map: {Ξ± : Type ?u.195} β†’ {Ξ² : Type ?u.194} β†’ (Ξ± β†ͺ Ξ²) β†’ Finset Ξ± β†’ Finset Ξ²
map
<|
Nat.castEmbedding: {R : Type ?u.203} β†’ [inst : AddMonoidWithOne R] β†’ [inst : CharZero R] β†’ β„• β†ͺ R
Nat.castEmbedding
.
trans: {Ξ± : Sort ?u.231} β†’ {Ξ² : Sort ?u.230} β†’ {Ξ³ : Sort ?u.229} β†’ (Ξ± β†ͺ Ξ²) β†’ (Ξ² β†ͺ Ξ³) β†’ Ξ± β†ͺ Ξ³
trans
<|
addLeftEmbedding: {G : Type ?u.244} β†’ [inst : AddLeftCancelSemigroup G] β†’ G β†’ G β†ͺ G
addLeftEmbedding
a: ?m.90
a
finsetIco
a: ?m.323
a
b: ?m.326
b
:= (
Finset.range: β„• β†’ Finset β„•
Finset.range
(
b: ?m.326
b
-
a: ?m.323
a
).
toNat: β„€ β†’ β„•
toNat
).
map: {Ξ± : Type ?u.444} β†’ {Ξ² : Type ?u.443} β†’ (Ξ± β†ͺ Ξ²) β†’ Finset Ξ± β†’ Finset Ξ²
map
<|
Nat.castEmbedding: {R : Type ?u.451} β†’ [inst : AddMonoidWithOne R] β†’ [inst : CharZero R] β†’ β„• β†ͺ R
Nat.castEmbedding
.
trans: {Ξ± : Sort ?u.479} β†’ {Ξ² : Sort ?u.478} β†’ {Ξ³ : Sort ?u.477} β†’ (Ξ± β†ͺ Ξ²) β†’ (Ξ² β†ͺ Ξ³) β†’ Ξ± β†ͺ Ξ³
trans
<|
addLeftEmbedding: {G : Type ?u.492} β†’ [inst : AddLeftCancelSemigroup G] β†’ G β†’ G β†ͺ G
addLeftEmbedding
a: ?m.323
a
finsetIoc
a: ?m.516
a
b: ?m.519
b
:= (
Finset.range: β„• β†’ Finset β„•
Finset.range
(
b: ?m.519
b
-
a: ?m.516
a
).
toNat: β„€ β†’ β„•
toNat
).
map: {Ξ± : Type ?u.552} β†’ {Ξ² : Type ?u.551} β†’ (Ξ± β†ͺ Ξ²) β†’ Finset Ξ± β†’ Finset Ξ²
map
<|
Nat.castEmbedding: {R : Type ?u.559} β†’ [inst : AddMonoidWithOne R] β†’ [inst : CharZero R] β†’ β„• β†ͺ R
Nat.castEmbedding
.
trans: {Ξ± : Sort ?u.587} β†’ {Ξ² : Sort ?u.586} β†’ {Ξ³ : Sort ?u.585} β†’ (Ξ± β†ͺ Ξ²) β†’ (Ξ² β†ͺ Ξ³) β†’ Ξ± β†ͺ Ξ³
trans
<|
addLeftEmbedding: {G : Type ?u.600} β†’ [inst : AddLeftCancelSemigroup G] β†’ G β†’ G β†ͺ G
addLeftEmbedding
(
a: ?m.516
a
+
1: ?m.621
1
) finsetIoo
a: ?m.668
a
b: ?m.671
b
:= (
Finset.range: β„• β†’ Finset β„•
Finset.range
(
b: ?m.671
b
-
a: ?m.668
a
-
1: ?m.680
1
).
toNat: β„€ β†’ β„•
toNat
).
map: {Ξ± : Type ?u.748} β†’ {Ξ² : Type ?u.747} β†’ (Ξ± β†ͺ Ξ²) β†’ Finset Ξ± β†’ Finset Ξ²
map
<|
Nat.castEmbedding: {R : Type ?u.755} β†’ [inst : AddMonoidWithOne R] β†’ [inst : CharZero R] β†’ β„• β†ͺ R
Nat.castEmbedding
.
trans: {Ξ± : Sort ?u.783} β†’ {Ξ² : Sort ?u.782} β†’ {Ξ³ : Sort ?u.781} β†’ (Ξ± β†ͺ Ξ²) β†’ (Ξ² β†ͺ Ξ³) β†’ Ξ± β†ͺ Ξ³
trans
<|
addLeftEmbedding: {G : Type ?u.796} β†’ [inst : AddLeftCancelSemigroup G] β†’ G β†’ G β†ͺ G
addLeftEmbedding
(
a: ?m.668
a
+
1: ?m.817
1
) finset_mem_Icc
a: ?m.864
a
b: ?m.867
b
x: ?m.870
x
:=

Goals accomplished! πŸ™
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b + 1 - a)))) a b ↔ a ≀ x ∧ x ≀ b
a, b, x: β„€


a, b, x: β„€


(βˆƒ a_1, a_1 ∈ range (toNat (b + 1 - a)) ∧ ↑(Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) a_1 = x) ↔ a ≀ x ∧ x ≀ b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b + 1 - a)))) a b ↔ a ≀ x ∧ x ≀ b
a, b, x: β„€


(βˆƒ a_1, a_1 < toNat (b + 1 - a) ∧ ↑(Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) a_1 = x) ↔ a ≀ x ∧ x ≀ b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b + 1 - a)))) a b ↔ a ≀ x ∧ x ≀ b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b + 1 - a ∧ ↑(Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) a_1 = x) ↔ a ≀ x ∧ x ≀ b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b + 1 - a)))) a b ↔ a ≀ x ∧ x ≀ b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b + 1 - a ∧ ↑(addLeftEmbedding a) (↑Nat.castEmbedding a_1) = x) ↔ a ≀ x ∧ x ≀ b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b + 1 - a)))) a b ↔ a ≀ x ∧ x ≀ b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b + 1 - a ∧ ↑(addLeftEmbedding a) ↑a_1 = x) ↔ a ≀ x ∧ x ≀ b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b + 1 - a)))) a b ↔ a ≀ x ∧ x ≀ b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b + 1 - a ∧ a + ↑a_1 = x) ↔ a ≀ x ∧ x ≀ b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b + 1 - a ∧ a + ↑a_1 = x) ↔ a ≀ x ∧ x ≀ b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b + 1 - a)))) a b ↔ a ≀ x ∧ x ≀ b
a, b, x: β„€


mp
(βˆƒ a_1, ↑a_1 < b + 1 - a ∧ a + ↑a_1 = x) β†’ a ≀ x ∧ x ≀ b
a, b, x: β„€


mpr
a ≀ x ∧ x ≀ b β†’ βˆƒ a_2, ↑a_2 < b + 1 - a ∧ a + ↑a_2 = x
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b + 1 - a)))) a b ↔ a ≀ x ∧ x ≀ b
a, b, x: β„€


mp
(βˆƒ a_1, ↑a_1 < b + 1 - a ∧ a + ↑a_1 = x) β†’ a ≀ x ∧ x ≀ b
a, b, x: β„€


mp
(βˆƒ a_1, ↑a_1 < b + 1 - a ∧ a + ↑a_1 = x) β†’ a ≀ x ∧ x ≀ b
a, b, x: β„€


mpr
a ≀ x ∧ x ≀ b β†’ βˆƒ a_2, ↑a_2 < b + 1 - a ∧ a + ↑a_2 = x
a✝, b: β„€

a: β„•

h: ↑a < b + 1 - a✝


mp.intro.intro
a✝ ≀ a✝ + ↑a ∧ a✝ + ↑a ≀ b
a, b, x: β„€


mp
(βˆƒ a_1, ↑a_1 < b + 1 - a ∧ a + ↑a_1 = x) β†’ a ≀ x ∧ x ≀ b
a✝, b: β„€

a: β„•

h: ↑a < b + 1 - a✝


mp.intro.intro
a✝ ≀ a✝ + ↑a ∧ a✝ + ↑a ≀ b
a✝, b: β„€

a: β„•

h: ↑a + a✝ < b + 1


mp.intro.intro
a✝ ≀ a✝ + ↑a ∧ a✝ + ↑a ≀ b
a✝, b: β„€

a: β„•

h: ↑a < b + 1 - a✝


mp.intro.intro
a✝ ≀ a✝ + ↑a ∧ a✝ + ↑a ≀ b
a✝, b: β„€

a: β„•

h: ↑a + a✝ ≀ b


mp.intro.intro
a✝ ≀ a✝ + ↑a ∧ a✝ + ↑a ≀ b
a✝, b: β„€

a: β„•

h: ↑a < b + 1 - a✝


mp.intro.intro
a✝ ≀ a✝ + ↑a ∧ a✝ + ↑a ≀ b
a✝, b: β„€

a: β„•

h: a✝ + ↑a ≀ b


mp.intro.intro
a✝ ≀ a✝ + ↑a ∧ a✝ + ↑a ≀ b
a✝, b: β„€

a: β„•

h: a✝ + ↑a ≀ b


mp.intro.intro
a✝ ≀ a✝ + ↑a ∧ a✝ + ↑a ≀ b
a✝, b: β„€

a: β„•

h: a✝ + ↑a ≀ b


mp.intro.intro
a✝ ≀ a✝ + ↑a ∧ a✝ + ↑a ≀ b
a, b, x: β„€


mp
(βˆƒ a_1, ↑a_1 < b + 1 - a ∧ a + ↑a_1 = x) β†’ a ≀ x ∧ x ≀ b

Goals accomplished! πŸ™
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b + 1 - a)))) a b ↔ a ≀ x ∧ x ≀ b
a, b, x: β„€


mpr
a ≀ x ∧ x ≀ b β†’ βˆƒ a_2, ↑a_2 < b + 1 - a ∧ a + ↑a_2 = x
a, b, x: β„€


mpr
a ≀ x ∧ x ≀ b β†’ βˆƒ a_2, ↑a_2 < b + 1 - a ∧ a + ↑a_2 = x
a, b, x: β„€

ha: a ≀ x

hb: x ≀ b


mpr.intro
βˆƒ a_1, ↑a_1 < b + 1 - a ∧ a + ↑a_1 = x
a, b, x: β„€


mpr
a ≀ x ∧ x ≀ b β†’ βˆƒ a_2, ↑a_2 < b + 1 - a ∧ a + ↑a_2 = x
a, b, x: β„€

ha: a ≀ x

hb: x ≀ b


mpr.intro
↑(toNat (x - a)) < b + 1 - a ∧ a + ↑(toNat (x - a)) = x
a, b, x: β„€


mpr
a ≀ x ∧ x ≀ b β†’ βˆƒ a_2, ↑a_2 < b + 1 - a ∧ a + ↑a_2 = x
a, b, x: β„€

ha: a ≀ x

hb: x ≀ b


mpr.intro
↑(toNat (x - a)) < b + 1 - a ∧ a + ↑(toNat (x - a)) = x
a, b, x: β„€

ha: a ≀ x

hb: x < b + 1


mpr.intro
↑(toNat (x - a)) < b + 1 - a ∧ a + ↑(toNat (x - a)) = x
a, b, x: β„€

ha: a ≀ x

hb: x < b + 1


mpr.intro
↑(toNat (x - a)) < b + 1 - a ∧ a + ↑(toNat (x - a)) = x
a, b, x: β„€

ha: a ≀ x

hb: x < b + 1


mpr.intro
↑(toNat (x - a)) < b + 1 - a ∧ a + ↑(toNat (x - a)) = x
a, b, x: β„€


mpr
a ≀ x ∧ x ≀ b β†’ βˆƒ a_2, ↑a_2 < b + 1 - a ∧ a + ↑a_2 = x
a, b, x: β„€

ha: a ≀ x

hb: x < b + 1


mpr.intro
↑(toNat (x - a)) < b + 1 - a ∧ a + ↑(toNat (x - a)) = x
a, b, x: β„€

ha: a ≀ x

hb: x < b + 1


mpr.intro
x - a < b + 1 - a ∧ a + (x - a) = x
a, b, x: β„€

ha: a ≀ x

hb: x < b + 1


mpr.intro
x - a < b + 1 - a ∧ a + (x - a) = x
a, b, x: β„€


mpr
a ≀ x ∧ x ≀ b β†’ βˆƒ a_2, ↑a_2 < b + 1 - a ∧ a + ↑a_2 = x

Goals accomplished! πŸ™
finset_mem_Ico
a: ?m.883
a
b: ?m.886
b
x: ?m.889
x
:=

Goals accomplished! πŸ™
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b - a)))) a b ↔ a ≀ x ∧ x < b
a, b, x: β„€


x ∈ map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b - a))) ↔ a ≀ x ∧ x < b
a, b, x: β„€


(βˆƒ a_1, a_1 ∈ range (toNat (b - a)) ∧ ↑(Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) a_1 = x) ↔ a ≀ x ∧ x < b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b - a)))) a b ↔ a ≀ x ∧ x < b
a, b, x: β„€


(βˆƒ a_1, a_1 < toNat (b - a) ∧ ↑(Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) a_1 = x) ↔ a ≀ x ∧ x < b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b - a)))) a b ↔ a ≀ x ∧ x < b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b - a ∧ ↑(Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) a_1 = x) ↔ a ≀ x ∧ x < b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b - a)))) a b ↔ a ≀ x ∧ x < b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b - a ∧ ↑(addLeftEmbedding a) (↑Nat.castEmbedding a_1) = x) ↔ a ≀ x ∧ x < b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b - a)))) a b ↔ a ≀ x ∧ x < b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b - a ∧ ↑(addLeftEmbedding a) ↑a_1 = x) ↔ a ≀ x ∧ x < b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b - a)))) a b ↔ a ≀ x ∧ x < b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b - a ∧ a + ↑a_1 = x) ↔ a ≀ x ∧ x < b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b - a ∧ a + ↑a_1 = x) ↔ a ≀ x ∧ x < b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b - a)))) a b ↔ a ≀ x ∧ x < b
a, b, x: β„€


mp
(βˆƒ a_1, ↑a_1 < b - a ∧ a + ↑a_1 = x) β†’ a ≀ x ∧ x < b
a, b, x: β„€


mpr
a ≀ x ∧ x < b β†’ βˆƒ a_2, ↑a_2 < b - a ∧ a + ↑a_2 = x
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b - a)))) a b ↔ a ≀ x ∧ x < b
a, b, x: β„€


mp
(βˆƒ a_1, ↑a_1 < b - a ∧ a + ↑a_1 = x) β†’ a ≀ x ∧ x < b
a, b, x: β„€


mp
(βˆƒ a_1, ↑a_1 < b - a ∧ a + ↑a_1 = x) β†’ a ≀ x ∧ x < b
a, b, x: β„€


mpr
a ≀ x ∧ x < b β†’ βˆƒ a_2, ↑a_2 < b - a ∧ a + ↑a_2 = x
a✝, b: β„€

a: β„•

h: ↑a < b - a✝


mp.intro.intro
a✝ ≀ a✝ + ↑a ∧ a✝ + ↑a < b
a, b, x: β„€


mp
(βˆƒ a_1, ↑a_1 < b - a ∧ a + ↑a_1 = x) β†’ a ≀ x ∧ x < b

Goals accomplished! πŸ™
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b - a)))) a b ↔ a ≀ x ∧ x < b
a, b, x: β„€


mpr
a ≀ x ∧ x < b β†’ βˆƒ a_2, ↑a_2 < b - a ∧ a + ↑a_2 = x
a, b, x: β„€


mpr
a ≀ x ∧ x < b β†’ βˆƒ a_2, ↑a_2 < b - a ∧ a + ↑a_2 = x
a, b, x: β„€

ha: a ≀ x

hb: x < b


mpr.intro
βˆƒ a_1, ↑a_1 < b - a ∧ a + ↑a_1 = x
a, b, x: β„€


mpr
a ≀ x ∧ x < b β†’ βˆƒ a_2, ↑a_2 < b - a ∧ a + ↑a_2 = x
a, b, x: β„€

ha: a ≀ x

hb: x < b


mpr.intro
↑(toNat (x - a)) < b - a ∧ a + ↑(toNat (x - a)) = x
a, b, x: β„€


mpr
a ≀ x ∧ x < b β†’ βˆƒ a_2, ↑a_2 < b - a ∧ a + ↑a_2 = x
a, b, x: β„€

ha: a ≀ x

hb: x < b


mpr.intro
↑(toNat (x - a)) < b - a ∧ a + ↑(toNat (x - a)) = x
a, b, x: β„€

ha: a ≀ x

hb: x < b


mpr.intro
x - a < b - a ∧ a + (x - a) = x
a, b, x: β„€

ha: a ≀ x

hb: x < b


mpr.intro
x - a < b - a ∧ a + (x - a) = x
a, b, x: β„€


mpr
a ≀ x ∧ x < b β†’ βˆƒ a_2, ↑a_2 < b - a ∧ a + ↑a_2 = x

Goals accomplished! πŸ™
finset_mem_Ioc
a: ?m.900
a
b: ?m.903
b
x: ?m.906
x
:=

Goals accomplished! πŸ™
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a)))) a b ↔ a < x ∧ x ≀ b
a, b, x: β„€


x ∈ map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a))) ↔ a < x ∧ x ≀ b
a, b, x: β„€


(βˆƒ a_1, a_1 ∈ range (toNat (b - a)) ∧ ↑(Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) a_1 = x) ↔ a < x ∧ x ≀ b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a)))) a b ↔ a < x ∧ x ≀ b
a, b, x: β„€


(βˆƒ a_1, a_1 < toNat (b - a) ∧ ↑(Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) a_1 = x) ↔ a < x ∧ x ≀ b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a)))) a b ↔ a < x ∧ x ≀ b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b - a ∧ ↑(Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) a_1 = x) ↔ a < x ∧ x ≀ b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a)))) a b ↔ a < x ∧ x ≀ b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b - a ∧ ↑(addLeftEmbedding (a + 1)) (↑Nat.castEmbedding a_1) = x) ↔ a < x ∧ x ≀ b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a)))) a b ↔ a < x ∧ x ≀ b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b - a ∧ ↑(addLeftEmbedding (a + 1)) ↑a_1 = x) ↔ a < x ∧ x ≀ b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a)))) a b ↔ a < x ∧ x ≀ b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b - a ∧ a + 1 + ↑a_1 = x) ↔ a < x ∧ x ≀ b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b - a ∧ a + 1 + ↑a_1 = x) ↔ a < x ∧ x ≀ b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a)))) a b ↔ a < x ∧ x ≀ b
a, b, x: β„€


mp
(βˆƒ a_1, ↑a_1 < b - a ∧ a + 1 + ↑a_1 = x) β†’ a < x ∧ x ≀ b
a, b, x: β„€


mpr
a < x ∧ x ≀ b β†’ βˆƒ a_2, ↑a_2 < b - a ∧ a + 1 + ↑a_2 = x
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a)))) a b ↔ a < x ∧ x ≀ b
a, b, x: β„€


mp
(βˆƒ a_1, ↑a_1 < b - a ∧ a + 1 + ↑a_1 = x) β†’ a < x ∧ x ≀ b
a, b, x: β„€


mp
(βˆƒ a_1, ↑a_1 < b - a ∧ a + 1 + ↑a_1 = x) β†’ a < x ∧ x ≀ b
a, b, x: β„€


mpr
a < x ∧ x ≀ b β†’ βˆƒ a_2, ↑a_2 < b - a ∧ a + 1 + ↑a_2 = x
a✝, b: β„€

a: β„•

h: ↑a < b - a✝


mp.intro.intro
a✝ < a✝ + 1 + ↑a ∧ a✝ + 1 + ↑a ≀ b
a, b, x: β„€


mp
(βˆƒ a_1, ↑a_1 < b - a ∧ a + 1 + ↑a_1 = x) β†’ a < x ∧ x ≀ b
a✝, b: β„€

a: β„•

h: ↑a < b - a✝


mp.intro.intro
a✝ < a✝ + 1 + ↑a ∧ a✝ + 1 + ↑a ≀ b
a✝, b: β„€

a: β„•

h: ↑a + 1 ≀ b - a✝


mp.intro.intro
a✝ < a✝ + 1 + ↑a ∧ a✝ + 1 + ↑a ≀ b
a✝, b: β„€

a: β„•

h: ↑a < b - a✝


mp.intro.intro
a✝ < a✝ + 1 + ↑a ∧ a✝ + 1 + ↑a ≀ b
a✝, b: β„€

a: β„•

h: a✝ + (↑a + 1) ≀ b


mp.intro.intro
a✝ < a✝ + 1 + ↑a ∧ a✝ + 1 + ↑a ≀ b
a✝, b: β„€

a: β„•

h: ↑a < b - a✝


mp.intro.intro
a✝ < a✝ + 1 + ↑a ∧ a✝ + 1 + ↑a ≀ b
a✝, b: β„€

a: β„•

h: a✝ + (1 + ↑a) ≀ b


mp.intro.intro
a✝ < a✝ + 1 + ↑a ∧ a✝ + 1 + ↑a ≀ b
a✝, b: β„€

a: β„•

h: ↑a < b - a✝


mp.intro.intro
a✝ < a✝ + 1 + ↑a ∧ a✝ + 1 + ↑a ≀ b
a✝, b: β„€

a: β„•

h: a✝ + 1 + ↑a ≀ b


mp.intro.intro
a✝ < a✝ + 1 + ↑a ∧ a✝ + 1 + ↑a ≀ b
a✝, b: β„€

a: β„•

h: a✝ + 1 + ↑a ≀ b


mp.intro.intro
a✝ < a✝ + 1 + ↑a ∧ a✝ + 1 + ↑a ≀ b
a✝, b: β„€

a: β„•

h: a✝ + 1 + ↑a ≀ b


mp.intro.intro
a✝ < a✝ + 1 + ↑a ∧ a✝ + 1 + ↑a ≀ b
a, b, x: β„€


mp
(βˆƒ a_1, ↑a_1 < b - a ∧ a + 1 + ↑a_1 = x) β†’ a < x ∧ x ≀ b

Goals accomplished! πŸ™
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a)))) a b ↔ a < x ∧ x ≀ b
a, b, x: β„€


mpr
a < x ∧ x ≀ b β†’ βˆƒ a_2, ↑a_2 < b - a ∧ a + 1 + ↑a_2 = x
a, b, x: β„€


mpr
a < x ∧ x ≀ b β†’ βˆƒ a_2, ↑a_2 < b - a ∧ a + 1 + ↑a_2 = x
a, b, x: β„€

ha: a < x

hb: x ≀ b


mpr.intro
βˆƒ a_1, ↑a_1 < b - a ∧ a + 1 + ↑a_1 = x
a, b, x: β„€


mpr
a < x ∧ x ≀ b β†’ βˆƒ a_2, ↑a_2 < b - a ∧ a + 1 + ↑a_2 = x
a, b, x: β„€

ha: a < x

hb: x ≀ b


mpr.intro
↑(toNat (x - (a + 1))) < b - a ∧ a + 1 + ↑(toNat (x - (a + 1))) = x
a, b, x: β„€


mpr
a < x ∧ x ≀ b β†’ βˆƒ a_2, ↑a_2 < b - a ∧ a + 1 + ↑a_2 = x
a, b, x: β„€

ha: a < x

hb: x ≀ b


mpr.intro
↑(toNat (x - (a + 1))) < b - a ∧ a + 1 + ↑(toNat (x - (a + 1))) = x
a, b, x: β„€

ha: a < x

hb: x ≀ b


mpr.intro
x - (a + 1) < b - a ∧ a + 1 + (x - (a + 1)) = x
a, b, x: β„€

ha: a < x

hb: x ≀ b


mpr.intro
↑(toNat (x - (a + 1))) < b - a ∧ a + 1 + ↑(toNat (x - (a + 1))) = x
a, b, x: β„€

ha: a < x

hb: x ≀ b


mpr.intro
x - (a + 1) + 1 ≀ b - a ∧ a + 1 + (x - (a + 1)) = x
a, b, x: β„€

ha: a < x

hb: x ≀ b


mpr.intro
↑(toNat (x - (a + 1))) < b - a ∧ a + 1 + ↑(toNat (x - (a + 1))) = x
a, b, x: β„€

ha: a < x

hb: x ≀ b


mpr.intro
x - (a + 1 - 1) ≀ b - a ∧ a + 1 + (x - (a + 1)) = x
a, b, x: β„€

ha: a < x

hb: x ≀ b


mpr.intro
↑(toNat (x - (a + 1))) < b - a ∧ a + 1 + ↑(toNat (x - (a + 1))) = x
a, b, x: β„€

ha: a < x

hb: x ≀ b


mpr.intro
x - a ≀ b - a ∧ a + 1 + (x - (a + 1)) = x
a, b, x: β„€

ha: a < x

hb: x ≀ b


mpr.intro
x - a ≀ b - a ∧ a + 1 + (x - (a + 1)) = x
a, b, x: β„€


mpr
a < x ∧ x ≀ b β†’ βˆƒ a_2, ↑a_2 < b - a ∧ a + 1 + ↑a_2 = x

Goals accomplished! πŸ™
finset_mem_Ioo
a: ?m.917
a
b: ?m.920
b
x: ?m.923
x
:=

Goals accomplished! πŸ™
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a - 1)))) a b ↔ a < x ∧ x < b
a, b, x: β„€


x ∈ map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a - 1))) ↔ a < x ∧ x < b
a, b, x: β„€


(βˆƒ a_1, a_1 ∈ range (toNat (b - a - 1)) ∧ ↑(Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) a_1 = x) ↔ a < x ∧ x < b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a - 1)))) a b ↔ a < x ∧ x < b
a, b, x: β„€


(βˆƒ a_1, a_1 < toNat (b - a - 1) ∧ ↑(Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) a_1 = x) ↔ a < x ∧ x < b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a - 1)))) a b ↔ a < x ∧ x < b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b - a - 1 ∧ ↑(Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) a_1 = x) ↔ a < x ∧ x < b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a - 1)))) a b ↔ a < x ∧ x < b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b - a - 1 ∧ ↑(addLeftEmbedding (a + 1)) (↑Nat.castEmbedding a_1) = x) ↔ a < x ∧ x < b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a - 1)))) a b ↔ a < x ∧ x < b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b - a - 1 ∧ ↑(addLeftEmbedding (a + 1)) ↑a_1 = x) ↔ a < x ∧ x < b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a - 1)))) a b ↔ a < x ∧ x < b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b - a - 1 ∧ a + 1 + ↑a_1 = x) ↔ a < x ∧ x < b
a, b, x: β„€


(βˆƒ a_1, ↑a_1 < b - a - 1 ∧ a + 1 + ↑a_1 = x) ↔ a < x ∧ x < b
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a - 1)))) a b ↔ a < x ∧ x < b
a, b, x: β„€


mp
(βˆƒ a_1, ↑a_1 < b - a - 1 ∧ a + 1 + ↑a_1 = x) β†’ a < x ∧ x < b
a, b, x: β„€


mpr
a < x ∧ x < b β†’ βˆƒ a_2, ↑a_2 < b - a - 1 ∧ a + 1 + ↑a_2 = x
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a - 1)))) a b ↔ a < x ∧ x < b
a, b, x: β„€


mp
(βˆƒ a_1, ↑a_1 < b - a - 1 ∧ a + 1 + ↑a_1 = x) β†’ a < x ∧ x < b
a, b, x: β„€


mp
(βˆƒ a_1, ↑a_1 < b - a - 1 ∧ a + 1 + ↑a_1 = x) β†’ a < x ∧ x < b
a, b, x: β„€


mpr
a < x ∧ x < b β†’ βˆƒ a_2, ↑a_2 < b - a - 1 ∧ a + 1 + ↑a_2 = x
a✝, b: β„€

a: β„•

h: ↑a < b - a✝ - 1


mp.intro.intro
a✝ < a✝ + 1 + ↑a ∧ a✝ + 1 + ↑a < b
a, b, x: β„€


mp
(βˆƒ a_1, ↑a_1 < b - a - 1 ∧ a + 1 + ↑a_1 = x) β†’ a < x ∧ x < b
a✝, b: β„€

a: β„•

h: ↑a < b - a✝ - 1


mp.intro.intro
a✝ < a✝ + 1 + ↑a ∧ a✝ + 1 + ↑a < b
a✝, b: β„€

a: β„•

h: ↑a < b - (a✝ + 1)


mp.intro.intro
a✝ < a✝ + 1 + ↑a ∧ a✝ + 1 + ↑a < b
a✝, b: β„€

a: β„•

h: ↑a < b - a✝ - 1


mp.intro.intro
a✝ < a✝ + 1 + ↑a ∧ a✝ + 1 + ↑a < b
a✝, b: β„€

a: β„•

h: a✝ + 1 + ↑a < b


mp.intro.intro
a✝ < a✝ + 1 + ↑a ∧ a✝ + 1 + ↑a < b
a✝, b: β„€

a: β„•

h: a✝ + 1 + ↑a < b


mp.intro.intro
a✝ < a✝ + 1 + ↑a ∧ a✝ + 1 + ↑a < b
a✝, b: β„€

a: β„•

h: a✝ + 1 + ↑a < b


mp.intro.intro
a✝ < a✝ + 1 + ↑a ∧ a✝ + 1 + ↑a < b
a, b, x: β„€


mp
(βˆƒ a_1, ↑a_1 < b - a - 1 ∧ a + 1 + ↑a_1 = x) β†’ a < x ∧ x < b

Goals accomplished! πŸ™
a, b, x: β„€


x ∈ (fun a b => map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a - 1)))) a b ↔ a < x ∧ x < b
a, b, x: β„€


mpr
a < x ∧ x < b β†’ βˆƒ a_2, ↑a_2 < b - a - 1 ∧ a + 1 + ↑a_2 = x
a, b, x: β„€


mpr
a < x ∧ x < b β†’ βˆƒ a_2, ↑a_2 < b - a - 1 ∧ a + 1 + ↑a_2 = x
a, b, x: β„€

ha: a < x

hb: x < b


mpr.intro
βˆƒ a_1, ↑a_1 < b - a - 1 ∧ a + 1 + ↑a_1 = x
a, b, x: β„€


mpr
a < x ∧ x < b β†’ βˆƒ a_2, ↑a_2 < b - a - 1 ∧ a + 1 + ↑a_2 = x
a, b, x: β„€

ha: a < x

hb: x < b


mpr.intro
↑(toNat (x - (a + 1))) < b - a - 1 ∧ a + 1 + ↑(toNat (x - (a + 1))) = x
a, b, x: β„€


mpr
a < x ∧ x < b β†’ βˆƒ a_2, ↑a_2 < b - a - 1 ∧ a + 1 + ↑a_2 = x
a, b, x: β„€

ha: a < x

hb: x < b


mpr.intro
↑(toNat (x - (a + 1))) < b - a - 1 ∧ a + 1 + ↑(toNat (x - (a + 1))) = x
a, b, x: β„€

ha: a < x

hb: x < b


mpr.intro
x - (a + 1) < b - a - 1 ∧ a + 1 + (x - (a + 1)) = x
a, b, x: β„€

ha: a < x

hb: x < b


mpr.intro
↑(toNat (x - (a + 1))) < b - a - 1 ∧ a + 1 + ↑(toNat (x - (a + 1))) = x
a, b, x: β„€

ha: a < x

hb: x < b


mpr.intro
x - (a + 1) < b - (a + 1) ∧ a + 1 + (x - (a + 1)) = x
a, b, x: β„€

ha: a < x

hb: x < b


mpr.intro
x - (a + 1) < b - (a + 1) ∧ a + 1 + (x - (a + 1)) = x
a, b, x: β„€


mpr
a < x ∧ x < b β†’ βˆƒ a_2, ↑a_2 < b - a - 1 ∧ a + 1 + ↑a_2 = x

Goals accomplished! πŸ™
namespace Int variable (a b :
β„€: Type
β„€
) theorem
Icc_eq_finset_map: βˆ€ (a b : β„€), Icc a b = map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b + 1 - a)))
Icc_eq_finset_map
:
Icc: {Ξ± : Type ?u.9263} β†’ [inst : Preorder Ξ±] β†’ [inst : LocallyFiniteOrder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Finset Ξ±
Icc
a b = (
Finset.range: β„• β†’ Finset β„•
Finset.range
(b +
1: ?m.9356
1
- a).
toNat: β„€ β†’ β„•
toNat
).
map: {Ξ± : Type ?u.9449} β†’ {Ξ² : Type ?u.9448} β†’ (Ξ± β†ͺ Ξ²) β†’ Finset Ξ± β†’ Finset Ξ²
map
(
Nat.castEmbedding: {R : Type ?u.9456} β†’ [inst : AddMonoidWithOne R] β†’ [inst : CharZero R] β†’ β„• β†ͺ R
Nat.castEmbedding
.
trans: {Ξ± : Sort ?u.9484} β†’ {Ξ² : Sort ?u.9483} β†’ {Ξ³ : Sort ?u.9482} β†’ (Ξ± β†ͺ Ξ²) β†’ (Ξ² β†ͺ Ξ³) β†’ Ξ± β†ͺ Ξ³
trans
<|
addLeftEmbedding: {G : Type ?u.9497} β†’ [inst : AddLeftCancelSemigroup G] β†’ G β†’ G β†ͺ G
addLeftEmbedding
a) :=
rfl: βˆ€ {Ξ± : Sort ?u.9648} {a : Ξ±}, a = a
rfl
#align int.Icc_eq_finset_map
Int.Icc_eq_finset_map: βˆ€ (a b : β„€), Icc a b = map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b + 1 - a)))
Int.Icc_eq_finset_map
theorem
Ico_eq_finset_map: Ico a b = map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b - a)))
Ico_eq_finset_map
:
Ico: {Ξ± : Type ?u.9674} β†’ [inst : Preorder Ξ±] β†’ [inst : LocallyFiniteOrder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Finset Ξ±
Ico
a b = (
Finset.range: β„• β†’ Finset β„•
Finset.range
(b - a).
toNat: β„€ β†’ β„•
toNat
).
map: {Ξ± : Type ?u.9804} β†’ {Ξ² : Type ?u.9803} β†’ (Ξ± β†ͺ Ξ²) β†’ Finset Ξ± β†’ Finset Ξ²
map
(
Nat.castEmbedding: {R : Type ?u.9811} β†’ [inst : AddMonoidWithOne R] β†’ [inst : CharZero R] β†’ β„• β†ͺ R
Nat.castEmbedding
.
trans: {Ξ± : Sort ?u.9839} β†’ {Ξ² : Sort ?u.9838} β†’ {Ξ³ : Sort ?u.9837} β†’ (Ξ± β†ͺ Ξ²) β†’ (Ξ² β†ͺ Ξ³) β†’ Ξ± β†ͺ Ξ³
trans
<|
addLeftEmbedding: {G : Type ?u.9852} β†’ [inst : AddLeftCancelSemigroup G] β†’ G β†’ G β†ͺ G
addLeftEmbedding
a) :=
rfl: βˆ€ {Ξ± : Sort ?u.9995} {a : Ξ±}, a = a
rfl
#align int.Ico_eq_finset_map
Int.Ico_eq_finset_map: βˆ€ (a b : β„€), Ico a b = map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b - a)))
Int.Ico_eq_finset_map
theorem
Ioc_eq_finset_map: βˆ€ (a b : β„€), Ioc a b = map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a)))
Ioc_eq_finset_map
:
Ioc: {Ξ± : Type ?u.10021} β†’ [inst : Preorder Ξ±] β†’ [inst : LocallyFiniteOrder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Finset Ξ±
Ioc
a b = (
Finset.range: β„• β†’ Finset β„•
Finset.range
(b - a).
toNat: β„€ β†’ β„•
toNat
).
map: {Ξ± : Type ?u.10151} β†’ {Ξ² : Type ?u.10150} β†’ (Ξ± β†ͺ Ξ²) β†’ Finset Ξ± β†’ Finset Ξ²
map
(
Nat.castEmbedding: {R : Type ?u.10158} β†’ [inst : AddMonoidWithOne R] β†’ [inst : CharZero R] β†’ β„• β†ͺ R
Nat.castEmbedding
.
trans: {Ξ± : Sort ?u.10186} β†’ {Ξ² : Sort ?u.10185} β†’ {Ξ³ : Sort ?u.10184} β†’ (Ξ± β†ͺ Ξ²) β†’ (Ξ² β†ͺ Ξ³) β†’ Ξ± β†ͺ Ξ³
trans
<|
addLeftEmbedding: {G : Type ?u.10199} β†’ [inst : AddLeftCancelSemigroup G] β†’ G β†’ G β†ͺ G
addLeftEmbedding
(a +
1: ?m.10220
1
)) :=
rfl: βˆ€ {Ξ± : Sort ?u.10428} {a : Ξ±}, a = a
rfl
#align int.Ioc_eq_finset_map
Int.Ioc_eq_finset_map: βˆ€ (a b : β„€), Ioc a b = map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a)))
Int.Ioc_eq_finset_map
theorem
Ioo_eq_finset_map: βˆ€ (a b : β„€), Ioo a b = map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a - 1)))
Ioo_eq_finset_map
:
Ioo: {Ξ± : Type ?u.10454} β†’ [inst : Preorder Ξ±] β†’ [inst : LocallyFiniteOrder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Finset Ξ±
Ioo
a b = (
Finset.range: β„• β†’ Finset β„•
Finset.range
(b - a -
1: ?m.10547
1
).
toNat: β„€ β†’ β„•
toNat
).
map: {Ξ± : Type ?u.10625} β†’ {Ξ² : Type ?u.10624} β†’ (Ξ± β†ͺ Ξ²) β†’ Finset Ξ± β†’ Finset Ξ²
map
(
Nat.castEmbedding: {R : Type ?u.10632} β†’ [inst : AddMonoidWithOne R] β†’ [inst : CharZero R] β†’ β„• β†ͺ R
Nat.castEmbedding
.
trans: {Ξ± : Sort ?u.10660} β†’ {Ξ² : Sort ?u.10659} β†’ {Ξ³ : Sort ?u.10658} β†’ (Ξ± β†ͺ Ξ²) β†’ (Ξ² β†ͺ Ξ³) β†’ Ξ± β†ͺ Ξ³
trans
<|
addLeftEmbedding: {G : Type ?u.10673} β†’ [inst : AddLeftCancelSemigroup G] β†’ G β†’ G β†ͺ G
addLeftEmbedding
(a +
1: ?m.10694
1
)) :=
rfl: βˆ€ {Ξ± : Sort ?u.10926} {a : Ξ±}, a = a
rfl
#align int.Ioo_eq_finset_map
Int.Ioo_eq_finset_map: βˆ€ (a b : β„€), Ioo a b = map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a - 1)))
Int.Ioo_eq_finset_map
@[simp] theorem
card_Icc: βˆ€ (a b : β„€), card (Icc a b) = toNat (b + 1 - a)
card_Icc
: (
Icc: {Ξ± : Type ?u.10952} β†’ [inst : Preorder Ξ±] β†’ [inst : LocallyFiniteOrder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Finset Ξ±
Icc
a b).
card: {Ξ± : Type ?u.11038} β†’ Finset Ξ± β†’ β„•
card
= (b +
1: ?m.11050
1
- a).
toNat: β„€ β†’ β„•
toNat
:=

Goals accomplished! πŸ™
a, b: β„€


card (Icc a b) = toNat (b + 1 - a)
a, b: β„€


card (map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b + 1 - a)))) = toNat (b + 1 - a)
a, b: β„€


card (Icc a b) = toNat (b + 1 - a)
a, b: β„€


card (map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b + 1 - a)))) = toNat (b + 1 - a)
a, b: β„€


card (range (toNat (b + 1 - a))) = toNat (b + 1 - a)
a, b: β„€


card (map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b + 1 - a)))) = toNat (b + 1 - a)
a, b: β„€


toNat (b + 1 - a) = toNat (b + 1 - a)

Goals accomplished! πŸ™
#align int.card_Icc
Int.card_Icc: βˆ€ (a b : β„€), card (Icc a b) = toNat (b + 1 - a)
Int.card_Icc
@[simp] theorem
card_Ico: βˆ€ (a b : β„€), card (Ico a b) = toNat (b - a)
card_Ico
: (
Ico: {Ξ± : Type ?u.11257} β†’ [inst : Preorder Ξ±] β†’ [inst : LocallyFiniteOrder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Finset Ξ±
Ico
a b).
card: {Ξ± : Type ?u.11343} β†’ Finset Ξ± β†’ β„•
card
= (b - a).
toNat: β„€ β†’ β„•
toNat
:=

Goals accomplished! πŸ™
a, b: β„€


card (Ico a b) = toNat (b - a)
a, b: β„€


card (map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b - a)))) = toNat (b - a)
a, b: β„€


card (Ico a b) = toNat (b - a)
a, b: β„€


card (map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b - a)))) = toNat (b - a)
a, b: β„€


card (range (toNat (b - a))) = toNat (b - a)
a, b: β„€


card (map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b - a)))) = toNat (b - a)
a, b: β„€


toNat (b - a) = toNat (b - a)

Goals accomplished! πŸ™
#align int.card_Ico
Int.card_Ico: βˆ€ (a b : β„€), card (Ico a b) = toNat (b - a)
Int.card_Ico
@[simp] theorem
card_Ioc: βˆ€ (a b : β„€), card (Ioc a b) = toNat (b - a)
card_Ioc
: (
Ioc: {Ξ± : Type ?u.11498} β†’ [inst : Preorder Ξ±] β†’ [inst : LocallyFiniteOrder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Finset Ξ±
Ioc
a b).
card: {Ξ± : Type ?u.11584} β†’ Finset Ξ± β†’ β„•
card
= (b - a).
toNat: β„€ β†’ β„•
toNat
:=

Goals accomplished! πŸ™
a, b: β„€


card (Ioc a b) = toNat (b - a)
a, b: β„€


card (map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a)))) = toNat (b - a)
a, b: β„€


card (Ioc a b) = toNat (b - a)
a, b: β„€


card (map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a)))) = toNat (b - a)
a, b: β„€


card (range (toNat (b - a))) = toNat (b - a)
a, b: β„€


card (map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a)))) = toNat (b - a)
a, b: β„€


toNat (b - a) = toNat (b - a)

Goals accomplished! πŸ™
#align int.card_Ioc
Int.card_Ioc: βˆ€ (a b : β„€), card (Ioc a b) = toNat (b - a)
Int.card_Ioc
@[simp] theorem
card_Ioo: βˆ€ (a b : β„€), card (Ioo a b) = toNat (b - a - 1)
card_Ioo
: (
Ioo: {Ξ± : Type ?u.11739} β†’ [inst : Preorder Ξ±] β†’ [inst : LocallyFiniteOrder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Finset Ξ±
Ioo
a b).
card: {Ξ± : Type ?u.11825} β†’ Finset Ξ± β†’ β„•
card
= (b - a -
1: ?m.11837
1
).
toNat: β„€ β†’ β„•
toNat
:=

Goals accomplished! πŸ™
a, b: β„€


card (Ioo a b) = toNat (b - a - 1)
a, b: β„€


card (map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a - 1)))) = toNat (b - a - 1)
a, b: β„€


card (Ioo a b) = toNat (b - a - 1)
a, b: β„€


card (map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a - 1)))) = toNat (b - a - 1)
a, b: β„€


card (range (toNat (b - a - 1))) = toNat (b - a - 1)
a, b: β„€


card (map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding (a + 1))) (range (toNat (b - a - 1)))) = toNat (b - a - 1)
a, b: β„€


toNat (b - a - 1) = toNat (b - a - 1)

Goals accomplished! πŸ™
#align int.card_Ioo
Int.card_Ioo: βˆ€ (a b : β„€), card (Ioo a b) = toNat (b - a - 1)
Int.card_Ioo
theorem
card_Icc_of_le: βˆ€ (a b : β„€), a ≀ b + 1 β†’ ↑(card (Icc a b)) = b + 1 - a
card_Icc_of_le
(
h: a ≀ b + 1
h
: a ≀ b +
1: ?m.12033
1
) : ((
Icc: {Ξ± : Type ?u.12102} β†’ [inst : Preorder Ξ±] β†’ [inst : LocallyFiniteOrder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Finset Ξ±
Icc
a b).
card: {Ξ± : Type ?u.12188} β†’ Finset Ξ± β†’ β„•
card
:
β„€: Type
β„€
) = b +
1: ?m.12240
1
- a :=

Goals accomplished! πŸ™
a, b: β„€

h: a ≀ b + 1


↑(card (Icc a b)) = b + 1 - a
a, b: β„€

h: a ≀ b + 1


↑(card (Icc a b)) = b + 1 - a
a, b: β„€

h: a ≀ b + 1


↑(toNat (b + 1 - a)) = b + 1 - a
a, b: β„€

h: a ≀ b + 1


↑(card (Icc a b)) = b + 1 - a
a, b: β„€

h: a ≀ b + 1


b + 1 - a = b + 1 - a

Goals accomplished! πŸ™
#align int.card_Icc_of_le
Int.card_Icc_of_le: βˆ€ (a b : β„€), a ≀ b + 1 β†’ ↑(card (Icc a b)) = b + 1 - a
Int.card_Icc_of_le
theorem
card_Ico_of_le: βˆ€ (a b : β„€), a ≀ b β†’ ↑(card (Ico a b)) = b - a
card_Ico_of_le
(
h: a ≀ b
h
: a ≀ b) : ((
Ico: {Ξ± : Type ?u.12367} β†’ [inst : Preorder Ξ±] β†’ [inst : LocallyFiniteOrder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Finset Ξ±
Ico
a b).
card: {Ξ± : Type ?u.12453} β†’ Finset Ξ± β†’ β„•
card
:
β„€: Type
β„€
) = b - a :=

Goals accomplished! πŸ™
a, b: β„€

h: a ≀ b


↑(card (Ico a b)) = b - a
a, b: β„€

h: a ≀ b


↑(card (Ico a b)) = b - a
a, b: β„€

h: a ≀ b


↑(toNat (b - a)) = b - a
a, b: β„€

h: a ≀ b


↑(card (Ico a b)) = b - a
a, b: β„€

h: a ≀ b


b - a = b - a

Goals accomplished! πŸ™
#align int.card_Ico_of_le
Int.card_Ico_of_le: βˆ€ (a b : β„€), a ≀ b β†’ ↑(card (Ico a b)) = b - a
Int.card_Ico_of_le
theorem
card_Ioc_of_le: a ≀ b β†’ ↑(card (Ioc a b)) = b - a
card_Ioc_of_le
(
h: a ≀ b
h
: a ≀ b) : ((
Ioc: {Ξ± : Type ?u.12592} β†’ [inst : Preorder Ξ±] β†’ [inst : LocallyFiniteOrder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Finset Ξ±
Ioc
a b).
card: {Ξ± : Type ?u.12678} β†’ Finset Ξ± β†’ β„•
card
:
β„€: Type
β„€
) = b - a :=

Goals accomplished! πŸ™
a, b: β„€

h: a ≀ b


↑(card (Ioc a b)) = b - a
a, b: β„€

h: a ≀ b


↑(card (Ioc a b)) = b - a
a, b: β„€

h: a ≀ b


↑(toNat (b - a)) = b - a
a, b: β„€

h: a ≀ b


↑(card (Ioc a b)) = b - a
a, b: β„€

h: a ≀ b


b - a = b - a

Goals accomplished! πŸ™
#align int.card_Ioc_of_le
Int.card_Ioc_of_le: βˆ€ (a b : β„€), a ≀ b β†’ ↑(card (Ioc a b)) = b - a
Int.card_Ioc_of_le
theorem
card_Ioo_of_lt: a < b β†’ ↑(card (Ioo a b)) = b - a - 1
card_Ioo_of_lt
(
h: a < b
h
: a < b) : ((
Ioo: {Ξ± : Type ?u.12817} β†’ [inst : Preorder Ξ±] β†’ [inst : LocallyFiniteOrder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Finset Ξ±
Ioo
a b).
card: {Ξ± : Type ?u.12903} β†’ Finset Ξ± β†’ β„•
card
:
β„€: Type
β„€
) = b - a -
1: ?m.12955
1
:=

Goals accomplished! πŸ™
a, b: β„€

h: a < b


↑(card (Ioo a b)) = b - a - 1
a, b: β„€

h: a < b


↑(card (Ioo a b)) = b - a - 1
a, b: β„€

h: a < b


↑(toNat (b - a - 1)) = b - a - 1
a, b: β„€

h: a < b


↑(card (Ioo a b)) = b - a - 1
a, b: β„€

h: a < b


↑(toNat (b - (a + 1))) = b - (a + 1)
a, b: β„€

h: a < b


↑(card (Ioo a b)) = b - a - 1
a, b: β„€

h: a < b


b - (a + 1) = b - (a + 1)

Goals accomplished! πŸ™
#align int.card_Ioo_of_lt
Int.card_Ioo_of_lt: βˆ€ (a b : β„€), a < b β†’ ↑(card (Ioo a b)) = b - a - 1
Int.card_Ioo_of_lt
-- porting note: removed `simp` attribute because `simpNF` says it can prove it theorem
card_fintype_Icc: βˆ€ (a b : β„€), Fintype.card ↑(Set.Icc a b) = toNat (b + 1 - a)
card_fintype_Icc
:
Fintype.card: (Ξ± : Type ?u.13148) β†’ [inst : Fintype Ξ±] β†’ β„•
Fintype.card
(
Set.Icc: {Ξ± : Type ?u.13149} β†’ [inst : Preorder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Set Ξ±
Set.Icc
a b) = (b +
1: ?m.13514
1
- a).
toNat: β„€ β†’ β„•
toNat
:=

Goals accomplished! πŸ™
a, b: β„€


Fintype.card ↑(Set.Icc a b) = toNat (b + 1 - a)
a, b: β„€


Fintype.card ↑(Set.Icc a b) = toNat (b + 1 - a)
a, b: β„€


Fintype.card ↑(Set.Icc a b) = card (Icc a b)
a, b: β„€


Fintype.card ↑(Set.Icc a b) = toNat (b + 1 - a)
a, b: β„€


card (Icc a b) = card (Icc a b)

Goals accomplished! πŸ™
#align int.card_fintype_Icc
Int.card_fintype_Icc: βˆ€ (a b : β„€), Fintype.card ↑(Set.Icc a b) = toNat (b + 1 - a)
Int.card_fintype_Icc
-- porting note: removed `simp` attribute because `simpNF` says it can prove it theorem
card_fintype_Ico: Fintype.card ↑(Set.Ico a b) = toNat (b - a)
card_fintype_Ico
:
Fintype.card: (Ξ± : Type ?u.13677) β†’ [inst : Fintype Ξ±] β†’ β„•
Fintype.card
(
Set.Ico: {Ξ± : Type ?u.13678} β†’ [inst : Preorder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Set Ξ±
Set.Ico
a b) = (b - a).
toNat: β„€ β†’ β„•
toNat
:=

Goals accomplished! πŸ™
a, b: β„€


Fintype.card ↑(Set.Ico a b) = toNat (b - a)
a, b: β„€


Fintype.card ↑(Set.Ico a b) = toNat (b - a)
a, b: β„€


Fintype.card ↑(Set.Ico a b) = card (Ico a b)
a, b: β„€


Fintype.card ↑(Set.Ico a b) = toNat (b - a)
a, b: β„€


card (Ico a b) = card (Ico a b)

Goals accomplished! πŸ™
#align int.card_fintype_Ico
Int.card_fintype_Ico: βˆ€ (a b : β„€), Fintype.card ↑(Set.Ico a b) = toNat (b - a)
Int.card_fintype_Ico
-- porting note: removed `simp` attribute because `simpNF` says it can prove it theorem
card_fintype_Ioc: βˆ€ (a b : β„€), Fintype.card ↑(Set.Ioc a b) = toNat (b - a)
card_fintype_Ioc
:
Fintype.card: (Ξ± : Type ?u.14130) β†’ [inst : Fintype Ξ±] β†’ β„•
Fintype.card
(
Set.Ioc: {Ξ± : Type ?u.14131} β†’ [inst : Preorder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Set Ξ±
Set.Ioc
a b) = (b - a).
toNat: β„€ β†’ β„•
toNat
:=

Goals accomplished! πŸ™
a, b: β„€


Fintype.card ↑(Set.Ioc a b) = toNat (b - a)
a, b: β„€


Fintype.card ↑(Set.Ioc a b) = toNat (b - a)
a, b: β„€


Fintype.card ↑(Set.Ioc a b) = card (Ioc a b)
a, b: β„€


Fintype.card ↑(Set.Ioc a b) = toNat (b - a)
a, b: β„€


card (Ioc a b) = card (Ioc a b)

Goals accomplished! πŸ™
#align int.card_fintype_Ioc
Int.card_fintype_Ioc: βˆ€ (a b : β„€), Fintype.card ↑(Set.Ioc a b) = toNat (b - a)
Int.card_fintype_Ioc
-- porting note: removed `simp` attribute because `simpNF` says it can prove it theorem
card_fintype_Ioo: βˆ€ (a b : β„€), Fintype.card ↑(Set.Ioo a b) = toNat (b - a - 1)
card_fintype_Ioo
:
Fintype.card: (Ξ± : Type ?u.14577) β†’ [inst : Fintype Ξ±] β†’ β„•
Fintype.card
(
Set.Ioo: {Ξ± : Type ?u.14578} β†’ [inst : Preorder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Set Ξ±
Set.Ioo
a b) = (b - a -
1: ?m.14925
1
).
toNat: β„€ β†’ β„•
toNat
:=

Goals accomplished! πŸ™
a, b: β„€


Fintype.card ↑(Set.Ioo a b) = toNat (b - a - 1)
a, b: β„€


Fintype.card ↑(Set.Ioo a b) = toNat (b - a - 1)
a, b: β„€


Fintype.card ↑(Set.Ioo a b) = card (Ioo a b)
a, b: β„€


Fintype.card ↑(Set.Ioo a b) = toNat (b - a - 1)
a, b: β„€


card (Ioo a b) = card (Ioo a b)

Goals accomplished! πŸ™
#align int.card_fintype_Ioo
Int.card_fintype_Ioo: βˆ€ (a b : β„€), Fintype.card ↑(Set.Ioo a b) = toNat (b - a - 1)
Int.card_fintype_Ioo
theorem
card_fintype_Icc_of_le: βˆ€ (a b : β„€), a ≀ b + 1 β†’ ↑(Fintype.card ↑(Set.Icc a b)) = b + 1 - a
card_fintype_Icc_of_le
(
h: a ≀ b + 1
h
: a ≀ b +
1: ?m.15071
1
) : (
Fintype.card: (Ξ± : Type ?u.15140) β†’ [inst : Fintype Ξ±] β†’ β„•
Fintype.card
(
Set.Icc: {Ξ± : Type ?u.15141} β†’ [inst : Preorder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Set Ξ±
Set.Icc
a b) :
β„€: Type
β„€
) = b +
1: ?m.15546
1
- a :=

Goals accomplished! πŸ™
a, b: β„€

h: a ≀ b + 1


↑(Fintype.card ↑(Set.Icc a b)) = b + 1 - a
a, b: β„€

h: a ≀ b + 1


↑(Fintype.card ↑(Set.Icc a b)) = b + 1 - a
a, b: β„€

h: a ≀ b + 1


↑(toNat (b + 1 - a)) = b + 1 - a
a, b: β„€

h: a ≀ b + 1


↑(Fintype.card ↑(Set.Icc a b)) = b + 1 - a
a, b: β„€

h: a ≀ b + 1


b + 1 - a = b + 1 - a

Goals accomplished! πŸ™
#align int.card_fintype_Icc_of_le
Int.card_fintype_Icc_of_le: βˆ€ (a b : β„€), a ≀ b + 1 β†’ ↑(Fintype.card ↑(Set.Icc a b)) = b + 1 - a
Int.card_fintype_Icc_of_le
theorem
card_fintype_Ico_of_le: a ≀ b β†’ ↑(Fintype.card ↑(Set.Ico a b)) = b - a
card_fintype_Ico_of_le
(
h: a ≀ b
h
: a ≀ b) : (
Fintype.card: (Ξ± : Type ?u.15680) β†’ [inst : Fintype Ξ±] β†’ β„•
Fintype.card
(
Set.Ico: {Ξ± : Type ?u.15681} β†’ [inst : Preorder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Set Ξ±
Set.Ico
a b) :
β„€: Type
β„€
) = b - a :=

Goals accomplished! πŸ™
a, b: β„€

h: a ≀ b


↑(Fintype.card ↑(Set.Ico a b)) = b - a
a, b: β„€

h: a ≀ b


↑(Fintype.card ↑(Set.Ico a b)) = b - a
a, b: β„€

h: a ≀ b


↑(toNat (b - a)) = b - a
a, b: β„€

h: a ≀ b


↑(Fintype.card ↑(Set.Ico a b)) = b - a
a, b: β„€

h: a ≀ b


b - a = b - a

Goals accomplished! πŸ™
#align int.card_fintype_Ico_of_le
Int.card_fintype_Ico_of_le: βˆ€ (a b : β„€), a ≀ b β†’ ↑(Fintype.card ↑(Set.Ico a b)) = b - a
Int.card_fintype_Ico_of_le
theorem
card_fintype_Ioc_of_le: βˆ€ (a b : β„€), a ≀ b β†’ ↑(Fintype.card ↑(Set.Ioc a b)) = b - a
card_fintype_Ioc_of_le
(
h: a ≀ b
h
: a ≀ b) : (
Fintype.card: (Ξ± : Type ?u.16174) β†’ [inst : Fintype Ξ±] β†’ β„•
Fintype.card
(
Set.Ioc: {Ξ± : Type ?u.16175} β†’ [inst : Preorder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Set Ξ±
Set.Ioc
a b) :
β„€: Type
β„€
) = b - a :=

Goals accomplished! πŸ™
a, b: β„€

h: a ≀ b


↑(Fintype.card ↑(Set.Ioc a b)) = b - a
a, b: β„€

h: a ≀ b


↑(Fintype.card ↑(Set.Ioc a b)) = b - a
a, b: β„€

h: a ≀ b


↑(toNat (b - a)) = b - a
a, b: β„€

h: a ≀ b


↑(Fintype.card ↑(Set.Ioc a b)) = b - a
a, b: β„€

h: a ≀ b


b - a = b - a

Goals accomplished! πŸ™
#align int.card_fintype_Ioc_of_le
Int.card_fintype_Ioc_of_le: βˆ€ (a b : β„€), a ≀ b β†’ ↑(Fintype.card ↑(Set.Ioc a b)) = b - a
Int.card_fintype_Ioc_of_le
theorem
card_fintype_Ioo_of_lt: βˆ€ (a b : β„€), a < b β†’ ↑(Fintype.card ↑(Set.Ioo a b)) = b - a - 1
card_fintype_Ioo_of_lt
(
h: a < b
h
: a < b) : (
Fintype.card: (Ξ± : Type ?u.16662) β†’ [inst : Fintype Ξ±] β†’ β„•
Fintype.card
(
Set.Ioo: {Ξ± : Type ?u.16663} β†’ [inst : Preorder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Set Ξ±
Set.Ioo
a b) :
β„€: Type
β„€
) = b - a -
1: ?m.17050
1
:=

Goals accomplished! πŸ™
a, b: β„€

h: a < b


↑(Fintype.card ↑(Set.Ioo a b)) = b - a - 1
a, b: β„€

h: a < b


↑(Fintype.card ↑(Set.Ioo a b)) = b - a - 1
a, b: β„€

h: a < b


↑(toNat (b - a - 1)) = b - a - 1
a, b: β„€

h: a < b


↑(Fintype.card ↑(Set.Ioo a b)) = b - a - 1
a, b: β„€

h: a < b


↑(toNat (b - (a + 1))) = b - (a + 1)
a, b: β„€

h: a < b


↑(Fintype.card ↑(Set.Ioo a b)) = b - a - 1
a, b: β„€

h: a < b


b - (a + 1) = b - (a + 1)

Goals accomplished! πŸ™
#align int.card_fintype_Ioo_of_lt
Int.card_fintype_Ioo_of_lt: βˆ€ (a b : β„€), a < b β†’ ↑(Fintype.card ↑(Set.Ioo a b)) = b - a - 1
Int.card_fintype_Ioo_of_lt
theorem
image_Ico_emod: βˆ€ (n a : β„€), 0 ≀ a β†’ image (fun x => x % a) (Ico n (n + a)) = Ico 0 a
image_Ico_emod
(n a :
β„€: Type
β„€
) (
h: 0 ≀ a
h
:
0: ?m.17255
0
≀ a) : (
Ico: {Ξ± : Type ?u.17291} β†’ [inst : Preorder Ξ±] β†’ [inst : LocallyFiniteOrder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Finset Ξ±
Ico
n (n + a)).
image: {Ξ± : Type ?u.17418} β†’ {Ξ² : Type ?u.17417} β†’ [inst : DecidableEq Ξ²] β†’ (Ξ± β†’ Ξ²) β†’ Finset Ξ± β†’ Finset Ξ²
image
(Β· % a) =
Ico: {Ξ± : Type ?u.17494} β†’ [inst : Preorder Ξ±] β†’ [inst : LocallyFiniteOrder Ξ±] β†’ Ξ± β†’ Ξ± β†’ Finset Ξ±
Ico
0: ?m.17499
0
a :=

Goals accomplished! πŸ™
a✝, b, n, a: β„€

h: 0 ≀ a


image (fun x => x % a) (Ico n (n + a)) = Ico 0 a
a, b, n: β„€

h: 0 ≀ 0


inl
image (fun x => x % 0) (Ico n (n + 0)) = Ico 0 0
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a


inr
image (fun x => x % a) (Ico n (n + a)) = Ico 0 a
a✝, b, n, a: β„€

h: 0 ≀ a


image (fun x => x % a) (Ico n (n + a)) = Ico 0 a
a, b, n: β„€

h: 0 ≀ 0


inl
image (fun x => x % 0) (Ico n (n + 0)) = Ico 0 0
a, b, n: β„€

h: 0 ≀ 0


inl
image (fun x => x % 0) (Ico n (n + 0)) = Ico 0 0
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a


inr
image (fun x => x % a) (Ico n (n + a)) = Ico 0 a

Goals accomplished! πŸ™
a✝, b, n, a: β„€

h: 0 ≀ a


image (fun x => x % a) (Ico n (n + a)) = Ico 0 a
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€


inr.a
i ∈ image (fun x => x % a) (Ico n (n + a)) ↔ i ∈ Ico 0 a
a✝, b, n, a: β„€

h: 0 ≀ a


image (fun x => x % a) (Ico n (n + a)) = Ico 0 a
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€


inr.a
(βˆƒ a_1, (n ≀ a_1 ∧ a_1 < n + a) ∧ a_1 % a = i) ↔ 0 ≀ i ∧ i < a
a✝, b, n, a: β„€

h: 0 ≀ a


image (fun x => x % a) (Ico n (n + a)) = Ico 0 a
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€


inr.a.mp
(βˆƒ a_1, (n ≀ a_1 ∧ a_1 < n + a) ∧ a_1 % a = i) β†’ 0 ≀ i ∧ i < a
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€


inr.a.mpr
0 ≀ i ∧ i < a β†’ βˆƒ a_2, (n ≀ a_2 ∧ a_2 < n + a) ∧ a_2 % a = i
a✝, b, n, a: β„€

h: 0 ≀ a


image (fun x => x % a) (Ico n (n + a)) = Ico 0 a
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€


inr.a.mp
(βˆƒ a_1, (n ≀ a_1 ∧ a_1 < n + a) ∧ a_1 % a = i) β†’ 0 ≀ i ∧ i < a
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€


inr.a.mp
(βˆƒ a_1, (n ≀ a_1 ∧ a_1 < n + a) ∧ a_1 % a = i) β†’ 0 ≀ i ∧ i < a
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€


inr.a.mpr
0 ≀ i ∧ i < a β†’ βˆƒ a_2, (n ≀ a_2 ∧ a_2 < n + a) ∧ a_2 % a = i
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€

left✝: n ≀ i ∧ i < n + a


inr.a.mp.intro.intro
0 ≀ i % a ∧ i % a < a
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€


inr.a.mp
(βˆƒ a_1, (n ≀ a_1 ∧ a_1 < n + a) ∧ a_1 % a = i) β†’ 0 ≀ i ∧ i < a

Goals accomplished! πŸ™
a✝, b, n, a: β„€

h: 0 ≀ a


image (fun x => x % a) (Ico n (n + a)) = Ico 0 a
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€

hia: 0 ≀ i ∧ i < a


inr.a.mpr
βˆƒ a_1, (n ≀ a_1 ∧ a_1 < n + a) ∧ a_1 % a = i
a✝, b, n, a: β„€

h: 0 ≀ a


image (fun x => x % a) (Ico n (n + a)) = Ico 0 a
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€

hia: 0 ≀ i ∧ i < a

hn: n % a + a * (n / a) = n


inr.a.mpr
βˆƒ a_1, (n ≀ a_1 ∧ a_1 < n + a) ∧ a_1 % a = i
a✝, b, n, a: β„€

h: 0 ≀ a


image (fun x => x % a) (Ico n (n + a)) = Ico 0 a
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€

hia: 0 ≀ i ∧ i < a

hn: n % a + a * (n / a) = n

hi: i < n % a


inr.a.mpr.inl
βˆƒ a_1, (n ≀ a_1 ∧ a_1 < n + a) ∧ a_1 % a = i
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€

hia: 0 ≀ i ∧ i < a

hn: n % a + a * (n / a) = n

hi: n % a ≀ i


inr.a.mpr.inr
βˆƒ a_1, (n ≀ a_1 ∧ a_1 < n + a) ∧ a_1 % a = i
a✝, b, n, a: β„€

h: 0 ≀ a


image (fun x => x % a) (Ico n (n + a)) = Ico 0 a
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€

hia: 0 ≀ i ∧ i < a

hn: n % a + a * (n / a) = n

hi: i < n % a


inr.a.mpr.inl
βˆƒ a_1, (n ≀ a_1 ∧ a_1 < n + a) ∧ a_1 % a = i
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€

hia: 0 ≀ i ∧ i < a

hn: n % a + a * (n / a) = n

hi: i < n % a


inr.a.mpr.inl
βˆƒ a_1, (n ≀ a_1 ∧ a_1 < n + a) ∧ a_1 % a = i
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€

hia: 0 ≀ i ∧ i < a

hn: n % a + a * (n / a) = n

hi: n % a ≀ i


inr.a.mpr.inr
βˆƒ a_1, (n ≀ a_1 ∧ a_1 < n + a) ∧ a_1 % a = i
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€

hia: 0 ≀ i ∧ i < a

hn: n % a + a * (n / a) = n

hi: i < n % a


inr.a.mpr.inl.refine'_1
n ≀ i + a * (n / a + 1)
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€

hia: 0 ≀ i ∧ i < a

hn: n % a + a * (n / a) = n

hi: i < n % a


inr.a.mpr.inl.refine'_2
i + a * (n / a + 1) < n + a
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€

hia: 0 ≀ i ∧ i < a

hn: n % a + a * (n / a) = n

hi: i < n % a


inr.a.mpr.inl.refine'_3
(i + a * (n / a + 1)) % a = i
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€

hia: 0 ≀ i ∧ i < a

hn: n % a + a * (n / a) = n

hi: i < n % a


inr.a.mpr.inl
βˆƒ a_1, (n ≀ a_1 ∧ a_1 < n + a) ∧ a_1 % a = i
a✝, b, n, a: β„€

h: 0 ≀ a

ha: 0 < a

i: β„€

hia: 0 ≀ i