Structural approximations #
In this file, we define structural approximations, which are trees of base approximations.
Main declarations #
ConNF.StrApprox
: The type of structural approximations.ConNF.InflexiblePath
: A pair of paths starting atβ
that describe a particular way to use afuzz
map.ConNF.Inflexible
: A litter is said to be inflexible along a path if it can be obtained by applying afuzz
map along this path.
@[reducible, inline]
Equations
Instances For
def
ConNF.StrApprox.upperBound
[Params]
{β : TypeIndex}
(c : Set (StrApprox β))
(hc : IsChain (fun (x1 x2 : StrApprox β) => x1 ≤ x2) c)
:
An upper bound for a chain of approximations.
Equations
- ConNF.StrApprox.upperBound c hc A = ConNF.BaseApprox.upperBound ((fun (x : ConNF.StrApprox β) => x A) '' c) ⋯
Instances For
TODO: Many of the previous lemmas are not actually needed!
theorem
ConNF.StrApprox.coherentAt_mono
[Params]
{β : TypeIndex}
[Level]
[CoherentData]
[LeLevel β]
{ψ χ : StrApprox β}
{A : β ↝ ⊥}
{L₁ L₂ : Litter}
(h : CoherentAt ψ A L₁ L₂)
(hψχ : ψ ≤ χ)
:
CoherentAt χ A L₁ L₂
def
ConNF.StrApprox.Coherent
[Params]
{β : TypeIndex}
[Level]
[CoherentData]
[LeLevel β]
(ψ : StrApprox β)
:
Equations
- ψ.Coherent = ∀ (A : β ↝ ⊥) (L₁ L₂ : ConNF.Litter), (ψ A)ᴸ L₁ L₂ → ConNF.CoherentAt ψ A L₁ L₂
Instances For
theorem
ConNF.StrApprox.addOrbit_coherent
[Params]
{β : TypeIndex}
[Level]
[CoherentData]
[LeLevel β]
{ψ : StrApprox β}
{A : β ↝ ⊥}
{f : ℤ → Litter}
{hf : ∀ (m n k : ℤ), f m = f n → f (m + k) = f (n + k)}
{hfψ : ∀ (n : ℤ), f n ∉ (ψ A)ᴸ.dom}
(hψ : ψ.Coherent)
(hfc : ∀ (n : ℤ), CoherentAt ψ A (f n) (f (n + 1)))
:
theorem
ConNF.StrApprox.upperBound_coherent
[Params]
{β : TypeIndex}
[Level]
[CoherentData]
[LeLevel β]
(c : Set (StrApprox β))
(hc₁ : IsChain (fun (x1 x2 : StrApprox β) => x1 ≤ x2) c)
(hc₂ : ∀ ψ ∈ c, ψ.Coherent)
:
(upperBound c hc₁).Coherent