lean2/library/theories/topology/order_topology.lean

81 lines
3.1 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/-
Copyright (c) 2016 Jacob Gross. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jacob Gross
The order topology.
-/
import data.set theories.topology.basic algebra.interval
open algebra eq.ops set interval topology
namespace order_topology
variables {X : Type} [linear_strong_order_pair X]
definition linorder_generators : set (set X) := {y | ∃ a, y = '(a, ∞) } {y | ∃ a, y = '(-∞, a)}
definition linorder_topology [instance] : topology X :=
topology.generated_by linorder_generators
theorem Open_Ioi {a : X} : Open '(a, ∞) :=
(generators_mem_topology_generated_by linorder_generators) (!mem_unionl (exists.intro a rfl))
theorem Open_Iio {a : X} : Open '(-∞, a) :=
(generators_mem_topology_generated_by linorder_generators) (!mem_unionr (exists.intro a rfl))
theorem closed_Ici (a : X) : closed '[a,∞) :=
!compl_Ici⁻¹ ▸ Open_Iio
theorem closed_Iic (a : X) : closed '(-∞,a] :=
have '(a, ∞) = -'(-∞,a], from ext(take x, iff.intro
(assume H, not_le_of_gt H)
(assume H, lt_of_not_ge H)),
this ▸ Open_Ioi
theorem Open_Ioo (a b : X) : Open '(a, b) :=
Open_inter !Open_Ioi !Open_Iio
theorem closed_Icc (a b : X) : closed '[a, b] :=
closed_inter !closed_Ici !closed_Iic
section
open classical
theorem linorder_separation {x y : X} :
x < y → ∃ a b, (x < a ∧ b < y) ∧ '(-∞, a) ∩ '(b, ∞) = ∅ :=
suppose x < y,
if H1 : ∃ z, x < z ∧ z < y then
obtain z (Hz : x < z ∧ z < y), from H1,
have '(-∞, z) ∩ '(z, ∞) = ∅, from ext (take r, iff.intro
(assume H, absurd (!lt.trans (and.elim_left H) (and.elim_right H)) !lt.irrefl)
(assume H, !not.elim !not_mem_empty H)),
exists.intro z (exists.intro z (and.intro Hz this))
else
have '(-∞, y) ∩ '(x, ∞) = ∅, from ext(take r, iff.intro
(assume H, absurd (exists.intro r (iff.elim_left and.comm H)) H1)
(assume H, !not.elim !not_mem_empty H)),
exists.intro y (exists.intro x (and.intro (and.intro `x < y` `x < y`) this))
end
protected definition T2_space.of_linorder_topology [trans_instance] :
T2_space X :=
⦃ T2_space, linorder_topology,
T2 := abstract
take x y, assume H,
or.elim (lt_or_gt_of_ne H)
(assume H,
obtain a [b Hab], from linorder_separation H,
show _, from exists.intro '(-∞, a) (exists.intro '(b, ∞)
(and.intro Open_Iio (and.intro Open_Ioi (iff.elim_left and.assoc Hab)))))
(assume H,
obtain a [b Hab], from linorder_separation H,
have Hx : x ∈ '(b, ∞), from and.elim_right (and.elim_left Hab),
have Hy : y ∈ '(-∞, a), from and.elim_left (and.elim_left Hab),
have Hi : '(b, ∞) ∩ '(-∞, a) = ∅, from !inter_comm ▸ (and.elim_right Hab),
have (Open '(b,∞)) ∧ (Open '(-∞, a)) ∧ x ∈ '(b, ∞) ∧ y ∈ '(-∞, a) ∧
'(b, ∞) ∩ '(-∞, a) = ∅, from
and.intro Open_Ioi (and.intro Open_Iio (and.intro Hx (and.intro Hy Hi))),
show _, from exists.intro '(b,∞) (exists.intro '(-∞, a) this))
end ⦄
end order_topology