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

! This file was ported from Lean 3 source module data.fintype.basic
! leanprover-community/mathlib commit d78597269638367c3863d40d45108f52207e03cf
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Data.Finset.Image

/-!
# Finite types

This file defines a typeclass to state that a type is finite.

## Main declarations

* `Fintype α`:  Typeclass saying that a type is finite. It takes as fields a `Finset` and a proof
  that all terms of type `α` are in it.
* `Finset.univ`: The finset of all elements of a fintype.

See `Data.Fintype.Card` for the cardinality of a fintype,
the equivalence with `Fin (Fintype.card α)`, and pigeonhole principles.

## Instances

Instances for `Fintype` for
* `{x // p x}` are in this file as `Fintype.subtype`
* `Option α` are in `Data.Fintype.Option`
* `α × β` are in `Data.Fintype.Prod`
* `α ⊕ β` are in `Data.Fintype.Sum`
* `Σ (a : α), β a` are in `Data.Fintype.Sigma`

These files also contain appropriate `Infinite` instances for these types.

`Infinite` instances for `ℕ`, `ℤ`, `Multiset α`, and `List α` are in `Data.Fintype.Lattice`.

Types which have a surjection from/an injection to a `Fintype` are themselves fintypes.
See `Fintype.ofInjective` and `Fintype.ofSurjective`.
-/


open Function

open Nat

universe u v

variable {
α: Type ?u.2
α
β: Type ?u.5
β
γ: Type ?u.8
γ
:
Type _: Type (?u.152214+1)
Type _
} /-- `Fintype α` means that `α` is finite, i.e. there are only finitely many distinct elements of type `α`. The evidence of this is a finset `elems` (a list up to permutation without duplicates), together with a proof that everything of type `α` is in the list. -/ class
Fintype: Type u_1 → Type u_1
Fintype
(
α: Type ?u.20
α
:
Type _: Type (?u.20+1)
Type _
) where /-- The `Finset` containing all elements of a `Fintype` -/
elems: {α : Type u_1} → [self : Fintype α] → Finset α
elems
:
Finset: Type ?u.25 → Type ?u.25
Finset
α: Type ?u.20
α
/-- A proof that `elems` contains every element of the type -/
complete: ∀ {α : Type u_1} [self : Fintype α] (x : α), x Fintype.elems
complete
: ∀
x: α
x
:
α: Type ?u.20
α
,
x: α
x
elems: Finset α
elems
#align fintype
Fintype: Type u_1 → Type u_1
Fintype
namespace Finset variable [
Fintype: Type ?u.1722 → Type ?u.1722
Fintype
α: Type ?u.71
α
] {
s: Finset α
s
t: Finset α
t
:
Finset: Type ?u.7811 → Type ?u.7811
Finset
α: Type ?u.71
α
} /-- `univ` is the universal finite set of type `Finset α` implied from the assumption `Fintype α`. -/ def
univ: {α : Type u_1} → [inst : Fintype α] → Finset α
univ
:
Finset: Type ?u.107 → Type ?u.107
Finset
α: Type ?u.89
α
:= @
Fintype.elems: {α : Type ?u.109} → [self : Fintype α] → Finset α
Fintype.elems
α: Type ?u.89
α
_ #align finset.univ
Finset.univ: {α : Type u_1} → [inst : Fintype α] → Finset α
Finset.univ
@[simp] theorem
mem_univ: ∀ {α : Type u_1} [inst : Fintype α] (x : α), x univ
mem_univ
(
x: α
x
:
α: Type ?u.138
α
) :
x: α
x
∈ (
univ: {α : Type ?u.177} → [inst : Fintype α] → Finset α
univ
:
Finset: Type ?u.176 → Type ?u.176
Finset
α: Type ?u.138
α
) :=
Fintype.complete: ∀ {α : Type ?u.198} [self : Fintype α] (x : α), x Fintype.elems
Fintype.complete
x: α
x
#align finset.mem_univ
Finset.mem_univ: ∀ {α : Type u_1} [inst : Fintype α] (x : α), x univ
Finset.mem_univ
--Porting note: removing @[simp], simp can prove it theorem
mem_univ_val: ∀ (x : α), x univ.val
mem_univ_val
: ∀
x: ?m.248
x
,
x: ?m.248
x
∈ (
univ: {α : Type ?u.270} → [inst : Fintype α] → Finset α
univ
:
Finset: Type ?u.269 → Type ?u.269
Finset
α: Type ?u.229
α
).
1: {α : Type ?u.279} → Finset αMultiset α
1
:=
mem_univ: ∀ {α : Type ?u.295} [inst : Fintype α] (x : α), x univ
mem_univ
#align finset.mem_univ_val
Finset.mem_univ_val: ∀ {α : Type u_1} [inst : Fintype α] (x : α), x univ.val
Finset.mem_univ_val
theorem
eq_univ_iff_forall: s = univ ∀ (x : α), x s
eq_univ_iff_forall
:
s: Finset α
s
=
univ: {α : Type ?u.340} → [inst : Fintype α] → Finset α
univ
↔ ∀
x: ?m.379
x
,
x: ?m.379
x
s: Finset α
s
:=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.324

γ: Type ?u.327

inst✝: Fintype α

s, t: Finset α


s = univ ∀ (x : α), x s

Goals accomplished! 🐙
#align finset.eq_univ_iff_forall
Finset.eq_univ_iff_forall: ∀ {α : Type u_1} [inst : Fintype α] {s : Finset α}, s = univ ∀ (x : α), x s
Finset.eq_univ_iff_forall
theorem
eq_univ_of_forall: (∀ (x : α), x s) → s = univ
eq_univ_of_forall
: (∀
x: ?m.970
x
,
x: ?m.970
x
s: Finset α
s
) →
s: Finset α
s
=
univ: {α : Type ?u.1004} → [inst : Fintype α] → Finset α
univ
:=
eq_univ_iff_forall: ∀ {α : Type ?u.1041} [inst : Fintype α] {s : Finset α}, s = univ ∀ (x : α), x s
eq_univ_iff_forall
.
2: ∀ {a b : Prop}, (a b) → ba
2
#align finset.eq_univ_of_forall
Finset.eq_univ_of_forall: ∀ {α : Type u_1} [inst : Fintype α] {s : Finset α}, (∀ (x : α), x s) → s = univ
Finset.eq_univ_of_forall
@[simp, norm_cast] theorem
coe_univ: univ = Set.univ
coe_univ
: ↑(
univ: {α : Type ?u.1109} → [inst : Fintype α] → Finset α
univ
:
Finset: Type ?u.1108 → Type ?u.1108
Finset
α: Type ?u.1078
α
) = (
Set.univ: {α : Type ?u.1102} → Set α
Set.univ
:
Set: Type ?u.1101 → Type ?u.1101
Set
α: Type ?u.1078
α
) :=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.1081

γ: Type ?u.1084

inst✝: Fintype α

s, t: Finset α


univ = Set.univ
α: Type u_1

β: Type ?u.1081

γ: Type ?u.1084

inst✝: Fintype α

s, t: Finset α

x✝: α


h
x✝ univ x✝ Set.univ
α: Type u_1

β: Type ?u.1081

γ: Type ?u.1084

inst✝: Fintype α

s, t: Finset α

x✝: α


h
x✝ univ x✝ Set.univ
α: Type u_1

β: Type ?u.1081

γ: Type ?u.1084

inst✝: Fintype α

s, t: Finset α


univ = Set.univ

Goals accomplished! 🐙
#align finset.coe_univ
Finset.coe_univ: ∀ {α : Type u_1} [inst : Fintype α], univ = Set.univ
Finset.coe_univ
@[simp, norm_cast] theorem
coe_eq_univ: s = Set.univ s = univ
coe_eq_univ
: (
s: Finset α
s
:
Set: Type ?u.1396 → Type ?u.1396
Set
α: Type ?u.1376
α
) =
Set.univ: {α : Type ?u.1498} → Set α
Set.univ
s: Finset α
s
=
univ: {α : Type ?u.1530} → [inst : Fintype α] → Finset α
univ
:=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.1379

γ: Type ?u.1382

inst✝: Fintype α

s, t: Finset α


s = Set.univ s = univ
α: Type u_1

β: Type ?u.1379

γ: Type ?u.1382

inst✝: Fintype α

s, t: Finset α


s = Set.univ s = univ
α: Type u_1

β: Type ?u.1379

γ: Type ?u.1382

inst✝: Fintype α

s, t: Finset α


s = univ s = univ
α: Type u_1

β: Type ?u.1379

γ: Type ?u.1382

inst✝: Fintype α

s, t: Finset α


s = Set.univ s = univ
α: Type u_1

β: Type ?u.1379

γ: Type ?u.1382

inst✝: Fintype α

s, t: Finset α


s = univ s = univ

Goals accomplished! 🐙
#align finset.coe_eq_univ
Finset.coe_eq_univ: ∀ {α : Type u_1} [inst : Fintype α] {s : Finset α}, s = Set.univ s = univ
Finset.coe_eq_univ
theorem
Nonempty.eq_univ: ∀ [inst : Subsingleton α], Finset.Nonempty ss = univ
Nonempty.eq_univ
[
Subsingleton: Sort ?u.1731 → Prop
Subsingleton
α: Type ?u.1713
α
] :
s: Finset α
s
.
Nonempty: {α : Type ?u.1735} → Finset αProp
Nonempty
s: Finset α
s
=
univ: {α : Type ?u.1742} → [inst : Fintype α] → Finset α
univ
:=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.1716

γ: Type ?u.1719

inst✝¹: Fintype α

s, t: Finset α

inst✝: Subsingleton α


Finset.Nonempty ss = univ
α: Type u_1

β: Type ?u.1716

γ: Type ?u.1719

inst✝¹: Fintype α

s, t: Finset α

inst✝: Subsingleton α

x: α

hx: x s


intro
s = univ
α: Type u_1

β: Type ?u.1716

γ: Type ?u.1719

inst✝¹: Fintype α

s, t: Finset α

inst✝: Subsingleton α


Finset.Nonempty ss = univ
α: Type u_1

β: Type ?u.1716

γ: Type ?u.1719

inst✝¹: Fintype α

s, t: Finset α

inst✝: Subsingleton α

x: α

hx: x s


intro
s = univ

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.1716

γ: Type ?u.1719

inst✝¹: Fintype α

s, t: Finset α

inst✝: Subsingleton α

x: α

hx: x s

y: α


y s
α: Type u_1

β: Type ?u.1716

γ: Type ?u.1719

inst✝¹: Fintype α

s, t: Finset α

inst✝: Subsingleton α

x: α

hx: x s

y: α


y s
α: Type u_1

β: Type ?u.1716

γ: Type ?u.1719

inst✝¹: Fintype α

s, t: Finset α

inst✝: Subsingleton α

x: α

hx: x s

y: α


x s
α: Type u_1

β: Type ?u.1716

γ: Type ?u.1719

inst✝¹: Fintype α

s, t: Finset α

inst✝: Subsingleton α

x: α

hx: x s

y: α


x s
#align finset.nonempty.eq_univ
Finset.Nonempty.eq_univ: ∀ {α : Type u_1} [inst : Fintype α] {s : Finset α} [inst_1 : Subsingleton α], Finset.Nonempty ss = univ
Finset.Nonempty.eq_univ
theorem
univ_nonempty_iff: ∀ {α : Type u_1} [inst : Fintype α], Finset.Nonempty univ Nonempty α
univ_nonempty_iff
: (
univ: {α : Type ?u.1877} → [inst : Fintype α] → Finset α
univ
:
Finset: Type ?u.1876 → Type ?u.1876
Finset
α: Type ?u.1857
α
).
Nonempty: {α : Type ?u.1886} → Finset αProp
Nonempty
Nonempty: Sort ?u.1890 → Prop
Nonempty
α: Type ?u.1857
α
:=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.1860

γ: Type ?u.1863

inst✝: Fintype α

s, t: Finset α


α: Type u_1

β: Type ?u.1860

γ: Type ?u.1863

inst✝: Fintype α

s, t: Finset α


α: Type u_1

β: Type ?u.1860

γ: Type ?u.1863

inst✝: Fintype α

s, t: Finset α


α: Type u_1

β: Type ?u.1860

γ: Type ?u.1863

inst✝: Fintype α

s, t: Finset α


α: Type u_1

β: Type ?u.1860

γ: Type ?u.1863

inst✝: Fintype α

s, t: Finset α


α: Type u_1

β: Type ?u.1860

γ: Type ?u.1863

inst✝: Fintype α

s, t: Finset α


α: Type u_1

β: Type ?u.1860

γ: Type ?u.1863

inst✝: Fintype α

s, t: Finset α


Set.Nonempty Set.univ Set.Nonempty Set.univ

Goals accomplished! 🐙
#align finset.univ_nonempty_iff
Finset.univ_nonempty_iff: ∀ {α : Type u_1} [inst : Fintype α], Finset.Nonempty univ Nonempty α
Finset.univ_nonempty_iff
theorem
univ_nonempty: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : Nonempty α], Finset.Nonempty univ
univ_nonempty
[
Nonempty: Sort ?u.1954 → Prop
Nonempty
α: Type ?u.1936
α
] : (
univ: {α : Type ?u.1959} → [inst : Fintype α] → Finset α
univ
:
Finset: Type ?u.1958 → Type ?u.1958
Finset
α: Type ?u.1936
α
).
Nonempty: {α : Type ?u.1968} → Finset αProp
Nonempty
:=
univ_nonempty_iff: ∀ {α : Type ?u.1975} [inst : Fintype α], Finset.Nonempty univ Nonempty α
univ_nonempty_iff
.
2: ∀ {a b : Prop}, (a b) → ba
2
‹_› #align finset.univ_nonempty
Finset.univ_nonempty: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : Nonempty α], Finset.Nonempty univ
Finset.univ_nonempty
theorem
univ_eq_empty_iff: ∀ {α : Type u_1} [inst : Fintype α], univ = IsEmpty α
univ_eq_empty_iff
: (
univ: {α : Type ?u.2020} → [inst : Fintype α] → Finset α
univ
:
Finset: Type ?u.2019 → Type ?u.2019
Finset
α: Type ?u.1999
α
) =
: ?m.2030
IsEmpty: Sort ?u.2110 → Prop
IsEmpty
α: Type ?u.1999
α
:=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.2002

γ: Type ?u.2005

inst✝: Fintype α

s, t: Finset α


univ = IsEmpty α
α: Type u_1

β: Type ?u.2002

γ: Type ?u.2005

inst✝: Fintype α

s, t: Finset α


univ = IsEmpty α
α: Type u_1

β: Type ?u.2002

γ: Type ?u.2005

inst✝: Fintype α

s, t: Finset α


α: Type u_1

β: Type ?u.2002

γ: Type ?u.2005

inst✝: Fintype α

s, t: Finset α


univ = IsEmpty α
α: Type u_1

β: Type ?u.2002

γ: Type ?u.2005

inst✝: Fintype α

s, t: Finset α


α: Type u_1

β: Type ?u.2002

γ: Type ?u.2005

inst✝: Fintype α

s, t: Finset α


univ = IsEmpty α
α: Type u_1

β: Type ?u.2002

γ: Type ?u.2005

inst✝: Fintype α

s, t: Finset α


univ = univ =

Goals accomplished! 🐙
#align finset.univ_eq_empty_iff
Finset.univ_eq_empty_iff: ∀ {α : Type u_1} [inst : Fintype α], univ = IsEmpty α
Finset.univ_eq_empty_iff
@[simp] theorem
univ_eq_empty: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : IsEmpty α], univ =
univ_eq_empty
[
IsEmpty: Sort ?u.2171 → Prop
IsEmpty
α: Type ?u.2153
α
] : (
univ: {α : Type ?u.2177} → [inst : Fintype α] → Finset α
univ
:
Finset: Type ?u.2176 → Type ?u.2176
Finset
α: Type ?u.2153
α
) =
: ?m.2187
:=
univ_eq_empty_iff: ∀ {α : Type ?u.2269} [inst : Fintype α], univ = IsEmpty α
univ_eq_empty_iff
.
2: ∀ {a b : Prop}, (a b) → ba
2
‹_› #align finset.univ_eq_empty
Finset.univ_eq_empty: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : IsEmpty α], univ =
Finset.univ_eq_empty
@[simp] theorem
univ_unique: ∀ [inst : Unique α], univ = {default}
univ_unique
[
Unique: Sort ?u.2321 → Sort (max1?u.2321)
Unique
α: Type ?u.2303
α
] : (
univ: {α : Type ?u.2327} → [inst : Fintype α] → Finset α
univ
:
Finset: Type ?u.2326 → Type ?u.2326
Finset
α: Type ?u.2303
α
) = {
default: {α : Sort ?u.3013} → [self : Inhabited α] → α
default
} :=
Finset.ext: ∀ {α : Type ?u.3348} {s₁ s₂ : Finset α}, (∀ (a : α), a s₁ a s₂) → s₁ = s₂
Finset.ext
fun
x: ?m.3357
x
=>
iff_of_true: ∀ {a b : Prop}, ab → (a b)
iff_of_true
(
mem_univ: ∀ {α : Type ?u.3363} [inst : Fintype α] (x : α), x univ
mem_univ
_: ?m.3364
_
) <|
mem_singleton: ∀ {α : Type ?u.3381} {a b : α}, b {a} b = a
mem_singleton
.
2: ∀ {a b : Prop}, (a b) → ba
2
<|
Subsingleton.elim: ∀ {α : Sort ?u.3391} [h : Subsingleton α] (a b : α), a = b
Subsingleton.elim
x: ?m.3357
x
default: {α : Sort ?u.3394} → [self : Inhabited α] → α
default
#align finset.univ_unique
Finset.univ_unique: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : Unique α], univ = {default}
Finset.univ_unique
@[simp] theorem
subset_univ: ∀ {α : Type u_1} [inst : Fintype α] (s : Finset α), s univ
subset_univ
(
s: Finset α
s
:
Finset: Type ?u.3604 → Type ?u.3604
Finset
α: Type ?u.3586
α
) :
s: Finset α
s
univ: {α : Type ?u.3618} → [inst : Fintype α] → Finset α
univ
:= fun
a: ?m.3636
a
_: ?m.3639
_
=>
mem_univ: ∀ {α : Type ?u.3641} [inst : Fintype α] (x : α), x univ
mem_univ
a: ?m.3636
a
#align finset.subset_univ
Finset.subset_univ: ∀ {α : Type u_1} [inst : Fintype α] (s : Finset α), s univ
Finset.subset_univ
instance
boundedOrder: BoundedOrder (Finset α)
boundedOrder
:
BoundedOrder: (α : Type ?u.3690) → [inst : LE α] → Type ?u.3690
BoundedOrder
(
Finset: Type ?u.3691 → Type ?u.3691
Finset
α: Type ?u.3672
α
) := {
inferInstanceAs: (α : Sort ?u.3727) → [i : α] → α
inferInstanceAs
(
OrderBot: (α : Type ?u.3728) → [inst : LE α] → Type ?u.3728
OrderBot
(
Finset: Type ?u.3729 → Type ?u.3729
Finset
α: Type ?u.3672
α
)) with top :=
univ: {α : Type ?u.3786} → [inst : Fintype α] → Finset α
univ
le_top :=
subset_univ: ∀ {α : Type ?u.3795} [inst : Fintype α] (s : Finset α), s univ
subset_univ
} #align finset.bounded_order
Finset.boundedOrder: {α : Type u_1} → [inst : Fintype α] → BoundedOrder (Finset α)
Finset.boundedOrder
@[simp] theorem
top_eq_univ: ∀ {α : Type u_1} [inst : Fintype α], = univ
top_eq_univ
: (
: ?m.3936
:
Finset: Type ?u.3934 → Type ?u.3934
Finset
α: Type ?u.3914
α
) =
univ: {α : Type ?u.4090} → [inst : Fintype α] → Finset α
univ
:=
rfl: ∀ {α : Sort ?u.4125} {a : α}, a = a
rfl
#align finset.top_eq_univ
Finset.top_eq_univ: ∀ {α : Type u_1} [inst : Fintype α], = univ
Finset.top_eq_univ
theorem
ssubset_univ_iff: ∀ {α : Type u_1} [inst : Fintype α] {s : Finset α}, s univ s univ
ssubset_univ_iff
{
s: Finset α
s
:
Finset: Type ?u.4159 → Type ?u.4159
Finset
α: Type ?u.4141
α
} :
s: Finset α
s
univ: {α : Type ?u.4166} → [inst : Fintype α] → Finset α
univ
s: Finset α
s
univ: {α : Type ?u.4182} → [inst : Fintype α] → Finset α
univ
:= @
lt_top_iff_ne_top: ∀ {α : Type ?u.4189} [inst : PartialOrder α] [inst_1 : OrderTop α] {a : α}, a < a
lt_top_iff_ne_top
_: Type ?u.4189
_
_ _
s: Finset α
s
#align finset.ssubset_univ_iff
Finset.ssubset_univ_iff: ∀ {α : Type u_1} [inst : Fintype α] {s : Finset α}, s univ s univ
Finset.ssubset_univ_iff
theorem
codisjoint_left: ∀ {α : Type u_1} [inst : Fintype α] {s t : Finset α}, Codisjoint s t ∀ ⦃a : α⦄, ¬a sa t
codisjoint_left
:
Codisjoint: {α : Type ?u.4285} → [inst : PartialOrder α] → [inst : OrderTop α] → ααProp
Codisjoint
s: Finset α
s
t: Finset α
t
↔ ∀ ⦃
a: ?m.4342
a
⦄,
a: ?m.4342
a
s: Finset α
s
a: ?m.4342
a
t: Finset α
t
:=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.4270

γ: Type ?u.4273

inst✝: Fintype α

s, t: Finset α


Codisjoint s t ∀ ⦃a : α⦄, ¬a sa t
α: Type u_1

β: Type ?u.4270

γ: Type ?u.4273

inst✝: Fintype α

s, t: Finset α


Codisjoint s t ∀ ⦃a : α⦄, ¬a sa t

Goals accomplished! 🐙
#align finset.codisjoint_left
Finset.codisjoint_left: ∀ {α : Type u_1} [inst : Fintype α] {s t : Finset α}, Codisjoint s t ∀ ⦃a : α⦄, ¬a sa t
Finset.codisjoint_left
theorem
codisjoint_right: Codisjoint s t ∀ ⦃a : α⦄, ¬a ta s
codisjoint_right
:
Codisjoint: {α : Type ?u.6836} → [inst : PartialOrder α] → [inst : OrderTop α] → ααProp
Codisjoint
s: Finset α
s
t: Finset α
t
↔ ∀ ⦃
a: ?m.6893
a
⦄,
a: ?m.6893
a
t: Finset α
t
a: ?m.6893
a
s: Finset α
s
:=
Codisjoint_comm: ∀ {α : Type ?u.6939} [inst : PartialOrder α] [inst_1 : OrderTop α] {a b : α}, Codisjoint a b Codisjoint b a
Codisjoint_comm
.
trans: ∀ {a b c : Prop}, (a b) → (b c) → (a c)
trans
codisjoint_left: ∀ {α : Type ?u.7019} [inst : Fintype α] {s t : Finset α}, Codisjoint s t ∀ ⦃a : α⦄, ¬a sa t
codisjoint_left
#align finset.codisjoint_right
Finset.codisjoint_right: ∀ {α : Type u_1} [inst : Fintype α] {s t : Finset α}, Codisjoint s t ∀ ⦃a : α⦄, ¬a ta s
Finset.codisjoint_right
section BooleanAlgebra variable [
DecidableEq: Sort ?u.9320 → Sort (max1?u.9320)
DecidableEq
α: Type ?u.7124
α
] {
a: α
a
:
α: Type ?u.7095
α
} instance
booleanAlgebra: {α : Type u_1} → [inst : Fintype α] → [inst : DecidableEq α] → BooleanAlgebra (Finset α)
booleanAlgebra
:
BooleanAlgebra: Type ?u.7153 → Type ?u.7153
BooleanAlgebra
(
Finset: Type ?u.7154 → Type ?u.7154
Finset
α: Type ?u.7124
α
) :=
GeneralizedBooleanAlgebra.toBooleanAlgebra: {α : Type ?u.7156} → [inst : GeneralizedBooleanAlgebra α] → [inst : OrderTop α] → BooleanAlgebra α
GeneralizedBooleanAlgebra.toBooleanAlgebra
#align finset.boolean_algebra
Finset.booleanAlgebra: {α : Type u_1} → [inst : Fintype α] → [inst : DecidableEq α] → BooleanAlgebra (Finset α)
Finset.booleanAlgebra
theorem
sdiff_eq_inter_compl: ∀ (s t : Finset α), s \ t = s t
sdiff_eq_inter_compl
(
s: Finset α
s
t: Finset α
t
:
Finset: Type ?u.7368 → Type ?u.7368
Finset
α: Type ?u.7339
α
) :
s: Finset α
s
\
t: Finset α
t
=
s: Finset α
s
t: Finset α
t
ᶜ :=
sdiff_eq: ∀ {α : Type ?u.7503} {x y : α} [inst : BooleanAlgebra α], x \ y = x y
sdiff_eq
#align finset.sdiff_eq_inter_compl
Finset.sdiff_eq_inter_compl: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s t : Finset α), s \ t = s t
Finset.sdiff_eq_inter_compl
theorem
compl_eq_univ_sdiff: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s : Finset α), s = univ \ s
compl_eq_univ_sdiff
(
s: Finset α
s
:
Finset: Type ?u.7657 → Type ?u.7657
Finset
α: Type ?u.7628
α
) :
s: Finset α
s
ᶜ =
univ: {α : Type ?u.7714} → [inst : Fintype α] → Finset α
univ
\
s: Finset α
s
:=
rfl: ∀ {α : Sort ?u.7755} {a : α}, a = a
rfl
#align finset.compl_eq_univ_sdiff
Finset.compl_eq_univ_sdiff: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s : Finset α), s = univ \ s
Finset.compl_eq_univ_sdiff
@[simp] theorem
mem_compl: ∀ {α : Type u_1} [inst : Fintype α] {s : Finset α} [inst_1 : DecidableEq α] {a : α}, a s ¬a s
mem_compl
:
a: α
a
s: Finset α
s
ᶜ ↔
a: α
a
s: Finset α
s
:=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.7802

γ: Type ?u.7805

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a: α


a s ¬a s

Goals accomplished! 🐙
#align finset.mem_compl
Finset.mem_compl: ∀ {α : Type u_1} [inst : Fintype α] {s : Finset α} [inst_1 : DecidableEq α] {a : α}, a s ¬a s
Finset.mem_compl
theorem
not_mem_compl: ¬a s a s
not_mem_compl
:
a: α
a
s: Finset α
s
ᶜ ↔
a: α
a
s: Finset α
s
:=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.8229

γ: Type ?u.8232

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a: α


¬a s a s
α: Type u_1

β: Type ?u.8229

γ: Type ?u.8232

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a: α


¬a s a s
α: Type u_1

β: Type ?u.8229

γ: Type ?u.8232

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a: α


¬¬a s a s
α: Type u_1

β: Type ?u.8229

γ: Type ?u.8232

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a: α


¬a s a s
α: Type u_1

β: Type ?u.8229

γ: Type ?u.8232

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a: α


a s a s

Goals accomplished! 🐙
#align finset.not_mem_compl
Finset.not_mem_compl: ∀ {α : Type u_1} [inst : Fintype α] {s : Finset α} [inst_1 : DecidableEq α] {a : α}, ¬a s a s
Finset.not_mem_compl
@[simp, norm_cast] theorem
coe_compl: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s : Finset α), ↑(s) = s
coe_compl
(
s: Finset α
s
:
Finset: Type ?u.8557 → Type ?u.8557
Finset
α: Type ?u.8528
α
) : ↑(
s: Finset α
s
ᶜ) = (↑
s: Finset α
s
:
Set: Type ?u.8568 → Type ?u.8568
Set
α: Type ?u.8528
α
)ᶜ :=
Set.ext: ∀ {α : Type ?u.8791} {a b : Set α}, (∀ (x : α), x a x b) → a = b
Set.ext
fun
_: ?m.8800
_
=>
mem_compl: ∀ {α : Type ?u.8802} [inst : Fintype α] {s : Finset α} [inst_1 : DecidableEq α] {a : α}, a s ¬a s
mem_compl
#align finset.coe_compl
Finset.coe_compl: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s : Finset α), ↑(s) = s
Finset.coe_compl
@[simp] theorem
compl_empty: = univ
compl_empty
: (
: ?m.9075
:
Finset: Type ?u.9073 → Type ?u.9073
Finset
α: Type ?u.9039
α
)ᶜ =
univ: {α : Type ?u.9165} → [inst : Fintype α] → Finset α
univ
:=
compl_bot: ∀ {α : Type ?u.9200} [inst : HeytingAlgebra α], =
compl_bot
#align finset.compl_empty
Finset.compl_empty: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α], = univ
Finset.compl_empty
@[simp] theorem
compl_univ: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α], univ =
compl_univ
: (
univ: {α : Type ?u.9337} → [inst : Fintype α] → Finset α
univ
:
Finset: Type ?u.9336 → Type ?u.9336
Finset
α: Type ?u.9302
α
)ᶜ =
: ?m.9391
:=
compl_top: ∀ {α : Type ?u.9471} [inst : HeytingAlgebra α], =
compl_top
#align finset.compl_univ
Finset.compl_univ: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α], univ =
Finset.compl_univ
@[simp] theorem
compl_eq_empty_iff: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s : Finset α), s = s = univ
compl_eq_empty_iff
(
s: Finset α
s
:
Finset: Type ?u.9602 → Type ?u.9602
Finset
α: Type ?u.9573
α
) :
s: Finset α
s
ᶜ =
: ?m.9657
s: Finset α
s
=
univ: {α : Type ?u.9737} → [inst : Fintype α] → Finset α
univ
:=
compl_eq_bot: ∀ {α : Type ?u.9773} {x : α} [inst : BooleanAlgebra α], x = x =
compl_eq_bot
#align finset.compl_eq_empty_iff
Finset.compl_eq_empty_iff: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s : Finset α), s = s = univ
Finset.compl_eq_empty_iff
@[simp] theorem
compl_eq_univ_iff: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s : Finset α), s = univ s =
compl_eq_univ_iff
(
s: Finset α
s
:
Finset: Type ?u.9896 → Type ?u.9896
Finset
α: Type ?u.9867
α
) :
s: Finset α
s
ᶜ =
univ: {α : Type ?u.9950} → [inst : Fintype α] → Finset α
univ
s: Finset α
s
=
: ?m.9986
:=
compl_eq_top: ∀ {α : Type ?u.10067} {x : α} [inst : BooleanAlgebra α], x = x =
compl_eq_top
#align finset.compl_eq_univ_iff
Finset.compl_eq_univ_iff: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s : Finset α), s = univ s =
Finset.compl_eq_univ_iff
@[simp] theorem
union_compl: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s : Finset α), s s = univ
union_compl
(
s: Finset α
s
:
Finset: Type ?u.10190 → Type ?u.10190
Finset
α: Type ?u.10161
α
) :
s: Finset α
s
s: Finset α
s
ᶜ =
univ: {α : Type ?u.10285} → [inst : Fintype α] → Finset α
univ
:=
sup_compl_eq_top: ∀ {α : Type ?u.10321} {x : α} [inst : BooleanAlgebra α], x x =
sup_compl_eq_top
#align finset.union_compl
Finset.union_compl: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s : Finset α), s s = univ
Finset.union_compl
@[simp] theorem
inter_compl: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s : Finset α), s s =
inter_compl
(
s: Finset α
s
:
Finset: Type ?u.10508 → Type ?u.10508
Finset
α: Type ?u.10479
α
) :
s: Finset α
s
s: Finset α
s
ᶜ =
: ?m.10604
:=
inf_compl_eq_bot: ∀ {α : Type ?u.10685} [inst : HeytingAlgebra α] {a : α}, a a =
inf_compl_eq_bot
#align finset.inter_compl
Finset.inter_compl: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s : Finset α), s s =
Finset.inter_compl
@[simp] theorem
compl_union: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s t : Finset α), (s t) = s t
compl_union
(
s: Finset α
s
t: Finset α
t
:
Finset: Type ?u.10888 → Type ?u.10888
Finset
α: Type ?u.10856
α
) : (
s: Finset α
s
t: Finset α
t
)ᶜ =
s: Finset α
s
ᶜ ∩
t: Finset α
t
ᶜ :=
compl_sup: ∀ {α : Type ?u.11041} [inst : HeytingAlgebra α] {a b : α}, (a b) = a b
compl_sup
#align finset.compl_union
Finset.compl_union: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s t : Finset α), (s t) = s t
Finset.compl_union
@[simp] theorem
compl_inter: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s t : Finset α), (s t) = s t
compl_inter
(
s: Finset α
s
t: Finset α
t
:
Finset: Type ?u.11285 → Type ?u.11285
Finset
α: Type ?u.11253
α
) : (
s: Finset α
s
t: Finset α
t
)ᶜ =
s: Finset α
s
ᶜ ∪
t: Finset α
t
ᶜ :=
compl_inf: ∀ {α : Type ?u.11438} {x y : α} [inst : BooleanAlgebra α], (x y) = x y
compl_inf
#align finset.compl_inter
Finset.compl_inter: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s t : Finset α), (s t) = s t
Finset.compl_inter
@[simp] theorem
compl_erase: ∀ {α : Type u_1} [inst : Fintype α] {s : Finset α} [inst_1 : DecidableEq α] {a : α}, erase s a = insert a (s)
compl_erase
:
s: Finset α
s
.
erase: {α : Type ?u.11672} → [inst : DecidableEq α] → Finset ααFinset α
erase
a: α
a
ᶜ =
insert: {α : outParam (Type ?u.11759)} → {γ : Type ?u.11758} → [self : Insert α γ] → αγγ
insert
a: α
a
(
s: Finset α
s
ᶜ) :=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.11642

γ: Type ?u.11645

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a: α


erase s a = insert a (s)
α: Type u_1

β: Type ?u.11642

γ: Type ?u.11645

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a, a✝: α


a
a✝ erase s a a✝ insert a (s)
α: Type u_1

β: Type ?u.11642

γ: Type ?u.11645

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a: α


erase s a = insert a (s)

Goals accomplished! 🐙
#align finset.compl_erase
Finset.compl_erase: ∀ {α : Type u_1} [inst : Fintype α] {s : Finset α} [inst_1 : DecidableEq α] {a : α}, erase s a = insert a (s)
Finset.compl_erase
@[simp] theorem
compl_insert: ∀ {α : Type u_1} [inst : Fintype α] {s : Finset α} [inst_1 : DecidableEq α] {a : α}, insert a s = erase (s) a
compl_insert
:
insert: {α : outParam (Type ?u.12324)} → {γ : Type ?u.12323} → [self : Insert α γ] → αγγ
insert
a: α
a
s: Finset α
s
ᶜ =
s: Finset α
s
ᶜ.
erase: {α : Type ?u.12417} → [inst : DecidableEq α] → Finset ααFinset α
erase
a: α
a
:=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.12293

γ: Type ?u.12296

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a: α


insert a s = erase (s) a
α: Type u_1

β: Type ?u.12293

γ: Type ?u.12296

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a, a✝: α


a
a✝ insert a s a✝ erase (s) a
α: Type u_1

β: Type ?u.12293

γ: Type ?u.12296

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a: α


insert a s = erase (s) a

Goals accomplished! 🐙
#align finset.compl_insert
Finset.compl_insert: ∀ {α : Type u_1} [inst : Fintype α] {s : Finset α} [inst_1 : DecidableEq α] {a : α}, insert a s = erase (s) a
Finset.compl_insert
@[simp] theorem
insert_compl_self: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (x : α), insert x ({x}) = univ
insert_compl_self
(
x: α
x
:
α: Type ?u.12909
α
) :
insert: {α : outParam (Type ?u.12942)} → {γ : Type ?u.12941} → [self : Insert α γ] → αγγ
insert
x: α
x
({
x: α
x
}ᶜ :
Finset: Type ?u.12948 → Type ?u.12948
Finset
α: Type ?u.12909
α
) =
univ: {α : Type ?u.13063} → [inst : Fintype α] → Finset α
univ
:=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.12912

γ: Type ?u.12915

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a, x: α


insert x ({x}) = univ
α: Type u_1

β: Type ?u.12912

γ: Type ?u.12915

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a, x: α


insert x ({x}) = univ
α: Type u_1

β: Type ?u.12912

γ: Type ?u.12915

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a, x: α


erase {x} x = univ
α: Type u_1

β: Type ?u.12912

γ: Type ?u.12915

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a, x: α


insert x ({x}) = univ
α: Type u_1

β: Type ?u.12912

γ: Type ?u.12915

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a, x: α


= univ
α: Type u_1

β: Type ?u.12912

γ: Type ?u.12915

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a, x: α


insert x ({x}) = univ
α: Type u_1

β: Type ?u.12912

γ: Type ?u.12915

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a, x: α


univ = univ

Goals accomplished! 🐙
#align finset.insert_compl_self
Finset.insert_compl_self: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (x : α), insert x ({x}) = univ
Finset.insert_compl_self
@[simp] theorem
compl_filter: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (p : αProp) [inst_2 : DecidablePred p] [inst_3 : (x : α) → Decidable ¬p x], filter p univ = filter (fun x => ¬p x) univ
compl_filter
(
p: αProp
p
:
α: Type ?u.13575
α
Prop: Type
Prop
) [
DecidablePred: {α : Sort ?u.13608} → (αProp) → Sort (max1?u.13608)
DecidablePred
p: αProp
p
] [∀
x: ?m.13619
x
,
Decidable: PropType
Decidable
¬
p: αProp
p
x: ?m.13619
x
] :
univ: {α : Type ?u.13629} → [inst : Fintype α] → Finset α
univ
.
filter: {α : Type ?u.13634} → (p : αProp) → [inst : DecidablePred p] → Finset αFinset α
filter
p: αProp
p
ᶜ =
univ: {α : Type ?u.13727} → [inst : Fintype α] → Finset α
univ
.
filter: {α : Type ?u.13732} → (p : αProp) → [inst : DecidablePred p] → Finset αFinset α
filter
fun
x: ?m.13740
x
=> ¬
p: αProp
p
x: ?m.13740
x
:=
ext: ∀ {α : Type ?u.13769} {s₁ s₂ : Finset α}, (∀ (a : α), a s₁ a s₂) → s₁ = s₂
ext
<|

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.13578

γ: Type ?u.13581

inst✝³: Fintype α

s, t: Finset α

inst✝²: DecidableEq α

a: α

p: αProp

inst✝¹: DecidablePred p

inst✝: (x : α) → Decidable ¬p x


∀ (a : α), a filter p univ a filter (fun x => ¬p x) univ

Goals accomplished! 🐙
#align finset.compl_filter
Finset.compl_filter: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (p : αProp) [inst_2 : DecidablePred p] [inst_3 : (x : α) → Decidable ¬p x], filter p univ = filter (fun x => ¬p x) univ
Finset.compl_filter
theorem
compl_ne_univ_iff_nonempty: ∀ (s : Finset α), s univ Finset.Nonempty s
compl_ne_univ_iff_nonempty
(
s: Finset α
s
:
Finset: Type ?u.16603 → Type ?u.16603
Finset
α: Type ?u.16574
α
) :
s: Finset α
s
ᶜ ≠
univ: {α : Type ?u.16670} → [inst : Fintype α] → Finset α
univ
s: Finset α
s
.
Nonempty: {α : Type ?u.16676} → Finset αProp
Nonempty
:=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.16577

γ: Type ?u.16580

inst✝¹: Fintype α

s✝, t: Finset α

inst✝: DecidableEq α

a: α

s: Finset α



Goals accomplished! 🐙
#align finset.compl_ne_univ_iff_nonempty
Finset.compl_ne_univ_iff_nonempty: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s : Finset α), s univ Finset.Nonempty s
Finset.compl_ne_univ_iff_nonempty
theorem
compl_singleton: ∀ (a : α), {a} = erase univ a
compl_singleton
(
a: α
a
:
α: Type ?u.18663
α
) : ({
a: α
a
} :
Finset: Type ?u.18699 → Type ?u.18699
Finset
α: Type ?u.18663
α
)ᶜ =
univ: {α : Type ?u.18770} → [inst : Fintype α] → Finset α
univ
.
erase: {α : Type ?u.18775} → [inst : DecidableEq α] → Finset ααFinset α
erase
a: α
a
:=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.18666

γ: Type ?u.18669

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a✝, a: α


{a} = erase univ a
α: Type u_1

β: Type ?u.18666

γ: Type ?u.18669

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a✝, a: α


{a} = erase univ a
α: Type u_1

β: Type ?u.18666

γ: Type ?u.18669

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a✝, a: α


univ \ {a} = erase univ a
α: Type u_1

β: Type ?u.18666

γ: Type ?u.18669

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a✝, a: α


{a} = erase univ a
α: Type u_1

β: Type ?u.18666

γ: Type ?u.18669

inst✝¹: Fintype α

s, t: Finset α

inst✝: DecidableEq α

a✝, a: α


erase univ a = erase univ a

Goals accomplished! 🐙
#align finset.compl_singleton
Finset.compl_singleton: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (a : α), {a} = erase univ a
Finset.compl_singleton
theorem
insert_inj_on': ∀ (s : Finset α), Set.InjOn (fun a => insert a s) ↑(s)
insert_inj_on'
(
s: Finset α
s
:
Finset: Type ?u.19167 → Type ?u.19167
Finset
α: Type ?u.19138
α
) :
Set.InjOn: {α : Type ?u.19171} → {β : Type ?u.19170} → (αβ) → Set αProp
Set.InjOn
(fun
a: ?m.19175
a
=>
insert: {α : outParam (Type ?u.19178)} → {γ : Type ?u.19177} → [self : Insert α γ] → αγγ
insert
a: ?m.19175
a
s: Finset α
s
) (
s: Finset α
s
ᶜ :
Finset: Type ?u.19237 → Type ?u.19237
Finset
α: Type ?u.19138
α
) :=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.19141

γ: Type ?u.19144

inst✝¹: Fintype α

s✝, t: Finset α

inst✝: DecidableEq α

a: α

s: Finset α


Set.InjOn (fun a => insert a s) ↑(s)
α: Type u_1

β: Type ?u.19141

γ: Type ?u.19144

inst✝¹: Fintype α

s✝, t: Finset α

inst✝: DecidableEq α

a: α

s: Finset α


Set.InjOn (fun a => insert a s) ↑(s)
α: Type u_1

β: Type ?u.19141

γ: Type ?u.19144

inst✝¹: Fintype α

s✝, t: Finset α

inst✝: DecidableEq α

a: α

s: Finset α


Set.InjOn (fun a => insert a s) (s)
α: Type u_1

β: Type ?u.19141

γ: Type ?u.19144

inst✝¹: Fintype α

s✝, t: Finset α

inst✝: DecidableEq α

a: α

s: Finset α


Set.InjOn (fun a => insert a s) (s)
α: Type u_1

β: Type ?u.19141

γ: Type ?u.19144

inst✝¹: Fintype α

s✝, t: Finset α

inst✝: DecidableEq α

a: α

s: Finset α


Set.InjOn (fun a => insert a s) ↑(s)

Goals accomplished! 🐙
#align finset.insert_inj_on'
Finset.insert_inj_on': ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s : Finset α), Set.InjOn (fun a => insert a s) ↑(s)
Finset.insert_inj_on'
theorem
image_univ_of_surjective: ∀ [inst : Fintype β] {f : βα}, Surjective fimage f univ = univ
image_univ_of_surjective
[
Fintype: Type ?u.19631 → Type ?u.19631
Fintype
β: Type ?u.19605
β
] {
f: βα
f
:
β: Type ?u.19605
β
α: Type ?u.19602
α
} (hf :
Surjective: {α : Sort ?u.19639} → {β : Sort ?u.19638} → (αβ) → Prop
Surjective
f: βα
f
) :
univ: {α : Type ?u.19649} → [inst : Fintype α] → Finset α
univ
.
image: {α : Type ?u.19655} → {β : Type ?u.19654} → [inst : DecidableEq β] → (αβ) → Finset αFinset β
image
f: βα
f
=
univ: {α : Type ?u.19711} → [inst : Fintype α] → Finset α
univ
:=
eq_univ_of_forall: ∀ {α : Type ?u.19754} [inst : Fintype α] {s : Finset α}, (∀ (x : α), x s) → s = univ
eq_univ_of_forall
<| hf.
forall: ∀ {α : Sort ?u.19768} {β : Sort ?u.19769} {f : αβ}, Surjective f∀ {p : βProp}, (∀ (y : β), p y) ∀ (x : α), p (f x)
forall
.
2: ∀ {a b : Prop}, (a b) → ba
2
fun
_: ?m.19790
_
=>
mem_image_of_mem: ∀ {α : Type ?u.19792} {β : Type ?u.19793} [inst : DecidableEq β] {s : Finset α} (f : αβ) {a : α}, a sf a image f s
mem_image_of_mem
_: ?m.19794?m.19795
_
<|
mem_univ: ∀ {α : Type ?u.19878} [inst : Fintype α] (x : α), x univ
mem_univ
_: ?m.19879
_
#align finset.image_univ_of_surjective
Finset.image_univ_of_surjective: ∀ {α : Type u_2} {β : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] [inst_2 : Fintype β] {f : βα}, Surjective fimage f univ = univ
Finset.image_univ_of_surjective
end BooleanAlgebra theorem
map_univ_of_surjective: ∀ [inst : Fintype β] {f : β α}, Surjective fmap f univ = univ
map_univ_of_surjective
[
Fintype: Type ?u.19967 → Type ?u.19967
Fintype
β: Type ?u.19952
β
] {
f: β α
f
:
β: Type ?u.19952
β
α: Type ?u.19949
α
} (
hf: Surjective f
hf
:
Surjective: {α : Sort ?u.19975} → {β : Sort ?u.19974} → (αβ) → Prop
Surjective
f: β α
f
) :
univ: {α : Type ?u.20851} → [inst : Fintype α] → Finset α
univ
.
map: {α : Type ?u.20857} → {β : Type ?u.20856} → (α β) → Finset αFinset β
map
f: β α
f
=
univ: {α : Type ?u.20870} → [inst : Fintype α] → Finset α
univ
:=
eq_univ_of_forall: ∀ {α : Type ?u.20913} [inst : Fintype α] {s : Finset α}, (∀ (x : α), x s) → s = univ
eq_univ_of_forall
<|
hf: Surjective f
hf
.
forall: ∀ {α : Sort ?u.20927} {β : Sort ?u.20928} {f : αβ}, Surjective f∀ {p : βProp}, (∀ (y : β), p y) ∀ (x : α), p (f x)
forall
.
2: ∀ {a b : Prop}, (a b) → ba
2
fun
_: ?m.20949
_
=>
mem_map_of_mem: ∀ {α : Type ?u.20951} {β : Type ?u.20952} (f : α β) {a : α} {s : Finset α}, a sf a map f s
mem_map_of_mem
_: ?m.20953 ?m.20954
_
<|
mem_univ: ∀ {α : Type ?u.20984} [inst : Fintype α] (x : α), x univ
mem_univ
_: ?m.20985
_
#align finset.map_univ_of_surjective
Finset.map_univ_of_surjective: ∀ {α : Type u_2} {β : Type u_1} [inst : Fintype α] [inst_1 : Fintype β] {f : β α}, Surjective fmap f univ = univ
Finset.map_univ_of_surjective
@[simp] theorem
map_univ_equiv: ∀ {α : Type u_2} {β : Type u_1} [inst : Fintype α] [inst_1 : Fintype β] (f : β α), map (Equiv.toEmbedding f) univ = univ
map_univ_equiv
[
Fintype: Type ?u.21042 → Type ?u.21042
Fintype
β: Type ?u.21027
β
] (
f: β α
f
:
β: Type ?u.21027
β
α: Type ?u.21024
α
) :
univ: {α : Type ?u.21050} → [inst : Fintype α] → Finset α
univ
.
map: {α : Type ?u.21056} → {β : Type ?u.21055} → (α β) → Finset αFinset β
map
f: β α
f
.
toEmbedding: {α : Sort ?u.21064} → {β : Sort ?u.21063} → α βα β
toEmbedding
=
univ: {α : Type ?u.21080} → [inst : Fintype α] → Finset α
univ
:=
map_univ_of_surjective: ∀ {α : Type ?u.21122} {β : Type ?u.21121} [inst : Fintype α] [inst_1 : Fintype β] {f : β α}, Surjective fmap f univ = univ
map_univ_of_surjective
f: β α
f
.
surjective: ∀ {α : Sort ?u.21149} {β : Sort ?u.21148} (e : α β), Surjective e
surjective
#align finset.map_univ_equiv
Finset.map_univ_equiv: ∀ {α : Type u_2} {β : Type u_1} [inst : Fintype α] [inst_1 : Fintype β] (f : β α), map (Equiv.toEmbedding f) univ = univ
Finset.map_univ_equiv
@[simp] theorem
univ_inter: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s : Finset α), univ s = s
univ_inter
[
DecidableEq: Sort ?u.21209 → Sort (max1?u.21209)
DecidableEq
α: Type ?u.21191
α
] (
s: Finset α
s
:
Finset: Type ?u.21218 → Type ?u.21218
Finset
α: Type ?u.21191
α
) :
univ: {α : Type ?u.21225} → [inst : Fintype α] → Finset α
univ
s: Finset α
s
=
s: Finset α
s
:=
ext: ∀ {α : Type ?u.21277} {s₁ s₂ : Finset α}, (∀ (a : α), a s₁ a s₂) → s₁ = s₂
ext
fun
a: ?m.21286
a
=>

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.21194

γ: Type ?u.21197

inst✝¹: Fintype α

s✝, t: Finset α

inst✝: DecidableEq α

s: Finset α

a: α


a univ s a s

Goals accomplished! 🐙
#align finset.univ_inter
Finset.univ_inter: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s : Finset α), univ s = s
Finset.univ_inter
@[simp] theorem
inter_univ: ∀ [inst : DecidableEq α] (s : Finset α), s univ = s
inter_univ
[
DecidableEq: Sort ?u.21506 → Sort (max1?u.21506)
DecidableEq
α: Type ?u.21488
α
] (
s: Finset α
s
:
Finset: Type ?u.21515 → Type ?u.21515
Finset
α: Type ?u.21488
α
) :
s: Finset α
s
univ: {α : Type ?u.21523} → [inst : Fintype α] → Finset α
univ
=
s: Finset α
s
:=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.21491

γ: Type ?u.21494

inst✝¹: Fintype α

s✝, t: Finset α

inst✝: DecidableEq α

s: Finset α


s univ = s
α: Type u_1

β: Type ?u.21491

γ: Type ?u.21494

inst✝¹: Fintype α

s✝, t: Finset α

inst✝: DecidableEq α

s: Finset α


s univ = s
α: Type u_1

β: Type ?u.21491

γ: Type ?u.21494

inst✝¹: Fintype α

s✝, t: Finset α

inst✝: DecidableEq α

s: Finset α


univ s = s
α: Type u_1

β: Type ?u.21491

γ: Type ?u.21494

inst✝¹: Fintype α

s✝, t: Finset α

inst✝: DecidableEq α

s: Finset α


s univ = s
α: Type u_1

β: Type ?u.21491

γ: Type ?u.21494

inst✝¹: Fintype α

s✝, t: Finset α

inst✝: DecidableEq α

s: Finset α


s = s

Goals accomplished! 🐙
#align finset.inter_univ
Finset.inter_univ: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s : Finset α), s univ = s
Finset.inter_univ
@[simp] theorem
piecewise_univ: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : (i : α) → Decidable (i univ)] {δ : αSort u_2} (f g : (i : α) → δ i), piecewise univ f g = f
piecewise_univ
[∀
i: α
i
:
α: Type ?u.21889
α
,
Decidable: PropType
Decidable
(
i: α
i
∈ (
univ: {α : Type ?u.21917} → [inst : Fintype α] → Finset α
univ
:
Finset: Type ?u.21916 → Type ?u.21916
Finset
α: Type ?u.21889
α
))] {
δ: αSort u_2
δ
:
α: Type ?u.21889
α
Sort _: Type ?u.21940
Sort
Sort _: Type ?u.21940
_
} (
f: (i : α) → δ i
f
g: (i : α) → δ i
g
: ∀
i: ?m.21950
i
,
δ: αSort ?u.21940
δ
i: ?m.21944
i
) :
univ: {α : Type ?u.21956} → [inst : Fintype α] → Finset α
univ
.
piecewise: {α : Type ?u.21962} → {δ : αSort ?u.21961} → (s : Finset α) → ((i : α) → δ i) → ((i : α) → δ i) → [inst : (j : α) → Decidable (j s)] → (i : α) → δ i
piecewise
f: (i : α) → δ i
f
g: (i : α) → δ i
g
=
f: (i : α) → δ i
f
:=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.21892

γ: Type ?u.21895

inst✝¹: Fintype α

s, t: Finset α

inst✝: (i : α) → Decidable (i univ)

δ: αSort u_2

f, g: (i : α) → δ i


piecewise univ f g = f
α: Type u_1

β: Type ?u.21892

γ: Type ?u.21895

inst✝¹: Fintype α

s, t: Finset α

inst✝: (i : α) → Decidable (i univ)

δ: αSort u_2

f, g: (i : α) → δ i

i: α


h
piecewise univ f g i = f i
α: Type u_1

β: Type ?u.21892

γ: Type ?u.21895

inst✝¹: Fintype α

s, t: Finset α

inst✝: (i : α) → Decidable (i univ)

δ: αSort u_2

f, g: (i : α) → δ i


piecewise univ f g = f

Goals accomplished! 🐙
#align finset.piecewise_univ
Finset.piecewise_univ: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : (i : α) → Decidable (i univ)] {δ : αSort u_2} (f g : (i : α) → δ i), piecewise univ f g = f
Finset.piecewise_univ
theorem
piecewise_compl: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s : Finset α) [inst_2 : (i : α) → Decidable (i s)] [inst_3 : (i : α) → Decidable (i s)] {δ : αSort u_2} (f g : (i : α) → δ i), piecewise (s) f g = piecewise s g f
piecewise_compl
[
DecidableEq: Sort ?u.22265 → Sort (max1?u.22265)
DecidableEq
α: Type ?u.22247
α
] (
s: Finset α
s
:
Finset: Type ?u.22274 → Type ?u.22274
Finset
α: Type ?u.22247
α
) [∀
i: α
i
:
α: Type ?u.22247
α
,
Decidable: PropType
Decidable
(
i: α
i
s: Finset α
s
)] [∀
i: α
i
:
α: Type ?u.22247
α
,
Decidable: PropType
Decidable
(
i: α
i
s: Finset α
s
ᶜ)] {
δ: αSort u_2
δ
:
α: Type ?u.22247
α
Sort _: Type ?u.22384
Sort
Sort _: Type ?u.22384
_
} (
f: (i : α) → δ i
f
g: (i : α) → δ i
g
: ∀
i: ?m.22388
i
,
δ: αSort ?u.22384
δ
i: ?m.22388
i
) :
s: Finset α
s
ᶜ.
piecewise: {α : Type ?u.22442} → {δ : αSort ?u.22441} → (s : Finset α) → ((i : α) → δ i) → ((i : α) → δ i) → [inst : (j : α) → Decidable (j s)] → (i : α) → δ i
piecewise
f: (i : α) → δ i
f
g: (i : α) → δ i
g
=
s: Finset α
s
.
piecewise: {α : Type ?u.22489} → {δ : αSort ?u.22488} → (s : Finset α) → ((i : α) → δ i) → ((i : α) → δ i) → [inst : (j : α) → Decidable (j s)] → (i : α) → δ i
piecewise
g: (i : α) → δ i
g
f: (i : α) → δ i
f
:=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.22250

γ: Type ?u.22253

inst✝³: Fintype α

s✝, t: Finset α

inst✝²: DecidableEq α

s: Finset α

inst✝¹: (i : α) → Decidable (i s)

inst✝: (i : α) → Decidable (i s)

δ: αSort u_2

f, g: (i : α) → δ i


piecewise (s) f g = piecewise s g f
α: Type u_1

β: Type ?u.22250

γ: Type ?u.22253

inst✝³: Fintype α

s✝, t: Finset α

inst✝²: DecidableEq α

s: Finset α

inst✝¹: (i : α) → Decidable (i s)

inst✝: (i : α) → Decidable (i s)

δ: αSort u_2

f, g: (i : α) → δ i

i: α


h
piecewise (s) f g i = piecewise s g f i
α: Type u_1

β: Type ?u.22250

γ: Type ?u.22253

inst✝³: Fintype α

s✝, t: Finset α

inst✝²: DecidableEq α

s: Finset α

inst✝¹: (i : α) → Decidable (i s)

inst✝: (i : α) → Decidable (i s)

δ: αSort u_2

f, g: (i : α) → δ i


piecewise (s) f g = piecewise s g f

Goals accomplished! 🐙
#align finset.piecewise_compl
Finset.piecewise_compl: ∀ {α : Type u_1} [inst : Fintype α] [inst_1 : DecidableEq α] (s : Finset α) [inst_2 : (i : α) → Decidable (i s)] [inst_3 : (i : α) → Decidable (i s)] {δ : αSort u_2} (f g : (i : α) → δ i), piecewise (s) f g = piecewise s g f
Finset.piecewise_compl
@[simp] theorem
piecewise_erase_univ: ∀ {α : Type u_2} [inst : Fintype α] {δ : αSort u_1} [inst_1 : DecidableEq α] (a : α) (f g : (a : α) → δ a), piecewise (erase univ a) f g = update f a (g a)
piecewise_erase_univ
{
δ: αSort u_1
δ
:
α: Type ?u.23050
α
Sort _: Type ?u.23070
Sort
Sort _: Type ?u.23070
_
} [
DecidableEq: Sort ?u.23073 → Sort (max1?u.23073)
DecidableEq
α: Type ?u.23050
α
] (
a: α
a
:
α: Type ?u.23050
α
) (
f: (a : α) → δ a
f
g: (a : α) → δ a
g
: ∀
a: ?m.23085
a
,
δ: αSort ?u.23070
δ
a: ?m.23085
a
) : (
Finset.univ: {α : Type ?u.23097} → [inst : Fintype α] → Finset α
Finset.univ
.
erase: {α : Type ?u.23102} → [inst : DecidableEq α] → Finset ααFinset α
erase
a: α
a
).
piecewise: {α : Type ?u.23151} → {δ : αSort ?u.23150} → (s : Finset α) → ((i : α) → δ i) → ((i : α) → δ i) → [inst : (j : α) → Decidable (j s)] → (i : α) → δ i
piecewise
f: (a : α) → δ a
f
g: (a : α) → δ a
g
=
Function.update: {α : Sort ?u.23253} → {β : αSort ?u.23252} → [inst : DecidableEq α] → ((a : α) → β a) → (a' : α) → β a'(a : α) → β a
Function.update
f: (a : α) → δ a
f
a: α
a
(
g: (a : α) → δ a
g
a: α
a
) :=

Goals accomplished! 🐙
α: Type u_2

β: Type ?u.23053

γ: Type ?u.23056

inst✝¹: Fintype α

s, t: Finset α

δ: αSort u_1

inst✝: DecidableEq α

a: α

f, g: (a : α) → δ a


piecewise (erase univ a) f g = update f a (g a)
α: Type u_2

β: Type ?u.23053

γ: Type ?u.23056

inst✝¹: Fintype α

s, t: Finset α

δ: αSort u_1

inst✝: DecidableEq α

a: α

f, g: (a : α) → δ a


piecewise (erase univ a) f g = update f a (g a)
α: Type u_2

β: Type ?u.23053

γ: Type ?u.23056

inst✝¹: Fintype α

s, t: Finset α

δ: αSort u_1

inst✝: DecidableEq α

a: α

f, g: (a : α) → δ a


piecewise ({a}) f g = update f a (g a)
α: Type u_2

β: Type ?u.23053

γ: Type ?u.23056

inst✝¹: Fintype α

s, t: Finset α

δ: αSort u_1

inst✝: DecidableEq α

a: α

f, g: (a : α) → δ a


piecewise (erase univ a) f g = update f a (g a)
α: Type u_2

β: Type ?u.23053

γ: Type ?u.23056

inst✝¹: Fintype α

s, t: Finset α

δ: αSort u_1

inst✝: DecidableEq α

a: α

f, g: (a : α) → δ a


piecewise {a} g f = update f a (g a)
α: Type u_2

β: Type ?u.23053

γ: Type ?u.23056

inst✝¹: Fintype α

s, t: Finset α

δ: αSort u_1

inst✝: DecidableEq α

a: α

f, g: (a : α) → δ a


piecewise (erase univ a) f g = update f a (g a)
α: Type u_2

β: Type ?u.23053

γ: Type ?u.23056

inst✝¹: Fintype α

s, t: Finset α

δ: αSort u_1

inst✝: DecidableEq α

a: α

f, g: (a : α) → δ a


update f a (g a) = update f a (g a)

Goals accomplished! 🐙
#align finset.piecewise_erase_univ
Finset.piecewise_erase_univ: ∀ {α : Type u_2} [inst : Fintype α] {δ : αSort u_1} [inst_1 : DecidableEq α] (a : α) (f g : (a : α) → δ a), piecewise (erase univ a) f g = update f a (g a)
Finset.piecewise_erase_univ
theorem
univ_map_equiv_to_embedding: ∀ {α : Type u_1} {β : Type u_2} [inst : Fintype α] [inst_1 : Fintype β] (e : α β), map (Equiv.toEmbedding e) univ = univ
univ_map_equiv_to_embedding
{
α: Type ?u.23864
α
β: Type ?u.23867
β
:
Type _: Type (?u.23867+1)
Type _
} [
Fintype: Type ?u.23870 → Type ?u.23870
Fintype
α: Type ?u.23864
α
] [
Fintype: Type ?u.23873 → Type ?u.23873
Fintype
β: Type ?u.23867
β
] (
e: α β
e
:
α: Type ?u.23864
α
β: Type ?u.23867
β
) :
univ: {α : Type ?u.23881} → [inst : Fintype α] → Finset α
univ
.
map: {α : Type ?u.23887} → {β : Type ?u.23886} → (α β) → Finset αFinset β
map
e: α β
e
.
toEmbedding: {α : Sort ?u.23895} → {β : Sort ?u.23894} → α βα β
toEmbedding
=
univ: {α : Type ?u.23911} → [inst : Fintype α] → Finset α
univ
:=
eq_univ_iff_forall: ∀ {α : Type ?u.23955} [inst : Fintype α] {s : Finset α}, s = univ ∀ (x : α), x s
eq_univ_iff_forall
.
mpr: ∀ {a b : Prop}, (a b) → ba
mpr
fun
b: ?m.23975
b
=>
mem_map: ∀ {α : Type ?u.23978} {β : Type ?u.23977} {f : α β} {s : Finset α} {b : β}, b map f s a, a s f a = b
mem_map
.
mpr: ∀ {a b : Prop}, (a b) → ba
mpr
e: α β
e
.
symm: {α : Sort ?u.24012} → {β : Sort ?u.24011} → α ββ α
symm
b: ?m.23975
b
,
mem_univ: ∀ {α : Type ?u.24105} [inst : Fintype α] (x : α), x univ
mem_univ
_: ?m.24106
_
,

Goals accomplished! 🐙
α✝: Type ?u.23846

β✝: Type ?u.23849

γ: Type ?u.23852

inst✝²: Fintype α✝

s, t: Finset α✝

α: Type u_1

β: Type u_2

inst✝¹: Fintype α

inst✝: Fintype β

e: α β

b: β


↑(Equiv.toEmbedding e) (e.symm b) = b

Goals accomplished! 🐙
#align finset.univ_map_equiv_to_embedding
Finset.univ_map_equiv_to_embedding: ∀ {α : Type u_1} {β : Type u_2} [inst : Fintype α] [inst_1 : Fintype β] (e : α β), map (Equiv.toEmbedding e) univ = univ
Finset.univ_map_equiv_to_embedding
@[simp] theorem
univ_filter_exists: ∀ (f : αβ) [inst : Fintype β] [inst_1 : DecidablePred fun y => x, f x = y] [inst_2 : DecidableEq β], filter (fun y => x, f x = y) univ = image f univ
univ_filter_exists
(
f: αβ
f
:
α: Type ?u.24309
α
β: Type ?u.24312
β
) [
Fintype: Type ?u.24331 → Type ?u.24331
Fintype
β: Type ?u.24312
β
] [
DecidablePred: {α : Sort ?u.24334} → (αProp) → Sort (max1?u.24334)
DecidablePred
fun
y: ?m.24337
y
=> ∃
x: ?m.24342
x
,
f: αβ
f
x: ?m.24342
x
=
y: ?m.24337
y
] [
DecidableEq: Sort ?u.24355 → Sort (max1?u.24355)
DecidableEq
β: Type ?u.24312
β
] : (
Finset.univ: {α : Type ?u.24365} → [inst : Fintype α] → Finset α
Finset.univ
.
filter: {α : Type ?u.24370} → (p : αProp) → [inst : DecidablePred p] → Finset αFinset α
filter
fun
y: ?m.24378
y
=> ∃
x: ?m.24383
x
,
f: αβ
f
x: ?m.24383
x
=
y: ?m.24378
y
) =
Finset.univ: {α : Type ?u.24431} → [inst : Fintype α] → Finset α
Finset.univ
.
image: {α : Type ?u.24437} → {β : Type ?u.24436} → [inst : DecidableEq β] → (αβ) → Finset αFinset β
image
f: αβ
f
:=

Goals accomplished! 🐙
α: Type u_2

β: Type u_1

γ: Type ?u.24315

inst✝³: Fintype α

s, t: Finset α

f: αβ

inst✝²: Fintype β

inst✝¹: DecidablePred fun y => x, f x = y

inst✝: DecidableEq β


filter (fun y => x, f x = y) univ = image f univ
α: Type u_2

β: Type u_1

γ: Type ?u.24315

inst✝³: Fintype α

s, t: Finset α

f: αβ

inst✝²: Fintype β

inst✝¹: DecidablePred fun y => x, f x = y

inst✝: DecidableEq β

a✝: β


a
a✝ filter (fun y => x, f x = y) univ a✝ image f univ
α: Type u_2

β: Type u_1

γ: Type ?u.24315

inst✝³: Fintype α

s, t: Finset α

f: αβ

inst✝²: Fintype β

inst✝¹: DecidablePred fun y => x, f x = y

inst✝: DecidableEq β


filter (fun y => x, f x = y) univ = image f univ

Goals accomplished! 🐙
#align finset.univ_filter_exists
Finset.univ_filter_exists: ∀ {α : Type u_2} {β : Type u_1} [inst : Fintype α] (f : αβ) [inst_1 : Fintype β] [inst_2 : DecidablePred fun y => x, f x = y] [inst_3 : DecidableEq β], filter (fun y => x, f x = y) univ = image f univ
Finset.univ_filter_exists
/-- Note this is a special case of `(Finset.image_preimage f univ _).symm`. -/ theorem
univ_filter_mem_range: ∀ {α : Type u_2} {β : Type u_1} [inst : Fintype α] (f : αβ) [inst_1 : Fintype β] [inst_2 : DecidablePred fun y => y Set.range f] [inst_3 : DecidableEq β], filter (fun y => y Set.range f) univ = image f univ
univ_filter_mem_range
(
f: αβ
f
:
α: Type ?u.29321
α
β: Type ?u.29324
β
) [
Fintype: Type ?u.29343 → Type ?u.29343
Fintype
β: Type ?u.29324
β
] [
DecidablePred: {α : Sort ?u.29346} → (αProp) → Sort (max1?u.29346)
DecidablePred
fun
y: ?m.29349
y
=>
y: ?m.29349
y
Set.range: {α : Type ?u.29357} → {ι : Sort ?u.29356} → (ια) → Set α
Set.range
f: αβ
f
] [
DecidableEq: Sort ?u.29384 → Sort (max1?u.29384)
DecidableEq
β: Type ?u.29324
β
] : (
Finset.univ: {α : Type ?u.29394} → [inst : Fintype α] → Finset α
Finset.univ
.
filter: {α : Type ?u.29399} → (p : αProp) → [inst : DecidablePred p] → Finset αFinset α
filter
fun
y: ?m.29407
y
=>
y: ?m.29407
y
Set.range: {α : Type ?u.29415} → {ι : Sort ?u.29414} → (ια) → Set α
Set.range
f: αβ
f
) =
Finset.univ: {α : Type ?u.29465} → [inst : Fintype α] → Finset α
Finset.univ
.
image: {α : Type ?u.29471} → {β : Type ?u.29470} → [inst : DecidableEq β] → (αβ) → Finset αFinset β
image
f: αβ
f
:=

Goals accomplished! 🐙
α: Type u_2

β: Type u_1

γ: Type ?u.29327

inst✝³: Fintype α

s, t: Finset α

f: αβ

inst✝²: Fintype β

inst✝¹: DecidablePred fun y => y Set.range f

inst✝: DecidableEq β


filter (fun y => y Set.range f) univ = image f univ
α: Type u_2

β: Type u_1

γ: Type ?u.29327

inst✝³: Fintype α

s, t: Finset α

f: αβ

inst✝²: Fintype β

inst✝¹: DecidablePred fun y => y Set.range f

inst✝: DecidableEq β


filter (fun y => y Set.range f) univ = image f univ

Goals accomplished! 🐙
α: Type u_2

β: Type u_1

γ: Type ?u.29327

inst✝³: Fintype α

s, t: Finset α

f: αβ

inst✝²: Fintype β

inst✝¹: DecidablePred fun y => y Set.range f

inst✝: DecidableEq β


DecidablePred fun y => x, f x = y

Goals accomplished! 🐙
α: Type u_2

β: Type u_1

γ: Type ?u.29327

inst✝³: Fintype α

s, t: Finset α

f: αβ

inst✝²: Fintype β

inst✝¹: DecidablePred fun y => y Set.range f

inst✝: DecidableEq β


filter (fun y => y Set.range f) univ = image f univ

Goals accomplished! 🐙
#align finset.univ_filter_mem_range
Finset.univ_filter_mem_range: ∀ {α : Type u_2} {β : Type u_1} [inst : Fintype α] (f : αβ) [inst_1 : Fintype β] [inst_2 : DecidablePred fun y => y Set.range f] [inst_3 : DecidableEq β], filter (fun y => y Set.range f) univ = image f univ
Finset.univ_filter_mem_range
theorem
coe_filter_univ: ∀ {α : Type u_1} [inst : Fintype α] (p : αProp) [inst_1 : DecidablePred p], ↑(filter p univ) = { x | p x }
coe_filter_univ
(
p: αProp
p
:
α: Type ?u.31026
α
Prop: Type
Prop
) [
DecidablePred: {α : Sort ?u.31048} → (αProp) → Sort (max1?u.31048)
DecidablePred
p: αProp
p
] : (
univ: {α : Type ?u.31061} → [inst : Fintype α] → Finset α
univ
.
filter: {α : Type ?u.31066} → (p : αProp) → [inst : DecidablePred p] → Finset αFinset α
filter
p: αProp
p
:
Set: Type ?u.31060 → Type ?u.31060
Set
α: Type ?u.31026
α
) = {
x: ?m.31199
x
|
p: αProp
p
x: ?m.31199
x
} :=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.31029

γ: Type ?u.31032

inst✝¹: Fintype α

s, t: Finset α

p: αProp

inst✝: DecidablePred p


↑(filter p univ) = { x | p x }

Goals accomplished! 🐙
#align finset.coe_filter_univ
Finset.coe_filter_univ: ∀ {α : Type u_1} [inst : Fintype α] (p : αProp) [inst_1 : DecidablePred p], ↑(filter p univ) = { x | p x }
Finset.coe_filter_univ
end Finset open Finset Function namespace Fintype instance
decidablePiFintype: {α : Type u_1} → {β : αType u_2} → [inst : (a : α) → DecidableEq (β a)] → [inst : Fintype α] → DecidableEq ((a : α) → β a)
decidablePiFintype
{
α: ?m.31887
α
} {
β: αType ?u.31892
β
:
α: ?m.31887
α
Type _: Type (?u.31892+1)
Type _
} [∀
a: ?m.31896
a
,
DecidableEq: Sort ?u.31899 → Sort (max1?u.31899)
DecidableEq
(
β: αType ?u.31892
β
a: ?m.31896
a
)] [
Fintype: Type ?u.31911 → Type ?u.31911
Fintype
α: ?m.31887
α
] :
DecidableEq: Sort ?u.31914 → Sort (max1?u.31914)
DecidableEq
(∀
a: ?m.31916
a
,
β: αType ?u.31892
β
a: ?m.31916
a
) := fun
f: ?m.31939
f
g: ?m.31943
g
=>
decidable_of_iff: {b : Prop} → (a : Prop) → (a b) → [inst : Decidable a] → Decidable b
decidable_of_iff
(∀
a: ?m.31949
a
∈ @
Fintype.elems: {α : Type ?u.31970} → [self : Fintype α] → Finset α
Fintype.elems
α: Type ?u.31911
α
_,
f: ?m.31939
f
a: ?m.31949
a
=
g: ?m.31943
g
a: ?m.31949
a
) (

Goals accomplished! 🐙
α✝: Type ?u.31878

β✝: Type ?u.31881

γ: Type ?u.31884

α: Type ?u.31911

β: αType ?u.31892

inst✝¹: (a : α) → DecidableEq (β a)

inst✝: Fintype α

f, g: (a : α) → β a


(∀ (a : α), a elemsf a = g a) f = g

Goals accomplished! 🐙
) #align fintype.decidable_pi_fintype
Fintype.decidablePiFintype: {α : Type u_1} → {β : αType u_2} → [inst : (a : α) → DecidableEq (β a)] → [inst : Fintype α] → DecidableEq ((a : α) → β a)
Fintype.decidablePiFintype
instance
decidableForallFintype: {p : αProp} → [inst : DecidablePred p] → [inst : Fintype α] → Decidable (∀ (a : α), p a)
decidableForallFintype
{
p: αProp
p
:
α: Type ?u.34245
α
Prop: Type
Prop
} [
DecidablePred: {α : Sort ?u.34258} → (αProp) → Sort (max1?u.34258)
DecidablePred
p: αProp
p
] [
Fintype: Type ?u.34268 → Type ?u.34268
Fintype
α: Type ?u.34245
α
] :
Decidable: PropType
Decidable
(∀
a: ?m.34272
a
,
p: αProp
p
a: ?m.34272
a
) :=
decidable_of_iff: {b : Prop} → (a : Prop) → (a b) → [inst : Decidable a] → Decidable b
decidable_of_iff
(∀
a: ?m.34286
a
∈ @
univ: {α : Type ?u.34307} → [inst : Fintype α] → Finset α
univ
α: Type ?u.34245
α
_,
p: αProp
p
a: ?m.34286
a
) (

Goals accomplished! 🐙
α: Type ?u.34245

β: Type ?u.34248

γ: Type ?u.34251

p: αProp

inst✝¹: DecidablePred p

inst✝: Fintype α


(∀ (a : α), a univp a) ∀ (a : α), p a

Goals accomplished! 🐙
) #align fintype.decidable_forall_fintype
Fintype.decidableForallFintype: {α : Type u_1} → {p : αProp} → [inst : DecidablePred p] → [inst : Fintype α] → Decidable (∀ (a : α), p a)
Fintype.decidableForallFintype
instance
decidableExistsFintype: {p : αProp} → [inst : DecidablePred p] → [inst : Fintype α] → Decidable (a, p a)
decidableExistsFintype
{
p: αProp
p
:
α: Type ?u.35056
α
Prop: Type
Prop
} [
DecidablePred: {α : Sort ?u.35069} → (αProp) → Sort (max1?u.35069)
DecidablePred
p: αProp
p
] [
Fintype: Type ?u.35079 → Type ?u.35079
Fintype
α: Type ?u.35056
α
] :
Decidable: PropType
Decidable
(∃
a: ?m.35085
a
,
p: αProp
p
a: ?m.35085
a
) :=
decidable_of_iff: {b : Prop} → (a : Prop) → (a b) → [inst : Decidable a] → Decidable b
decidable_of_iff
(∃
a: ?m.35100
a
∈ @
univ: {α : Type ?u.35107} → [inst : Fintype α] → Finset α
univ
α: Type ?u.35056
α
_,
p: αProp
p
a: ?m.35100
a
) (

Goals accomplished! 🐙
α: Type ?u.35056

β: Type ?u.35059

γ: Type ?u.35062

p: αProp

inst✝¹: DecidablePred p

inst✝: Fintype α


(a, a univ p a) a, p a

Goals accomplished! 🐙
) #align fintype.decidable_exists_fintype
Fintype.decidableExistsFintype: {α : Type u_1} → {p : αProp} → [inst : DecidablePred p] → [inst : Fintype α] → Decidable (a, p a)
Fintype.decidableExistsFintype
instance
decidableMemRangeFintype: [inst : Fintype α] → [inst : DecidableEq β] → (f : αβ) → DecidablePred fun x => x Set.range f
decidableMemRangeFintype
[
Fintype: Type ?u.35426 → Type ?u.35426
Fintype
α: Type ?u.35417
α
] [
DecidableEq: Sort ?u.35429 → Sort (max1?u.35429)
DecidableEq
β: Type ?u.35420
β
] (
f: αβ
f
:
α: Type ?u.35417
α
β: Type ?u.35420
β
) :
DecidablePred: {α : Sort ?u.35442} → (αProp) → Sort (max1?u.35442)
DecidablePred
(· ∈
Set.range: {α : Type ?u.35453} → {ι : Sort ?u.35452} → (ια) → Set α
Set.range
f: αβ
f
) := fun
_: ?m.35489
_
=>
Fintype.decidableExistsFintype: {α : Type ?u.35491} → {p : αProp} → [inst : DecidablePred p] → [inst : Fintype α] → Decidable (a, p a)
Fintype.decidableExistsFintype
#align fintype.decidable_mem_range_fintype
Fintype.decidableMemRangeFintype: {α : Type u_1} → {β : Type u_2} → [inst : Fintype α] → [inst : DecidableEq β] → (f : αβ) → DecidablePred fun x => x Set.range f
Fintype.decidableMemRangeFintype
section BundledHoms instance
decidableEqEquivFintype: [inst : DecidableEq β] → [inst : Fintype α] → DecidableEq (α β)
decidableEqEquivFintype
[
DecidableEq: Sort ?u.35827 → Sort (max1?u.35827)
DecidableEq
β: Type ?u.35821
β
] [
Fintype: Type ?u.35836 → Type ?u.35836
Fintype
α: Type ?u.35818
α
] :
DecidableEq: Sort ?u.35839 → Sort (max1?u.35839)
DecidableEq
(
α: Type ?u.35818
α
β: Type ?u.35821
β
) := fun
a: ?m.35854
a
b: ?m.35857
b
=>
decidable_of_iff: {b : Prop} → (a : Prop) → (a b) → [inst : Decidable a] → Decidable b
decidable_of_iff
(
a: ?m.35854
a
.
1: {α : Sort ?u.35863} → {β : Sort ?u.35862} → α βαβ
1
=
b: ?m.35857
b
.
1: {α : Sort ?u.35870} → {β : Sort ?u.35869} → α βαβ
1
)
Equiv.coe_fn_injective: ∀ {α : Sort ?u.35878} {β : Sort ?u.35877}, Injective fun e => e
Equiv.coe_fn_injective
.
eq_iff: ∀ {α : Sort ?u.35881} {β : Sort ?u.35882} {f : αβ}, Injective f∀ {a b : α}, f a = f b a = b
eq_iff
#align fintype.decidable_eq_equiv_fintype
Fintype.decidableEqEquivFintype: {α : Type u_1} → {β : Type u_2} → [inst : DecidableEq β] → [inst : Fintype α] → DecidableEq (α β)
Fintype.decidableEqEquivFintype
instance
decidableEqEmbeddingFintype: {α : Type u_1} → {β : Type u_2} → [inst : DecidableEq β] → [inst : Fintype α] → DecidableEq (α β)
decidableEqEmbeddingFintype
[
DecidableEq: Sort ?u.36154 → Sort (max1?u.36154)
DecidableEq
β: Type ?u.36148
β
] [
Fintype: Type ?u.36163 → Type ?u.36163
Fintype
α: Type ?u.36145
α
] :
DecidableEq: Sort ?u.36166 → Sort (max1?u.36166)
DecidableEq
(
α: Type ?u.36145
α
β: Type ?u.36148
β
) := fun
a: ?m.36181
a
b: ?m.36184
b
=>
decidable_of_iff: {b : Prop} → (a : Prop) → (a b) → [inst : Decidable a] → Decidable b
decidable_of_iff
((
a: ?m.36181
a
:
α: Type ?u.36145
α
β: Type ?u.36148
β
) =
b: ?m.36184
b
)
Function.Embedding.coe_injective: ∀ {α : Sort ?u.38949} {β : Sort ?u.38950}, Injective fun f => f
Function.Embedding.coe_injective
.
eq_iff: ∀ {α : Sort ?u.38953} {β : Sort ?u.38954} {f : αβ}, Injective f∀ {a b : α}, f a = f b a = b
eq_iff
#align fintype.decidable_eq_embedding_fintype
Fintype.decidableEqEmbeddingFintype: {α : Type u_1} → {β : Type u_2} → [inst : DecidableEq β] → [inst : Fintype α] → DecidableEq (α β)
Fintype.decidableEqEmbeddingFintype
@[
to_additive: {α : Type u_1} → {β : Type u_2} → [inst : DecidableEq β] → [inst : Fintype α] → [inst : Zero α] → [inst_1 : Zero β] → DecidableEq (ZeroHom α β)
to_additive
] instance
decidableEqOneHomFintype: [inst : DecidableEq β] → [inst : Fintype α] → [inst : One α] → [inst_1 : One β] → DecidableEq (OneHom α β)
decidableEqOneHomFintype
[
DecidableEq: Sort ?u.39302 → Sort (max1?u.39302)
DecidableEq
β: Type ?u.39296
β
] [
Fintype: Type ?u.39311 → Type ?u.39311
Fintype
α: Type ?u.39293
α
] [
One: Type ?u.39314 → Type ?u.39314
One
α: Type ?u.39293
α
] [
One: Type ?u.39317 → Type ?u.39317
One
β: Type ?u.39296
β
] :
DecidableEq: Sort ?u.39320 → Sort (max1?u.39320)
DecidableEq
(
OneHom: (M : Type ?u.39322) → (N : Type ?u.39321) → [inst : One M] → [inst : One N] → Type (max?u.39322?u.39321)
OneHom
α: Type ?u.39293
α
β: Type ?u.39296
β
) := fun
a: ?m.39371
a
b: ?m.39374
b
=>
decidable_of_iff: {b : Prop} → (a : Prop) → (a b) → [inst : Decidable a] → Decidable b
decidable_of_iff
((
a: ?m.39371
a
:
α: Type ?u.39293
α
β: Type ?u.39296
β
) =
b: ?m.39374
b
) (
Injective.eq_iff: ∀ {α : Sort ?u.41133} {β : Sort ?u.41134} {f : αβ}, Injective f∀ {a b : α}, f a = f b a = b
Injective.eq_iff
FunLike.coe_injective: ∀ {F : Sort ?u.41138} {α : Sort ?u.41139} {β : αSort ?u.41140} [i : FunLike F α β], Injective fun f => f
FunLike.coe_injective
) #align fintype.decidable_eq_one_hom_fintype
Fintype.decidableEqOneHomFintype: {α : Type u_1} → {β : Type u_2} → [inst : DecidableEq β] → [inst : Fintype α] → [inst : One α] → [inst_1 : One β] → DecidableEq (OneHom α β)
Fintype.decidableEqOneHomFintype
#align fintype.decidable_eq_zero_hom_fintype
Fintype.decidableEqZeroHomFintype: {α : Type u_1} → {β : Type u_2} → [inst : DecidableEq β] → [inst : Fintype α] → [inst : Zero α] → [inst_1 : Zero β] → DecidableEq (ZeroHom α β)
Fintype.decidableEqZeroHomFintype
@[
to_additive: {α : Type u_1} → {β : Type u_2} → [inst : DecidableEq β] → [inst : Fintype α] → [inst : Add α] → [inst_1 : Add β] → DecidableEq (AddHom α β)
to_additive
] instance
decidableEqMulHomFintype: [inst : DecidableEq β] → [inst : Fintype α] → [inst : Mul α] → [inst_1 : Mul β] → DecidableEq (α →ₙ* β)
decidableEqMulHomFintype
[
DecidableEq: Sort ?u.42242 → Sort (max1?u.42242)
DecidableEq
β: Type ?u.42236
β
] [
Fintype: Type ?u.42251 → Type ?u.42251
Fintype
α: Type ?u.42233
α
] [
Mul: Type ?u.42254 → Type ?u.42254
Mul
α: Type ?u.42233
α
] [
Mul: Type ?u.42257 → Type ?u.42257
Mul
β: Type ?u.42236
β
] :
DecidableEq: Sort ?u.42260 → Sort (max1?u.42260)
DecidableEq
(
α: Type ?u.42233
α
→ₙ*
β: Type ?u.42236
β
) := fun
a: ?m.42301
a
b: ?m.42304
b
=>
decidable_of_iff: {b : Prop} → (a : Prop) → (a b) → [inst : Decidable a] → Decidable b
decidable_of_iff
((
a: ?m.42301
a
:
α: Type ?u.42233
α
β: Type ?u.42236
β
) =
b: ?m.42304
b
) (
Injective.eq_iff: ∀ {α : Sort ?u.42920} {β : Sort ?u.42921} {f : αβ}, Injective f∀ {a b : α}, f a = f b a = b
Injective.eq_iff
FunLike.coe_injective: ∀ {F : Sort ?u.42925} {α : Sort ?u.42926} {β : αSort ?u.42927} [i : FunLike F α β], Injective fun f => f
FunLike.coe_injective
) #align fintype.decidable_eq_mul_hom_fintype
Fintype.decidableEqMulHomFintype: {α : Type u_1} → {β : Type u_2} → [inst : DecidableEq β] → [inst : Fintype α] → [inst : Mul α] → [inst_1 : Mul β] → DecidableEq (α →ₙ* β)
Fintype.decidableEqMulHomFintype
#align fintype.decidable_eq_add_hom_fintype
Fintype.decidableEqAddHomFintype: {α : Type u_1} → {β : Type u_2} → [inst : DecidableEq β] → [inst : Fintype α] → [inst : Add α] → [inst_1 : Add β] → DecidableEq (AddHom α β)
Fintype.decidableEqAddHomFintype
@[
to_additive: {α : Type u_1} → {β : Type u_2} → [inst : DecidableEq β] → [inst : Fintype α] → [inst : AddZeroClass α] → [inst_1 : AddZeroClass β] → DecidableEq (α →+ β)
to_additive
] instance
decidableEqMonoidHomFintype: [inst : DecidableEq β] → [inst : Fintype α] → [inst : MulOneClass α] → [inst_1 : MulOneClass β] → DecidableEq (α →* β)
decidableEqMonoidHomFintype
[
DecidableEq: Sort ?u.43689 → Sort (max1?u.43689)
DecidableEq
β: Type ?u.43683
β
] [
Fintype: Type ?u.43698 → Type ?u.43698
Fintype
α: Type ?u.43680
α
] [
MulOneClass: Type ?u.43701 → Type ?u.43701
MulOneClass
α: Type ?u.43680
α
] [
MulOneClass: Type ?u.43704 → Type ?u.43704
MulOneClass
β: Type ?u.43683
β
] :
DecidableEq: Sort ?u.43707 → Sort (max1?u.43707)
DecidableEq
(
α: Type ?u.43680
α
→*
β: Type ?u.43683
β
) := fun
a: ?m.43738
a
b: ?m.43741
b
=>
decidable_of_iff: {b : Prop} → (a : Prop) → (a b) → [inst : Decidable a] → Decidable b
decidable_of_iff
((
a: ?m.43738
a
:
α: Type ?u.43680
α
β: Type ?u.43683
β
) =
b: ?m.43741
b
) (
Injective.eq_iff: ∀ {α : Sort ?u.45037} {β : Sort ?u.45038} {f : αβ}, Injective f∀ {a b : α}, f a = f b a = b
Injective.eq_iff
FunLike.coe_injective: ∀ {F : Sort ?u.45042} {α : Sort ?u.45043} {β : αSort ?u.45044} [i : FunLike F α β], Injective fun f => f
FunLike.coe_injective
) #align fintype.decidable_eq_monoid_hom_fintype
Fintype.decidableEqMonoidHomFintype: {α : Type u_1} → {β : Type u_2} → [inst : DecidableEq β] → [inst : Fintype α] → [inst : MulOneClass α] → [inst_1 : MulOneClass β] → DecidableEq (α →* β)
Fintype.decidableEqMonoidHomFintype
#align fintype.decidable_eq_add_monoid_hom_fintype
Fintype.decidableEqAddMonoidHomFintype: {α : Type u_1} → {β : Type u_2} → [inst : DecidableEq β] → [inst : Fintype α] → [inst : AddZeroClass α] → [inst_1 : AddZeroClass β] → DecidableEq (α →+ β)
Fintype.decidableEqAddMonoidHomFintype
instance
decidableEqMonoidWithZeroHomFintype: [inst : DecidableEq β] → [inst : Fintype α] → [inst : MulZeroOneClass α] → [inst_1 : MulZeroOneClass β] → DecidableEq (α →*₀ β)
decidableEqMonoidWithZeroHomFintype
[
DecidableEq: Sort ?u.46006 → Sort (max1?u.46006)
DecidableEq
β: Type ?u.46000
β
] [
Fintype: Type ?u.46015 → Type ?u.46015
Fintype
α: Type ?u.45997
α
] [
MulZeroOneClass: Type ?u.46018 → Type ?u.46018
MulZeroOneClass
α: Type ?u.45997
α
] [
MulZeroOneClass: Type ?u.46021 → Type ?u.46021
MulZeroOneClass
β: Type ?u.46000
β
] :
DecidableEq: Sort ?u.46024 → Sort (max1?u.46024)
DecidableEq
(
α: Type ?u.45997
α
→*₀
β: Type ?u.46000
β
) := fun
a: ?m.46055
a
b: ?m.46058
b
=>
decidable_of_iff: {b : Prop} → (a : Prop) → (a b) → [inst : Decidable a] → Decidable b
decidable_of_iff
((
a: ?m.46055
a
:
α: Type ?u.45997
α
β: Type ?u.46000
β
) =
b: ?m.46058
b
) (
Injective.eq_iff: ∀ {α : Sort ?u.47602} {β : Sort ?u.47603} {f : αβ}, Injective f∀ {a b : α}, f a = f b a = b
Injective.eq_iff
FunLike.coe_injective: ∀ {F : Sort ?u.47607} {α : Sort ?u.47608} {β : αSort ?u.47609} [i : FunLike F α β], Injective fun f => f
FunLike.coe_injective
) #align fintype.decidable_eq_monoid_with_zero_hom_fintype
Fintype.decidableEqMonoidWithZeroHomFintype: {α : Type u_1} → {β : Type u_2} → [inst : DecidableEq β] → [inst : Fintype α] → [inst : MulZeroOneClass α] → [inst_1 : MulZeroOneClass β] → DecidableEq (α →*₀ β)
Fintype.decidableEqMonoidWithZeroHomFintype
instance
decidableEqRingHomFintype: {α : Type u_1} → {β : Type u_2} → [inst : DecidableEq β] → [inst : Fintype α] → [inst : Semiring α] → [inst_1 : Semiring β] → DecidableEq (α →+* β)
decidableEqRingHomFintype
[
DecidableEq: Sort ?u.48385 → Sort (max1?u.48385)
DecidableEq
β: Type ?u.48379
β
] [
Fintype: Type ?u.48394 → Type ?u.48394
Fintype
α: Type ?u.48376
α
] [
Semiring: Type ?u.48397 → Type ?u.48397
Semiring
α: Type ?u.48376
α
] [
Semiring: Type ?u.48400 → Type ?u.48400
Semiring
β: Type ?u.48379
β
] :
DecidableEq: Sort ?u.48403 → Sort (max1?u.48403)
DecidableEq
(
α: Type ?u.48376
α
→+*
β: Type ?u.48379
β
) := fun
a: ?m.48454
a
b: ?m.48457
b
=>
decidable_of_iff: {b : Prop} → (a : Prop) → (a b) → [inst : Decidable a] → Decidable b
decidable_of_iff
((
a: ?m.48454
a
:
α: Type ?u.48376
α
β: Type ?u.48379
β
) =
b: ?m.48457
b
) (
Injective.eq_iff: ∀ {α : Sort ?u.49602} {β : Sort ?u.49603} {f : αβ}, Injective f∀ {a b : α}, f a = f b a = b
Injective.eq_iff
RingHom.coe_inj: ∀ {α : Type ?u.49607} {β : Type ?u.49608} {x : NonAssocSemiring α} {x_1 : NonAssocSemiring β} ⦃f g : α →+* β⦄, f = gf = g
RingHom.coe_inj
) #align fintype.decidable_eq_ring_hom_fintype
Fintype.decidableEqRingHomFintype: {α : Type u_1} → {β : Type u_2} → [inst : DecidableEq β] → [inst : Fintype α] → [inst : Semiring α] → [inst_1 : Semiring β] → DecidableEq (α →+* β)
Fintype.decidableEqRingHomFintype
end BundledHoms instance
decidableInjectiveFintype: [inst : DecidableEq α] → [inst : DecidableEq β] → [inst : Fintype α] → DecidablePred Injective
decidableInjectiveFintype
[
DecidableEq: Sort ?u.49980 → Sort (max1?u.49980)
DecidableEq
α: Type ?u.49971
α
] [
DecidableEq: Sort ?u.49989 → Sort (max1?u.49989)
DecidableEq
β: Type ?u.49974
β
] [
Fintype: Type ?u.49998 → Type ?u.49998
Fintype
α: Type ?u.49971
α
] :
DecidablePred: {α : Sort ?u.50001} → (αProp) → Sort (max1?u.50001)
DecidablePred
(
Injective: {α : Sort ?u.50009} → {β : Sort ?u.50008} → (αβ) → Prop
Injective
: (
α: Type ?u.49971
α
β: Type ?u.49974
β
) →
Prop: Type
Prop
) := fun
x: ?m.50036
x
=>

Goals accomplished! 🐙
α: Type ?u.49971

β: Type ?u.49974

γ: Type ?u.49977

inst✝²: DecidableEq α

inst✝¹: DecidableEq β

inst✝: Fintype α

x: αβ


α: Type ?u.49971

β: Type ?u.49974

γ: Type ?u.49977

inst✝²: DecidableEq α

inst✝¹: DecidableEq β

inst✝: Fintype α

x: αβ


Decidable (∀ ⦃a₁ a₂ : α⦄, x a₁ = x a₂a₁ = a₂)
α: Type ?u.49971

β: Type ?u.49974

γ: Type ?u.49977

inst✝²: DecidableEq α

inst✝¹: DecidableEq β

inst✝: Fintype α

x: αβ


Decidable (∀ ⦃a₁ a₂ : α⦄, x a₁ = x a₂a₁ = a₂)
α: Type ?u.49971

β: Type ?u.49974

γ: Type ?u.49977

inst✝²: DecidableEq α

inst✝¹: DecidableEq β

inst✝: Fintype α

x: αβ



Goals accomplished! 🐙
#align fintype.decidable_injective_fintype
Fintype.decidableInjectiveFintype: {α : Type u_1} → {β : Type u_2} → [inst : DecidableEq α] → [inst : DecidableEq β] → [inst : Fintype α] → DecidablePred Injective
Fintype.decidableInjectiveFintype
instance
decidableSurjectiveFintype: [inst : DecidableEq β] → [inst : Fintype α] → [inst : Fintype β] → DecidablePred Surjective
decidableSurjectiveFintype
[
DecidableEq: Sort ?u.50662 → Sort (max1?u.50662)
DecidableEq
β: Type ?u.50656
β
] [
Fintype: Type ?u.50671 → Type ?u.50671
Fintype
α: Type ?u.50653
α
] [
Fintype: Type ?u.50674 → Type ?u.50674
Fintype
β: Type ?u.50656
β
] :
DecidablePred: {α : Sort ?u.50677} → (αProp) → Sort (max1?u.50677)
DecidablePred
(
Surjective: {α : Sort ?u.50685} → {β : Sort ?u.50684} → (αβ) → Prop
Surjective
: (
α: Type ?u.50653
α
β: Type ?u.50656
β
) →
Prop: Type
Prop
) := fun
x: ?m.50708
x
=>

Goals accomplished! 🐙
α: Type ?u.50653

β: Type ?u.50656

γ: Type ?u.50659

inst✝²: DecidableEq β

inst✝¹: Fintype α

inst✝: Fintype β

x: αβ


α: Type ?u.50653

β: Type ?u.50656

γ: Type ?u.50659

inst✝²: DecidableEq β

inst✝¹: Fintype α

inst✝: Fintype β

x: αβ


Decidable (∀ (b : β), a, x a = b)
α: Type ?u.50653

β: Type ?u.50656

γ: Type ?u.50659

inst✝²: DecidableEq β

inst✝¹: Fintype α

inst✝: Fintype β

x: αβ


Decidable (∀ (b : β), a, x a = b)
α: Type ?u.50653

β: Type ?u.50656

γ: Type ?u.50659

inst✝²: DecidableEq β

inst✝¹: Fintype α

inst✝: Fintype β

x: αβ



Goals accomplished! 🐙
#align fintype.decidable_surjective_fintype
Fintype.decidableSurjectiveFintype: {α : Type u_1} → {β : Type u_2} → [inst : DecidableEq β] → [inst : Fintype α] → [inst : Fintype β] → DecidablePred Surjective
Fintype.decidableSurjectiveFintype
instance
decidableBijectiveFintype: [inst : DecidableEq α] → [inst : DecidableEq β] → [inst : Fintype α] → [inst : Fintype β] → DecidablePred Bijective
decidableBijectiveFintype
[
DecidableEq: Sort ?u.51084 → Sort (max1?u.51084)
DecidableEq
α: Type ?u.51075
α
] [
DecidableEq: Sort ?u.51093 → Sort (max1?u.51093)
DecidableEq
β: Type ?u.51078
β
] [
Fintype: Type ?u.51102 → Type ?u.51102
Fintype
α: Type ?u.51075
α
] [
Fintype: Type ?u.51105 → Type ?u.51105
Fintype
β: Type ?u.51078
β
] :
DecidablePred: {α : Sort ?u.51108} → (αProp) → Sort (max1?u.51108)
DecidablePred
(
Bijective: {α : Sort ?u.51116} → {β : Sort ?u.51115} → (αβ) → Prop
Bijective
: (
α: Type ?u.51075
α
β: Type ?u.51078
β
) →
Prop: Type
Prop
) := fun
x: ?m.51145
x
=>

Goals accomplished! 🐙
α: Type ?u.51075

β: Type ?u.51078

γ: Type ?u.51081

inst✝³: DecidableEq α

inst✝²: DecidableEq β

inst✝¹: Fintype α

inst✝: Fintype β

x: αβ


α: Type ?u.51075

β: Type ?u.51078

γ: Type ?u.51081

inst✝³: DecidableEq α

inst✝²: DecidableEq β

inst✝¹: Fintype α

inst✝: Fintype β

x: αβ


α: Type ?u.51075

β: Type ?u.51078

γ: Type ?u.51081

inst✝³: DecidableEq α

inst✝²: DecidableEq β

inst✝¹: Fintype α

inst✝: Fintype β

x: αβ


α: Type ?u.51075

β: Type ?u.51078

γ: Type ?u.51081

inst✝³: DecidableEq α

inst✝²: DecidableEq β

inst✝¹: Fintype α

inst✝: Fintype β

x: αβ



Goals accomplished! 🐙
#align fintype.decidable_bijective_fintype
Fintype.decidableBijectiveFintype: {α : Type u_1} → {β : Type u_2} → [inst : DecidableEq α] → [inst : DecidableEq β] → [inst : Fintype α] → [inst : Fintype β] → DecidablePred Bijective
Fintype.decidableBijectiveFintype
instance
decidableRightInverseFintype: [inst : DecidableEq α] → [inst : Fintype α] → (f : αβ) → (g : βα) → Decidable (Function.RightInverse f g)
decidableRightInverseFintype
[
DecidableEq: Sort ?u.51589 → Sort (max1?u.51589)
DecidableEq
α: Type ?u.51580
α
] [
Fintype: Type ?u.51598 → Type ?u.51598
Fintype
α: Type ?u.51580
α
] (
f: αβ
f
:
α: Type ?u.51580
α
β: Type ?u.51583
β
) (
g: βα
g
:
β: Type ?u.51583
β
α: Type ?u.51580
α
) :
Decidable: PropType
Decidable
(
Function.RightInverse: {α : Sort ?u.51610} → {β : Sort ?u.51609} → (βα) → (αβ) → Prop
Function.RightInverse
f: αβ
f
g: βα
g
) := show
Decidable: PropType
Decidable
(∀
x: ?m.51628
x
,
g: βα
g
(
f: αβ
f
x: ?m.51628
x
) =
x: ?m.51628
x
) by

Goals accomplished! 🐙
#align fintype.decidable_right_inverse_fintype
Fintype.decidableRightInverseFintype: {α : Type u_1} → {β : Type u_2} → [inst : DecidableEq α] → [inst : Fintype α] → (f : αβ) → (g : βα) → Decidable (Function.RightInverse f g)
Fintype.decidableRightInverseFintype
instance
decidableLeftInverseFintype: [inst : DecidableEq β] → [inst :