-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: zeramorphic <[email protected]>
- Loading branch information
1 parent
ddf58fc
commit 8674cdc
Showing
6 changed files
with
182 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
import ConNF.Setup.Litter | ||
|
||
/-! | ||
# Atoms | ||
In this file, we define atoms: the elements of the base type of our model. They are not atoms in the | ||
ZFU sense (for example), they are simply the elements of the model which are in type `⊥`. | ||
This base type does not appear in the final construction, it is just used as the foundation on which | ||
the subsequent layers can be built. | ||
## Main declarations | ||
* `ConNF.Atom`: The type of atoms. | ||
-/ | ||
|
||
universe u | ||
|
||
open Cardinal Set | ||
|
||
namespace ConNF | ||
|
||
variable [Params.{u}] | ||
|
||
/-- | ||
The base type of the construction, denoted by `τ₋₁` in various papers. Instead of declaring it as an | ||
arbitrary type of cardinality `μ` and partitioning it into suitable sets of litters afterwards, we | ||
define it as `Litter × κ`, which has the correct cardinality and comes with a natural partition. | ||
These are not 'atoms' in the ZFU, TTTU or NFU sense; they are simply the elements of the model which | ||
are in type `τ₋₁`. | ||
-/ | ||
structure Atom : Type u where | ||
litter : Litter | ||
index : κ | ||
|
||
instance : ToLitter Atom where | ||
toLitter := Atom.litter | ||
|
||
/-- The set of atoms corresponding to litter `L`. -/ | ||
def litterSet (L : Litter) : Set Atom := | ||
{a | a° = L} | ||
|
||
@[inherit_doc] postfix:75 "ᴬ" => litterSet | ||
|
||
@[simp] | ||
theorem mem_litterSet_iff (a : Atom) (L : Litter) : | ||
a ∈ Lᴬ ↔ a° = L := | ||
Iff.rfl | ||
|
||
@[ext] | ||
theorem Atom.ext {a₁ a₂ : Atom} (h : a₁° = a₂°) (h' : a₁.index = a₂.index) : a₁ = a₂ := by | ||
obtain ⟨L₁, i₁⟩ := a₁ | ||
obtain ⟨L₂, i₂⟩ := a₂ | ||
subst h | ||
subst h' | ||
rfl | ||
|
||
/-- Strips away the name of the type of atoms, converting it into a combination of types | ||
well-known to mathlib. -/ | ||
def atomEquiv : Atom ≃ Litter × κ | ||
where | ||
toFun a := (a°, a.index) | ||
invFun a := ⟨a.1, a.2⟩ | ||
left_inv _ := rfl | ||
right_inv _ := rfl | ||
|
||
/-- The cardinality of `Atom` is the cardinality of `μ`. | ||
We will prove that all types constructed in our model have cardinality equal to `μ`. -/ | ||
@[simp] | ||
theorem card_atom : #Atom = #μ := by | ||
rw [atomEquiv.cardinal_eq, mk_prod, lift_id, lift_id, card_litter] | ||
exact mul_eq_left aleph0_lt_μ.le κ_le_μ (mk_ne_zero κ) | ||
|
||
/-- Each litter set is equivalent as a type to `κ`. -/ | ||
def litterSetEquiv (L : Litter) : Lᴬ ≃ κ where | ||
toFun a := a.val.index | ||
invFun i := ⟨⟨L, i⟩, rfl⟩ | ||
left_inv x := Subtype.ext <| Atom.ext x.prop.symm rfl | ||
right_inv _ := rfl | ||
|
||
/-- Each litter set has cardinality `κ`. -/ | ||
@[simp] | ||
theorem mk_litterSet (L : Litter) : #(Lᴬ) = #κ := | ||
Cardinal.eq.mpr ⟨litterSetEquiv L⟩ | ||
|
||
instance (L : Litter) : Nonempty (Lᴬ) := | ||
⟨⟨L, Classical.arbitrary κ⟩, rfl⟩ | ||
|
||
end ConNF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
import ConNF.Setup.TypeIndex | ||
|
||
/-! | ||
# Litters | ||
In this file, we define litters, which are the parts of an indexed partition of the base type of our | ||
model. Each litter is indexed by an element of `μ`, as well as some parameters `β` and `γ` used for | ||
defining the `fuzz` map later. | ||
## Main declarations | ||
* `ConNF.Litter`: The type of litters. | ||
-/ | ||
|
||
universe u | ||
|
||
open Cardinal WithBot | ||
|
||
namespace ConNF | ||
|
||
variable [Params.{u}] | ||
|
||
/-- The type indexing the partition of `ConNF.Atom`. Each atom belongs to a unique litter. | ||
The field `ν : μ` is an index that enforces that there are `μ` litters. | ||
The fields `β` and `γ` are used in the definition of the `fuzz` map, which is an injection | ||
into the type of litters. -/ | ||
structure Litter where | ||
ν : μ | ||
β : TypeIndex | ||
γ : Λ | ||
β_ne_γ : β ≠ γ | ||
|
||
instance : Nonempty Litter := | ||
⟨⟨Classical.arbitrary μ, ⊥, Classical.arbitrary Λ, bot_ne_coe⟩⟩ | ||
|
||
/-- Strips away the name of the type of litters, converting it into a combination of types | ||
well-known to mathlib. -/ | ||
def litterEquiv : Litter ≃ { a : μ × TypeIndex × Λ // a.2.1 ≠ a.2.2 } | ||
where | ||
toFun L := ⟨⟨L.ν, L.β, L.γ⟩, L.β_ne_γ⟩ | ||
invFun L := ⟨L.val.1, L.val.2.1, L.val.2.2, L.prop⟩ | ||
left_inv _ := rfl | ||
right_inv _ := rfl | ||
|
||
/-- There are precisely `μ` litters. -/ | ||
@[simp] | ||
theorem card_litter : #Litter = #μ := by | ||
apply le_antisymm | ||
· apply litterEquiv.cardinal_eq.trans_le | ||
apply (mk_subtype_le _).trans_eq | ||
simp only [mk_prod, Cardinal.lift_id, TypeIndex.card, mul_mk_eq_max, max_self, | ||
max_eq_left_iff, Λ_le_μ] | ||
· apply mk_le_of_injective (f := λ ν ↦ ⟨ν, ⊥, Classical.arbitrary Λ, bot_ne_coe⟩) | ||
intro ν₁ ν₂ h | ||
cases h | ||
rfl | ||
|
||
class ToLitter (X : Type _) where | ||
/-- Returns a litter associated to this object. -/ | ||
toLitter : X → Litter | ||
|
||
@[inherit_doc] postfix:75 "°" => ToLitter.toLitter | ||
|
||
end ConNF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters