type: definition
verification: machine_ready
dependencies: ["D1-1-formal.md", "D1-4-formal.md"]
verification_points:
- read_function
- compute_function
- update_function
- measurement_effect
Observer(S : SelfReferentialComplete) : Prop ≡
∃O = (S_O, A_O, M_O) .
S_O ⊆ S ∧
ReadFunction(O) ∧
ComputeFunction(O) ∧
UpdateFunction(O) ∧
InternalObserver(O)
ReadFunction(O : Observer) : Prop ≡
∃read : S → I_O .
Distinguishing(read) ∧
Complete(read) ∧
SelfReferential(read)
where
Distinguishing(read) := ∀s₁, s₂ ∈ S . s₁ ≠ s₂ → read(s₁) ≠ read(s₂)
Complete(read) := read(S) = I_O
SelfReferential(read) := O ∈ S → read(O) ∈ I_O
ComputeFunction(O : Observer) : Prop ≡
∃compute : I_O → D_O .
Deterministic(compute) ∧
Consistent(compute) ∧
Recursive(compute)
where
Deterministic(compute) := ∀i ∈ I_O . ∃!d ∈ D_O . compute(i) = d
Consistent(compute) := ∀s₁, s₂ . compute(read(s₁)) = compute(read(s₂)) ⟺ s₁ ~ s₂
Recursive(compute) := ∀i . compute(read(compute(i))) is well-defined
UpdateFunction(O : Observer) : Prop ≡
∃update : S × D_O → S .
StateChange(update) ∧
DeterministicEvolution(update) ∧
EntropyIncrease(update)
where
StateChange(update) := ∀s ∈ S, d ∈ D_O . update(s, d) ≠ s
DeterministicEvolution(update) := ∀s . update(s, compute(read(s))) is unique
EntropyIncrease(update) := ∀s, d . H(update(s, d)) > H(s)
InternalObserver(O : Observer) : Prop ≡
O ⊆ S ∧
SelfDescribing(O) ∧
RecursiveClosure(O)
where
SelfDescribing(O) := ∃self_desc ∈ D_O . self_desc = compute(read(O))
RecursiveClosure(O) := read ∘ update ∘ compute ∘ read : S → I_O
Measurement(O : Observer) : Type ≡
measure : S × O → R × S
satisfying:
UniqueResult(measure) ∧
Irreversible(measure) ∧
BackAction(measure)
where
UniqueResult(measure) := ∀s, o . ∃!r, s' . measure(s, o) = (r, s')
Irreversible(measure) := ∀s, o, s' . measure(s, o) = (_, s') → ¬∃f . f(s') = s
BackAction(measure) := ∀s, o, s' . measure(s, o) = (_, s') → s' = update(s, compute(read(s)))
Type ObserverState := Set[Element]
Type ActionSet := Set[Action]
Type MeasurementSet := Set[Measurement]
Type InformationSpace := Set[Information]
Type DecisionSpace := Set[Decision]
Type ResultSpace := Set[Result]
ObserverType := Enum {
Complete, // read : S → S
Partial, // read : S → Projection(S)
Recursive // read(read(s)) is well-defined
}
def verify_read_function(observer, system):
return (
can_distinguish_states(observer.read, system) and
covers_information_space(observer.read, system) and
can_read_self(observer.read, observer)
)
def verify_compute_function(observer):
return (
is_deterministic(observer.compute) and
is_consistent(observer.compute, observer.read) and
supports_recursion(observer.compute, observer.read)
)
def verify_update_function(observer, system):
return (
always_changes_state(observer.update) and
evolution_is_deterministic(observer.update) and
entropy_increases(observer.update)
)
def verify_measurement_effect(observer, system):
return (
measurement_produces_unique_result(observer.measure) and
measurement_is_irreversible(observer.measure) and
measurement_has_backaction(observer.measure)
)