# Table of Contents Data type ≈ topological space. Piece of data ≈ point Semidecidable property ≈ open set. Computable function ≈ continuous map ? ≈ compact set Closed under - finite conjunction (run sequentially, ensure that all pi are observed) - arbitrary disjunction (run in parallel, wait until one observed) Satisfy the topological space axioms type Nat = Int type Baire = Nat -> Nat The Sierpinski data type is that of results of observations or semidecisions: data S = T. S has precisely two elements, namely T (pronounced top or true) and bot Two programs, or two pieces of data, of the same type are operationally equivalent if any observer will detect the same properties for them. To make this notion mathematically precise, we define a notion of experiment that an observer can perform. By an experiment of type a we mean a function u ∈ (a → S). To observe a given x ∈ a, the observer prepares an experiment u ∈ (a → S) and then runs u(x) and waits for the evaluation to terminate (necessarily with result T). If it does, the observation succeeds. Thus, x, y ∈ a are said to be operationally equivalent if convergence of u(x) is equivalent to that of u(y) for every experiment u ∈ (a → S). We treat equivalent programs as if they were equal, both conceptually and notationally. A subset U of a data type a is called open if its characteristic function χU : a → S defined by χU (x) = T if and only if x ∈ U is continuous. A set is called closed if its complement is open. Sierpinski data type: - ∅ is open: constant map - {T} is open: identity - {bot, T} is open: constant map - {bot} is not open! Continuous ~ definable If f : a → b is continuous then f^−1 (V) is open for every open set V ⊆ b. Proof: Because χ f −1 (V ) = χ V ◦ f and because the composite v ◦ f : a → S is definable if v : b → S is. type Open a = a -> S inverseimage :: (a -> b) -> (Open b -> Open a) inverseimage(f) = \v -> v . f The internal operational preorder x <= y is defined by requiring that x ∈ U => y ∈ U for every open set U bot <= x for any x x <= T for any x If f : a → b is continuous and x <= y then f(x) <= f(y). intersection :: Open a -> Open a -> Open a u \`intersection\` v = \x -> u(x) \`and\` v(x) union: \`or\` is not expressible in Haskell: T \`or\` T = T T \`or\` bot = T bot \`or\` T = T bot \`or\` bot = bot But computable! We extend language with the disjunction operator. countableunion :: (Nat -> Open a) -> Open a countableunion ox = \x -> exists(0) where exists(i) = ox(i)(x) \`or\` exists(i + 1) - The Baire space is the subset B of functions that map the divergent element to itself, and non-divergent elements to non-divergent elements (i.e., the Baire space consists of the strict total functions). - The Cantor space is the subset C of B consisting of functions taking values 0 or 1 on all non-divergent arguments. Let X and Y be subspaces of data types a and b. We say that a function φ : X → Y is (relatively) continuous if there is at least one continuous function f : a → b with φ(x) = f (x) for every x ∈ X. We don’t care how f behaves on elements of a which are outside X For a subspace X of a data type a, a subset U of X is open in X iff there is an open subset U of a such that X ∩ U = U . We say that a subspace of a data type is (relatively) discrete if its Sierpinski-valued equality map is continuous. For example, the data type of natural numbers is not discrete, because one has to take into account the divergent element. However, the space of natural numbers is — we just use the predefined boolean-valued equality test: equalN :: (Nat,Nat) -> S equalN(m,n) = if m == n then T else bot As we have seen, the Baire and Cantor spaces are not discrete, for it takes an infinitely long time to check that two infinite sequences are equal. We say that a subspace of a data type is (relatively) Hausdorff if its Sierpinski-valued apartness map is continuous. We call a subspace Q of a data type a compact if its universal quantification functional ∀Q : (a → S) → S defined by ∀Q (p) = T iff p(x) = T for all x ∈ Q is continuous. A subset of the space of natural numbers is compact if and only if it is finite, for otherwise we would be able to solve the halting problem. A subspace O of a data type a is called overt if its existential quantification functional ∃O : (a → S) → S defined by ∃O (p) = T iff p(x) = T for some x ∈ O is continuous. For example, any overt set of natural numbers is r.e., as shown in Proposition 3.13