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

! This file was ported from Lean 3 source module order.atoms.finite
! leanprover-community/mathlib commit d6fad0e5bf2d6f48da9175d25c3dc5706b3834ce
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Data.Set.Finite
import Mathlib.Order.Atoms

/-!
# Atoms, Coatoms, Simple Lattices, and Finiteness

This module contains some results on atoms and simple lattices in the finite context.

## Main results
  * `Finite.to_isAtomic`, `Finite.to_isCoatomic`: Finite partial orders with bottom resp. top
    are atomic resp. coatomic.

-/


variable {
α: Type ?u.2054
α
β: Type ?u.425
β
:
Type _: Type (?u.5+1)
Type _
} namespace IsSimpleOrder section DecidableEq /- It is important that `IsSimpleOrder` is the last type-class argument of this instance, so that type-class inference fails quickly if it doesn't apply. -/
instance: {α : Type u_1} → [inst : DecidableEq α] → [inst : LE α] → [inst_1 : BoundedOrder α] → [inst : IsSimpleOrder α] → Fintype α
instance
(priority := 200) {
α: ?m.14
α
} [
DecidableEq: Sort ?u.17 → Sort (max1?u.17)
DecidableEq
α: ?m.14
α
] [
LE: Type ?u.26 → Type ?u.26
LE
α: ?m.14
α
] [
BoundedOrder: (α : Type ?u.29) → [inst : LE α] → Type ?u.29
BoundedOrder
α: ?m.14
α
] [
IsSimpleOrder: (α : Type ?u.36) → [inst : LE α] → [inst : BoundedOrder α] → Prop
IsSimpleOrder
α: ?m.14
α
] :
Fintype: Type ?u.52 → Type ?u.52
Fintype
α: ?m.14
α
:=
Fintype.ofEquiv: {β : Type ?u.62} → (α : Type ?u.61) → [inst : Fintype α] → α βFintype β
Fintype.ofEquiv
Bool: Type
Bool
equivBool: {α : Type ?u.66} → [inst : DecidableEq α] → [inst : LE α] → [inst_1 : BoundedOrder α] → [inst : IsSimpleOrder α] → α Bool
equivBool
.
symm: {α : Sort ?u.199} → {β : Sort ?u.198} → α ββ α
symm
end DecidableEq end IsSimpleOrder namespace Fintype namespace IsSimpleOrder variable [
PartialOrder: Type ?u.428 → Type ?u.428
PartialOrder
α: Type ?u.422
α
] [
BoundedOrder: (α : Type ?u.2063) → [inst : LE α] → Type ?u.2063
BoundedOrder
α: Type ?u.422
α
] [
IsSimpleOrder: (α : Type ?u.464) → [inst : LE α] → [inst : BoundedOrder α] → Prop
IsSimpleOrder
α: Type ?u.422
α
] [
DecidableEq: Sort ?u.500 → Sort (max1?u.500)
DecidableEq
α: Type ?u.422
α
] theorem
univ: Finset.univ = {, }
univ
: (
Finset.univ: {α : Type ?u.599} → [inst : Fintype α] → Finset α
Finset.univ
:
Finset: Type ?u.598 → Type ?u.598
Finset
α: Type ?u.509
α
) = {
: ?m.776
,
: ?m.831
} :=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.512

inst✝³: PartialOrder α

inst✝²: BoundedOrder α

inst✝¹: IsSimpleOrder α

inst✝: DecidableEq α


Finset.univ = {, }
α: Type u_1

β: Type ?u.512

inst✝³: PartialOrder α

inst✝²: BoundedOrder α

inst✝¹: IsSimpleOrder α

inst✝: DecidableEq α


Finset.map { toFun := IsSimpleOrder.equivBool.symm, inj' := (_ : Function.Injective IsSimpleOrder.equivBool.symm) } Finset.univ = {, }
α: Type u_1

β: Type ?u.512

inst✝³: PartialOrder α

inst✝²: BoundedOrder α

inst✝¹: IsSimpleOrder α

inst✝: DecidableEq α


Finset.univ = {, }
α: Type u_1

β: Type ?u.512

inst✝³: PartialOrder α

inst✝²: BoundedOrder α

inst✝¹: IsSimpleOrder α

inst✝: DecidableEq α


Finset.map { toFun := IsSimpleOrder.equivBool.symm, inj' := (_ : Function.Injective IsSimpleOrder.equivBool.symm) } Finset.univ = {, }
α: Type u_1

β: Type ?u.512

inst✝³: PartialOrder α

inst✝²: BoundedOrder α

inst✝¹: IsSimpleOrder α

inst✝: DecidableEq α


Finset.map { toFun := IsSimpleOrder.equivBool.symm, inj' := (_ : Function.Injective IsSimpleOrder.equivBool.symm) } {true, false} = {, }
α: Type u_1

β: Type ?u.512

inst✝³: PartialOrder α

inst✝²: BoundedOrder α

inst✝¹: IsSimpleOrder α

inst✝: DecidableEq α


Finset.map { toFun := IsSimpleOrder.equivBool.symm, inj' := (_ : Function.Injective IsSimpleOrder.equivBool.symm) } {true, false} = {, }
α: Type u_1

β: Type ?u.512

inst✝³: PartialOrder α

inst✝²: BoundedOrder α

inst✝¹: IsSimpleOrder α

inst✝: DecidableEq α


Finset.univ = {, }
α: Type u_1

β: Type ?u.512

inst✝³: PartialOrder α

inst✝²: BoundedOrder α

inst✝¹: IsSimpleOrder α

inst✝: DecidableEq α


{IsSimpleOrder.equivBool.symm true, IsSimpleOrder.equivBool.symm false} = {, }
α: Type u_1

β: Type ?u.512

inst✝³: PartialOrder α

inst✝²: BoundedOrder α

inst✝¹: IsSimpleOrder α

inst✝: DecidableEq α


Finset.univ = {, }

Goals accomplished! 🐙
#align fintype.is_simple_order.univ
Fintype.IsSimpleOrder.univ: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : BoundedOrder α] [inst_2 : IsSimpleOrder α] [inst_3 : DecidableEq α], Finset.univ = {, }
Fintype.IsSimpleOrder.univ
theorem
card: Fintype.card α = 2
card
:
Fintype.card: (α : Type ?u.2142) → [inst : Fintype α] →
Fintype.card
α: Type ?u.2054
α
=
2: ?m.2233
2
:= (
Fintype.ofEquiv_card: ∀ {α : Type ?u.2255} {β : Type ?u.2256} [inst : Fintype α] (f : α β), Fintype.card β = Fintype.card α
Fintype.ofEquiv_card
_: ?m.2257 ?m.2258
_
).
trans: ∀ {α : Sort ?u.2339} {a b c : α}, a = bb = ca = c
trans
Fintype.card_bool: Fintype.card Bool = 2
Fintype.card_bool
#align fintype.is_simple_order.card
Fintype.IsSimpleOrder.card: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : BoundedOrder α] [inst_2 : IsSimpleOrder α] [inst_3 : DecidableEq α], Fintype.card α = 2
Fintype.IsSimpleOrder.card
end IsSimpleOrder end Fintype namespace Bool instance :
IsSimpleOrder: (α : Type ?u.2384) → [inst : LE α] → [inst : BoundedOrder α] → Prop
IsSimpleOrder
Bool: Type
Bool
:= ⟨fun
a: ?m.2844
a
=>

Goals accomplished! 🐙
α: Type ?u.2378

β: Type ?u.2381

a: Bool


a = a =
α: Type ?u.2378

β: Type ?u.2381

a: Bool


a = a =
α: Type ?u.2378

β: Type ?u.2381

a: Bool


a {} a =
α: Type ?u.2378

β: Type ?u.2381

a: Bool


a = a =
α: Type ?u.2378

β: Type ?u.2381

a: Bool


a = a {}
α: Type ?u.2378

β: Type ?u.2381

a: Bool


a = a =
α: Type ?u.2378

β: Type ?u.2381

a: Bool


a {, }
α: Type ?u.2378

β: Type ?u.2381

a: Bool


a = a =
α: Type ?u.2378

β: Type ?u.2381

a: Bool


a {true, }
α: Type ?u.2378

β: Type ?u.2381

a: Bool


a = a =
α: Type ?u.2378

β: Type ?u.2381

a: Bool


α: Type ?u.2378

β: Type ?u.2381

a: Bool


a = a =
α: Type ?u.2378

β: Type ?u.2381

a: Bool


a Finset.univ
α: Type ?u.2378

β: Type ?u.2381

a: Bool


a Finset.univ
α: Type ?u.2378

β: Type ?u.2381

a: Bool


a = a =

Goals accomplished! 🐙
end Bool section Fintype open Finset -- see Note [lower instance priority] instance (priority := 100)
Finite.to_isCoatomic: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : OrderTop α] [inst_2 : Finite α], IsCoatomic α
Finite.to_isCoatomic
[
PartialOrder: Type ?u.3143 → Type ?u.3143
PartialOrder
α: Type ?u.3137
α
] [
OrderTop: (α : Type ?u.3146) → [inst : LE α] → Type ?u.3146
OrderTop
α: Type ?u.3137
α
] [
Finite: Sort ?u.3179 → Prop
Finite
α: Type ?u.3137
α
] :
IsCoatomic: (α : Type ?u.3182) → [inst : PartialOrder α] → [inst : OrderTop α] → Prop
IsCoatomic
α: Type ?u.3137
α
:=

Goals accomplished! 🐙
α: Type ?u.3137

β: Type ?u.3140

inst✝²: PartialOrder α

inst✝¹: OrderTop α

inst✝: Finite α


α: Type ?u.3137

β: Type ?u.3140

inst✝²: PartialOrder α

inst✝¹: OrderTop α

inst✝: Finite α

b: α

ht: ¬b =


a, IsCoatom a b a
α: Type ?u.3137

β: Type ?u.3140

inst✝²: PartialOrder α

inst✝¹: OrderTop α

inst✝: Finite α


α: Type ?u.3137

β: Type ?u.3140

inst✝²: PartialOrder α

inst✝¹: OrderTop α

inst✝: Finite α

b: α

ht: ¬b =

c: α

hc: c { x | b x x }

hmax: ∀ (a' : α), a' { x | b x x }id c id a'id c = id a'


intro.intro
a, IsCoatom a b a
α: Type ?u.3137

β: Type ?u.3140

inst✝²: PartialOrder α

inst✝¹: OrderTop α

inst✝: Finite α


α: Type ?u.3137

β: Type ?u.3140

inst✝²: PartialOrder α

inst✝¹: OrderTop α

inst✝: Finite α

b: α

ht: ¬b =

c: α

hc: c { x | b x x }

hmax: ∀ (a' : α), a' { x | b x x }id c id a'id c = id a'

y: α

hcy: c < y


intro.intro
y =
α: Type ?u.3137

β: Type ?u.3140

inst✝²: PartialOrder α

inst✝¹: OrderTop α

inst✝: Finite α


α: Type ?u.3137

β: Type ?u.3140

inst✝²: PartialOrder α

inst✝¹: OrderTop α

inst✝: Finite α

b: α

ht: ¬b =

c: α

hc: c { x | b x x }

hmax: ∀ (a' : α), a' { x | b x x }id c id a'id c = id a'

y: α

hcy: c < y

hyt: ¬y =


intro.intro
α: Type ?u.3137

β: Type ?u.3140

inst✝²: PartialOrder α

inst✝¹: OrderTop α

inst✝: Finite α


α: Type ?u.3137

β: Type ?u.3140

inst✝²: PartialOrder α

inst✝¹: OrderTop α

inst✝: Finite α

b: α

ht: ¬b =

c: α

hc: c { x | b x x }

hmax: ∀ (a' : α), a' { x | b x x }id c id a'id c = id a'

hcy: c < c

hyt: ¬c =


intro.intro
α: Type ?u.3137

β: Type ?u.3140

inst✝²: PartialOrder α

inst✝¹: OrderTop α

inst✝: Finite α



Goals accomplished! 🐙
#align finite.to_is_coatomic
Finite.to_isCoatomic: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : OrderTop α] [inst_2 : Finite α], IsCoatomic α
Finite.to_isCoatomic
-- see Note [lower instance priority] instance (priority := 100)
Finite.to_isAtomic: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : OrderBot α] [inst_2 : Finite α], IsAtomic α
Finite.to_isAtomic
[
PartialOrder: Type ?u.4438 → Type ?u.4438
PartialOrder
α: Type ?u.4432
α
] [
OrderBot: (α : Type ?u.4441) → [inst : LE α] → Type ?u.4441
OrderBot
α: Type ?u.4432
α
] [
Finite: Sort ?u.4474 → Prop
Finite
α: Type ?u.4432
α
] :
IsAtomic: (α : Type ?u.4477) → [inst : PartialOrder α] → [inst : OrderBot α] → Prop
IsAtomic
α: Type ?u.4432
α
:=
isCoatomic_dual_iff_isAtomic: ∀ {α : Type ?u.4510} [inst : PartialOrder α] [inst_1 : OrderBot α], IsCoatomic αᵒᵈ IsAtomic α
isCoatomic_dual_iff_isAtomic
.
mp: ∀ {a b : Prop}, (a b) → ab
mp
Finite.to_isCoatomic: ∀ {α : Type ?u.4595} [inst : PartialOrder α] [inst_1 : OrderTop α] [inst_2 : Finite α], IsCoatomic α
Finite.to_isCoatomic
#align finite.to_is_atomic
Finite.to_isAtomic: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : OrderBot α] [inst_2 : Finite α], IsAtomic α
Finite.to_isAtomic
end Fintype