Request-freeness is invariant under structural congruence to Runtime head communication advances or keeps the interface

TheoremRequest-freeness is invariant under structural congruence#✓fully proved

All canonical structural laws preserve absence of an exposed shared request.

theorem RequestFree.cong_iff {Γ : ServiceEnv} {p q : Proc} (h : Cong p q) :
    RequestFree Γ p ↔ RequestFree Γ q
Uses 10 · Used by 1

TheoremService templates are request-free#✓fully proved

Existing guarded templates have no exposed output/request.

theorem ServiceTemplate.request_free {Γ : ServiceEnv} {p : Proc} (h : ServiceTemplate Γ p) :
    RequestFree Γ p
Uses 5 · Used by 1

TheoremLifting preserves guarded frontiers#✓fully proved

Canonical lifting maps guards and existing idle templates literally.

theorem GuardedFrontier.lift {Γ : ServiceEnv} {p : Proc} (h : GuardedFrontier Γ p) (k : Nat) :
    GuardedFrontier Γ (liftProc k p)
Uses 8 · Used by 2

TheoremLifting preserves guarded normal forms#✓fully proved

Lifting preserves the actual unguarded private restriction tower.

theorem GuardedNormal.lift {Γ : ServiceEnv} {p : Proc} (h : GuardedNormal Γ p) (k : Nat) :
    GuardedNormal Γ (liftProc k p)
Uses 6 · Used by 1

TheoremParallel composition preserves guarded normal forms up to congruence#✓fully proved

All private restrictions on either component are extruded canonically; no process execution or ready pair is stored in the normal form.

theorem GuardedNormal.parallel {Γ : ServiceEnv} {p q : Proc} (hp : GuardedNormal Γ p)
    (hq : GuardedNormal Γ q) : ∃ r, Cong (.par p q) r ∧ GuardedNormal Γ r
Uses 8 · Used by 1

TheoremRuntime-typed processes are congruent to a guarded normal form#✓fully proved

ALL10 runtime rules derive a syntactic normal form internally. Replicas remain actual guarded templates; no recursive process is erased to finite typing.

theorem HasType.syntax_normal {n : Nat} {Γ : ServiceEnv} {Δ : Context} {p : Proc}
    (h : HasType n Γ Δ p) : ∃ q, Cong p q ∧ GuardedNormal Γ q
Uses 24 · Used by 1

TheoremGuarded normal form of a typed process keeps its typing#✓fully proved

Actual runtime normalization retains SAME Γ/n/Δ through the proved Cong invariance; this theorem supplies the frontier, never the GLOBAL caller.

theorem HasType.frontier_normal {n : Nat} {Γ : ServiceEnv} {Δ : Context} {p : Proc}
    (h : HasType n Γ Δ p) : ∃ q, Cong p q ∧ HasType n Γ Δ q ∧ GuardedNormal Γ q
Uses 8 · Used by 1

TheoremRequest-free runtime outputs have an active linear subject#✓fully proved

A request-free output has an ACTUAL active linear subject and GuardMin.

theorem HasType.linear_out_active {n : Nat} {Γ : ServiceEnv} {Δ : Context}
    {a b : Name} {p : Proc} (h : HasType n Γ Δ (.out a b p))
    (hf : RequestFree Γ (.out a b p)) :
    ∃ e c, e.name = a ∧ Δ.lookup e = some c ∧ c.protocol.unfold ≠ .done ∧ GuardMin Δ e c.rank
Uses 22 · Used by 3

TheoremRuntime inputs are active linear or have completed ownership#✓fully proved

Linear inputs expose active subjects; once-only shared accepts have only completed AMBIENT ownership and may wait quiescently.

theorem HasType.inp_active_or_completed {n : Nat} {Γ : ServiceEnv} {Δ : Context}
    {a : Name} {p : Proc} (h : HasType n Γ Δ (.inp a p)) :
    (∃ e c, e.name = a ∧ Δ.lookup e = some c ∧ c.protocol.unfold ≠ .done ∧
      GuardMin Δ e c.rank) ∨ Δ.Completed
Uses 21 · Used by 2

TheoremRequest-free completed runtime frontiers are service templates#✓fully proved

With no actual requests or active owned keys, typing derives ACTUAL idle service-template syntax, not merely an empty/completed interface.

theorem GuardedFrontier.completed_idle {n : Nat} {Γ : ServiceEnv} {Δ : Context} {p : Proc}
    (hf : GuardedFrontier Γ p) (ht : HasType n Γ Δ p) (hr : RequestFree Γ p)
    (hc : Δ.Completed) : ServiceTemplate Γ p
Uses 25 · Used by 1

TheoremMinimum active key is the subject of a runtime frontier leaf#✓fully proved

A minimum over ALL actual active owned keys exposes the EXACT linear subject of a real runtime leaf. Idle templates/accept ambient are completed; shared outputs are excluded only by the internally established request-free case.

theorem GuardedFrontier.expose_minimum {n : Nat} {Γ : ServiceEnv} {Δ : Context} {p : Proc}
    (hf : GuardedFrontier Γ p) (ht : HasType n Γ Δ p) (hr : RequestFree Γ p)
    {e : Key} {c : Capability} (he : Δ.lookup e = some c) (ha : c.protocol.unfold ≠ .done)
    (hmin : ∀ x v, Δ.lookup x = some v → v.protocol.unfold ≠ .done → c.rank ≤ v.rank) :
    ∃ Λ Θ g r, Δ = Λ ∪ Θ ∧ Finmap.Disjoint Λ Θ ∧ Λ.lookup e = some c ∧
      Cong p (.par g r) ∧ HasType n Γ Λ g ∧ HasType n Γ Θ r ∧
      ((∃ b t, g = .out e.name b t) ∨ (∃ t, g = .inp e.name t)) ∧ GuardedFrontier Γ r
Uses 25 · Used by 1

TheoremRuntime minimum guard leaf cannot own an equivalent dual peer#✓fully proved

The equal-rank semantic peer of a minimum active role cannot share its actual guard leaf. Opposite roles on the SAME physical name are distinct keys.

theorem minimum_peer_separate {n : Nat} {Γ : ServiceEnv} {Δ : Context} {g : Proc}
    {e : Key} {c d : Capability} (ht : HasType n Γ Δ g) (hr : RequestFree Γ g)
    (he : Δ.lookup e = some c) (ha : c.protocol.unfold ≠ .done)
    (hmin : ∀ x v, Δ.lookup x = some v → v.protocol.unfold ≠ .done → c.rank ≤ v.rank)
    (hs : (∃ b t, g = .out e.name b t) ∨ (∃ t, g = .inp e.name t))
    (hd : d.Equivalent c.dual) : Δ.lookup e.opposite ≠ some d
Uses 24 · Used by 1

TheoremNon-request-free frontier exposes a shared output up to congruence#✓fully proved

A non-request-free frontier yields an ACTUAL declared output leaf through canonical par rearrangement. Neither readiness nor a progress result is supplied.

theorem GuardedFrontier.expose_request {Γ : ServiceEnv} {p : Proc} (hf : GuardedFrontier Γ p)
    (hn : ¬ RequestFree Γ p) :
    ∃ s sig b c r, Γ.lookup s = some sig ∧ Cong p (.par (.out (.const s) b c) r)
Uses 9 · Used by 1

TheoremExposed shared requests step when declared services are available#✓fully proved

Any actual exposed request fires under the EXISTING all-declared-services availability qualifier, even with ZERO active owned keys or a DONE payload. The Step is constructed from actual offered input syntax, not stored in Available.

theorem GuardedFrontier.request_progress {Γ : ServiceEnv} {p : Proc} (hf : GuardedFrontier Γ p)
    (hn : ¬ RequestFree Γ p) (ha : Available Γ p) : ∃ q, PiCalculus.Step p q
Uses 13 · Used by 1

TheoremShared invocation and input worker preserve the combined interface#✓fully proved

A declared shared invocation and ANY typed input worker preserve their EXACT combined linear interface. The actual owned payload is substituted, not the advertised raw protocol; completed receiver annotations remain ambient.

theorem HasType.shared_head {n : Nat} {Γ : ServiceEnv} {Δ Θ : Context}
    {s : Nat} {sig : ServiceSignature} {b : Name} {p q : Proc}
    (hs : Γ.lookup s = some sig) (hd : Finmap.Disjoint Δ Θ)
    (hout : HasType n Γ Δ (.out (.const s) b p))
    (hin : HasType n Γ Θ (.inp (.const s) q)) :
    HasType n Γ (Δ ∪ Θ) (.par p (PiCalculus.subst q b))
Uses 25 · Used by 1

TheoremInversion of runtime input on a nonshared subject#✓fully proved

A nonshared input subject exposes a genuine linear passive or endpoint head. The shared accept alternative is excluded by actual subject nonalias.

theorem HasType.linear_input_inv {n : Nat} {Γ : ServiceEnv} {Δ : Context} {a : Name} {p : Proc}
    (h : HasType n Γ Δ (.inp a p))
    (hn : ∀ s sig, Γ.lookup s = some sig → a ≠ .const s) :
    ∃ e c, e.name = a ∧ Δ.lookup e = some c ∧
      ((∃ s, c.protocol.unfold = .recvName s ∧
          HasType (n + 1) Γ (Context.lift 0 (Δ.insert e ⟨c.rank, s⟩)) p) ∨
       ∃ r k t s, c.protocol.unfold = .recvEndpoint r k t s ∧
          HasType (n + 1) Γ
            ((Context.lift 0 (Δ.insert e ⟨c.rank, s⟩)).insert ⟨.var 0, r⟩ ⟨k, t⟩) p)
Uses 20 · Used by 3

TheoremSemantic advance preserves shared-linear separation#✓fully proved

Faithful semantic advancement preserves shared/linear separation by its actual owned-domain invariance, including every completed entry.

theorem Separated.advance {Γ : ServiceEnv} {Δ Ξ : Context}
    (h : Separated Γ Δ) (ha : Conversion.SemanticAdvance Δ Ξ) : Separated Γ Ξ
Uses 10 · Used by 1

TheoremPassive head communication preserves runtime typing#✓fully proved

At an INITIALLY compatible disjoint interface, a linear passive head retains both actual carrier codes and every runtime continuation guard at unchanged Γ.

theorem passive_head_preservation {n : Nat} {Γ : ServiceEnv} {Λ Θ : Context}
    {e : Key} {c : Capability} {s : Protocol} {b : Name} {p q : Proc}
    (hd : Finmap.Disjoint Λ Θ) (hsep : Separated Γ Λ) (hc : Λ.lookup e = some c)
    (hh : c.protocol.unfold = .sendName s) (hp : HasType n Γ (Λ.insert e ⟨c.rank, s⟩) p)
    (hq : HasType n Γ Θ (.inp e.name q)) (hb : b.ClosedAt n)
    (hco : Conversion.Compatible (Λ ∪ Θ)) :
    ∃ d u, Θ.lookup e.opposite = some d ∧ d.rank = c.rank ∧
      d.protocol.unfold = .recvName u ∧ u.TreeEquiv s.dual ∧
      HasType n Γ (((Λ ∪ Θ).insert e ⟨c.rank, s⟩).insert e.opposite ⟨d.rank, u⟩)
        (.par p (PiCalculus.subst q b))
Uses 28 · Used by 1

TheoremEndpoint head communication preserves runtime typing#✓fully proved

At an INITIALLY compatible split, linear endpoint communication transfers ACTUAL v and keeps the receiver's independent advertised payload/tail codes. The Γ-preserving runtime substitution retains all continuation priorities.

theorem endpoint_head_preservation {n k : Nat} {Γ : ServiceEnv} {Λ Θ : Context}
    {e f : Key} {c v : Capability} {t s : Protocol} {p q : Proc}
    (hd : Finmap.Disjoint Λ Θ) (hsep : Separated Γ Λ) (hc : Λ.lookup e = some c)
    (hh : c.protocol.unfold = .sendEndpoint f.role k t s)
    (hv : Λ.lookup f = some v) (hvt : v.Equivalent ⟨k, t⟩) (hne : e ≠ f)
    (hp : HasType n Γ ((Λ.erase f).insert e ⟨c.rank, s⟩) p)
    (hq : HasType n Γ Θ (.inp e.name q)) (hb : f.name.ClosedAt n)
    (hco : Conversion.Compatible (Λ ∪ Θ)) :
    ∃ d t' u, Θ.lookup e.opposite = some d ∧ d.rank = c.rank ∧
      d.protocol.unfold = .recvEndpoint f.role k t' u ∧ t'.TreeEquiv t ∧ u.TreeEquiv s.dual ∧
      HasType n Γ (((Λ ∪ Θ).insert e ⟨c.rank, s⟩).insert e.opposite ⟨d.rank, u⟩)
        (.par p (PiCalculus.subst q f.name))
Uses 30 · Used by 1

TheoremRuntime head communication advances or keeps the interface#✓fully proved

At an INITIALLY semantically compatible linear interface, actual runtime heads either advance the paired linear subjects faithfully or transfer on a shared service with the EXACT unchanged interface. Mixed shared/linear heads are excluded by source separation, not a finite-fragment erasure or supplied result field.

theorem HasType.head_advance {n : Nat} {Γ : ServiceEnv} {Δ : Context} {a b : Name} {p q : Proc}
    (h : HasType n Γ Δ (.par (.out a b p) (.inp a q))) (hco : Conversion.Compatible Δ) :
    ∃ Ξ, HasType n Γ Ξ (.par p (PiCalculus.subst q b)) ∧ Conversion.Compatible Ξ ∧
      (Ξ = Δ ∨ Conversion.SemanticAdvance Δ Ξ)
Uses 33 · Used by 1
20 fully proved

The dependency explorer needs JavaScript and its graph data.

Download the complete graph data.