Documentation

DescriptiveComplexity.Problems.Wide.IxAddr

The address a file's marks stand for #

A program that seeks to a computed address holds that address on its file, one bit per register, and holds the address under its head there too – the mirror. At the elementwise file that is nothing to say: a register is an element, a mark on the registers is an address. At a coarser file it is something to say, and this file says it.

DescriptiveComplexity.ixAddr is the address a mark on the index stands for – each register carries the bit of one element (elt) – and DescriptiveComplexity.ixMark is the mark a file keeps of an address, its bits at the registers. The two are inverse on the addresses a file can hold (DescriptiveComplexity.IxHolds), and what makes the correspondence useful is that it carries the order, under three conditions:

For a clocked program's file all three hold of the argument registers, because the argument tags are the last ones (DescriptiveComplexity.Draw.lt_arg) and therefore the least significant: the addresses over them are the logical ones.

def DescriptiveComplexity.ixAddr {A I : Type} (elt : I → A) (m : I → Prop) :
A → Prop

The address a mark on a file's index stands for: the elements whose register is marked.

Equations
Instances For
    Dependency graph
    def DescriptiveComplexity.ixMark {A I : Type} (elt : I → A) (s : A → Prop) :
    I → Prop

    The mark a file keeps of an address: its bits at the registers.

    Equations
    Instances For
      Dependency graph
      def DescriptiveComplexity.IxHolds {A I : Type} (elt : I → A) (Use : I → Prop) (s : A → Prop) :

      An address a file can hold: every element of it is one of the file's.

      Equations
      Instances For
        Dependency graph
        theorem DescriptiveComplexity.ixAddr_elt {A I : Type} {elt : I → A} (hinj : Function.Injective elt) (m : I → Prop) (u : I) :
        ixAddr elt m (elt u) ↔ m u
        Dependency graph
        theorem DescriptiveComplexity.ixAddr_ixMark {A I : Type} {elt : I → A} {Use : I → Prop} {s : A → Prop} (hs : IxHolds elt Use s) :
        ixAddr elt (ixMark elt s) = s

        A file's mark of an address stands for that address, when the file has a register for each of its elements.

        Dependency graph
        theorem DescriptiveComplexity.ixHolds_of_wmSetLe {A I : Type} {Le : A → A → Prop} {elt : I → A} {Use : I → Prop} (hup : ∀ (u : I) (x : A), Use u → WMLt Le (elt u) x → ∃ (u' : I), Use u' ∧ elt u' = x) (hLe : IsLinOrd Le) {s t : A → Prop} (hs : IxHolds elt Use t) (h : WMSetLe Le s t) :
        IxHolds elt Use s

        The addresses a file can hold are downward closed: below one of them, every element is either one the file already has a register for, or one above such an element – and above is where the file's elements are.

        Dependency graph
        theorem DescriptiveComplexity.wmSetLe_ixAddr {A I : Type} {ile : I → I → Prop} {Le : A → A → Prop} {elt : I → A} (hinj : Function.Injective elt) (hmono : ∀ (u u' : I), WMLt ile u u' ↔ WMLt Le (elt u) (elt u')) (m m' : I → Prop) :
        WMSetLe ile m m' ↔ WMSetLe Le (ixAddr elt m) (ixAddr elt m')

        Comparing marks is comparing the addresses they stand for.

        Dependency graph
        theorem DescriptiveComplexity.wmIncr_ixAddr {A I : Type} {ile : I → I → Prop} {Le : A → A → Prop} {elt : I → A} {Use : I → Prop} (hinj : Function.Injective elt) (hmono : ∀ (u u' : I), WMLt ile u u' ↔ WMLt Le (elt u) (elt u')) (hup : ∀ (u : I) (x : A), Use u → WMLt Le (elt u) x → ∃ (u' : I), Use u' ∧ elt u' = x) {m m' : I → Prop} (hm' : ∀ (u : I), m' u → Use u) (hi : WMIncr ile m m') :
        WMIncr Le (ixAddr elt m) (ixAddr elt m')

        An increment of the marks is an increment of the addresses, the same correspondence read the other way.

        Dependency graph