-
Notifications
You must be signed in to change notification settings - Fork 10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Long line & ordinals #22
Comments
I haven’t yet looked at other libraries and how they formalise ordinals. Might be worth it. |
For reference, here are some formalizations of topology/ordinals in proof assistants, which might be useful since you already assume classical logic: |
Thanks for the reading material. I noticed today, that the file Quotients.v exists. Well, that might be useful. |
I came up with an easier way to describe the long line. I can introduce the first uncountable ordinal as a hypothesis, without giving an explicit construction. This way we can avoid intricate constructions and universe incompatibilities. From ZornsLemma Require Import CountableTypes WellOrders.
From Coq Require Import Relation_Operators.
From Topology Require Import RTopology.
Definition ho_unit_interval :=
[z : RTop | 0 <= z < 1].
(* It is a bit clunky to work with the construction of the long line.
Can we work with it axiomatically? Would that be easier?
(i.e. list some properties such that every space satisfying these
properties is homeomorphic to some canonical construction of the
long line.)
*)
Section LongLine.
(* Assume, that [Omega] is the first uncountable
ordinal. Independent of its actual construction, we are only
interested in this property. *)
Variable Omega : Type.
Variable lt :
relation Omega.
Variable Omega_well_ordered :
well_order lt.
Hypothesis Omega_Uncountable : ~CountableT Omega.
(* [Omega] is the least uncountable ordinal. I.e. it can be order-embedded into all other uncountable ordinals. *)
Hypothesis Omega_minimal :
forall (X : Type) (R : relation X),
well_order R ->
~CountableT X ->
exists f : Omega -> X,
forall x y,
lt x y <->
R (f x) (f y).
Definition clr_le : relation _ :=
(lexprod
(SubspaceTopology ho_unit_interval)
(fun _ => Omega)
(fun x y =>
Rle (proj1_sig x)
(proj1_sig y))
(fun _ x y =>
x = y \/
lt x y)).
Definition closed_long_ray :=
OrderTopology clr_le.
End LongLine. |
I’d like to add some examples of (pathological) topological spaces to the library. For the long line I need the following:
ω_1
.I’m currently struggling with the definition of
ω_1
. Wikipedia gives Hartog numbers as slight hint. But my problem is not conceptual, in understanding the mathematics, but in the formalisation in Coq.I’d like to use the
Ordinal
andwell_founded
definitions from Ordinals.v and WellOrders.v, butwell_founded
demandsforall a b, a < b \/ a = b \/ a > b
, while we can only proveforall a b : Ordinal, a < b \/ a == b \/ a > b
. So the theorems of WellOrders.v remain unavailable for theOrdinal
type. Interestingly,==
isn’t extensional forOrdinal
; for it is possible to prove~ forall a b : Ordinal, a == b -> a = b
.I see three possible ways to continue:
Ordinal
type, soa == b -> a = b
holds. That actually looks rather difficult, since we can’t easily take quotients. Maybe Induction-Induction would lead to a suitable definition, but currently that needs axioms, which isn’t very satisfying.well_founded
definition (specificallytotal_strict_order
) so it is only up-to-equivalence. I.e. use Setoids. But since the rest of the library avoids using Setoids, I don’t want to introduce them here.Ordinal
type, on the type ofwell_founded
relations. Using a bundled structure (i.e. aRecord WF_Type := { carrier : T; R : relation T; wf : well_founded R }.
) might simplify the work, because always carryingT
andR
around is a bit annoying. It would be necessary to show thatWF_Type
is itself a well_founded type, then we could (probably) carry out the construction ofω_1
. And the layered universes will probably make sure that no paradox arises.We might want to add more theory about ordinals, like ordinal arithmetic. But hopefully with an ordinal type where
a <= b -> a => b -> a = b
.P.S.: The proof that
==
is not extensional. We might want to add this to the library, as a reminder that==
isn’t nice enough. The trick of the proof is to notice, thatord_sup
isn’t injective with respect to==
. The termord_sup (fun H:False => match H return Ordinal with end)
corresponds to the ordinal zero.The text was updated successfully, but these errors were encountered: