Exercise 6.29 (Scott 1981, PRG-19, §6) — infinitary sum and product #
EXERCISE 6.29. Generalize
+and×to infinitary operations on domains:∑_{n=0}^∞ D_nand∏_{n=0}^∞ D_n. Would a similar generalization be possible for⊕and⊗?
We work with an arbitrary index type ι and a family of neighbourhood systems D : ∀ i, 𝒟ᵢ over
token types α i (Scott's D_n, with ℕ the intended ι). Tokens of the
combined systems live in
Σ i, α i (for product-like operations) or Option (Σ i, α i) (for sum-like
operations, the
none being the fresh basepoint). This is the indexed analogue of the abstract
binary
prod/sum over α ⊕ β / Option (α ⊕ β).
The four operations and the answer #
∏_i D_i(iprod) — the indexed product. A neighbourhood is a tupleX i ∈ 𝒟ᵢthat is the master in all but finitely many coordinates (a cylinder). The finite-support condition is essential: it is exactly what makes the compact elements of the product the finitely-presented ones, giving the headline resultiprodEquiv : |∏_i D_i| ≃o ∀ i, |D_i|(the product order is pointwise) — the infinitary Proposition 3.2.∑_i D_i(isum) — the indexed separated sum. A neighbourhood is the basepoint master or a single tagged copyinj i Xof one summand (finite information — only one coordinate is constrained), so no finite-support condition is needed. Element trichotomyisum_trichotomy: every element is⊥or lives in exactly one summand.⊕_i D_i(ioplus) — the indexed coalesced sum, as∑but with the improper tagged copies deleted (the bottoms identified). Single-coordinate, so it generalizes fine.⊗_i D_i(iotimes) — the indexed smash product. A proper neighbourhood would need every coordinate proper (≠master), which over an infiniteιcontradicts finite support. So the infinite smash degenerates:iotimes_only_master/iotimes_subsingleton— over an infinite index it has only the basepoint, a one-point domain.
Answer to Scott's question. +, ×, ⊕ all generalize to infinitary
operations; ⊗ does
not — the infinite smash collapses to the trivial domain.
Choice discipline. Every data construction is choice-free
(iprod, isum, ioplus, iotimes, the order iso iprodEquiv, and
isum_summand_unique all have
#print axioms ⊆ {propext, Quot.sound}). The finite-support predicate is a List
of coordinates in
its positive form ∀ i, i ∉ l → X i = master, which keeps intersection
(FinSupp.inter) and the
reconstruction (z_mem_of_slices) constructive. Only two genuinely classical
Prop-level results
remain: isum_trichotomy (an excluded-middle case split on whether an element
reaches a summand) and
the degeneracy iotimes_only_master/iotimes_subsingleton (a cardinality
argument through Mathlib's
classical Set.Finite). Both are flagged in their docstrings.
The product neighbourhood and its algebra #
Choice-free finite support: a list enumerating all coordinates where X
is non-master.
(Mathlib's Set.Finite is built on Fintype and pulls in Classical.choice; a
List witness keeps
the construction constructive, which is exactly what is needed for the cylinder.)
Equations
- Domain.Neighborhood.Exercise629.FinSupp D X = ∃ (l : List ι), ∀ i ∉ l, X i = (D i).master
Instances For
Exercise 6.29 — the indexed product ∏_i D_i. Neighbourhoods are
cylinders: tuples
X i ∈ 𝒟ᵢ that are the master in all but finitely many coordinates.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The element isomorphism |∏_i D_i| ≃o ∀ i, |D_i| #
Throughout we use the slices slice i U — the cylinder that is U at
coordinate i and the
master elsewhere.
The tuple that is U at coordinate i and the master elsewhere.
Equations
- Domain.Neighborhood.Exercise629.updTuple D i U = Function.update (fun (j : ι) => (D j).master) i U
Instances For
The slice cylinder: U at coordinate i, master elsewhere.
Equations
Instances For
A slice has support ⊆ {i}, hence is a neighbourhood of the product when U ∈ 𝒟ᵢ.
Recovering the coordinate from a slice neighbourhood.
Slices at the same coordinate intersect by intersecting their data.
Slices are monotone in their data.
A cylinder is contained in each of its own slices.
The i-th component of a product element (Scott's z_i).
Equations
- One or more equations did not get rendered due to their size.
Instances For
The element of ∏_i D_i assembled from a tuple of components.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The cylinder restricted to a list of coordinates l (master outside l).
Instances For
An element contains the restricted cylinder once it contains each listed slice.
Reconstruction. A product element containing each of a cylinder's slices contains the cylinder. The finite support (a list of coordinates) lets the only finitely many non-trivial slices be intersected inside the element — entirely choice-free.
Exercise 6.29 — × generalizes to ∏, correct up to isomorphism. The
domain of the
indexed product is the pointwise product of the factor domains: |∏_i D_i| ≃o ∀ i, |D_i|. This is
the infinitary Proposition 3.2 (prodEquiv).
Equations
- One or more equations did not get rendered due to their size.
Instances For
+ generalizes to ∑: the indexed separated sum #
Tokens live in Option (Σ i, α i): the none basepoint plus tagged copies inj i X of the
summands. A neighbourhood constrains only a single coordinate, so — unlike the
product — no
finite-support condition is needed. We need ∅ ∉ 𝒟ᵢ (hne) to keep distinct
tagged copies
disjoint.
The basepoint master of the indexed sum: {none} ∪ {some ⟨i, a⟩ ∣ a ∈ Δᵢ}.
Equations
- Domain.Neighborhood.Exercise629.sumMasterI D = insert none ((fun (p : (i : ι) × α i) => some p) '' Domain.Neighborhood.Exercise629.iprodNbhd fun (i : ι) => (D i).master)
Instances For
Exercise 6.29 — the indexed separated sum ∑_i D_i.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Exercise 6.29 — sum trichotomy. Every element of ∑_i D_i either reaches
into some summand
or is the basepoint ⊥. (Prop-level and genuinely classical: the case split is
excluded middle on
whether z reaches a summand, so this depends on Classical.choice.)
Exercise 6.29 — a sum element reaches at most one summand.
⊕ generalizes: the indexed coalesced sum #
As ∑, but the improper tagged copies inj i Δᵢ are deleted (the per-summand
bottoms are
identified with the basepoint). Single-coordinate, so it generalizes with no
finite-support issue.
Exercise 6.29 — the indexed coalesced sum ⊕_i D_i.
Equations
- One or more equations did not get rendered due to their size.
Instances For
⊗ does not generalize: the infinite smash degenerates #
The smash product keeps only those tuples that are proper (≠ master) in
every coordinate
(plus the basepoint master). Over an infinite index this collides with the
finite-support
requirement that any neighbourhood imposes — there are no proper neighbourhoods at
all, so the
infinite smash collapses to the one-point domain.
Exercise 6.29 — the indexed smash product ⊗_i D_i. A proper
neighbourhood is a cylinder
proper in every coordinate; closure under intersection is as for iprod plus
the observation that
X i ∩ X' i ⊆ X i ≠ master stays proper.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Exercise 6.29 — ⊗ does not generalize. Over an infinite index, the smash
product has only
its basepoint: an all-coordinates-proper cylinder has support Set.univ, which
cannot be finite.
Exercise 6.29 — the infinite smash collapses to one point. Its element
domain is a
singleton (⊥ only), so ⊗ has no sensible infinitary generalization.