[Imprint][Data Privacy Statement][E-Mail]

Back to main index. View the specification. View theorem base summary, View theorem base listing, the used properties by spec, the dependency list, the symbol table,

Specification stut-mon-old
enrich
   mon-lim-filter-count-old

with
   functions 
       max∞ : (nat → bool) → natinf;
       leninv : stream(nat) → natinf;
      comment: length of the inverse of a stuttering stream.;
   
   predicates 
       stutf : stream(nat);
       mon≤ : stream(nat);
       mon< : stream(nat);
   
   variables 
       np : nat → bool;
       nσ : stream(nat);
       n : nat;
       nnf : nat → nat;
       nl : list(nat);
       nσf : nat → stream(nat);
       σf : nat → stream('a);
       nf : nat → nat;
       p : 'a → bool;
       n∞ : natinf;
   
   partial functions 
       min : stream(nat) × nat → nat with λ nσ, n. mon<(nσ);
      comment: defined for nonempty streams only.;
       inv : stream(nat) → stream(nat) with λ nσ. stutf(nσ);
      comment: inverse of a stuttering stream (strict monotonic).;
   
   
   axioms 
      maxinf-def: (max∞(np) = ∞ ⊃ (∀ n. ∃ n0. n < n0 ∧ np(n0)) ∨ (∀ n. ¬ np(n));(∃ n. np(max∞(np).n)) ∧ (∀ m. np(m) → ¬ max∞(np) < ⌜m⌝ ));
      comment: definition justified by theorem maxinf-skolemf;
      
      stutf-def: stutf(nσ) ↔ nσ ≠ [] ∧ nσ[0] = 0 ∧ (∀ n. ⌜n⌝  + ⌜1⌝  < # nσ → nσ[n + 1] = nσ[n] ∨ nσ[n + 1] = nσ[n] + 1);
      
      monle-def: mon≤(nσ) ↔ (∀ n. ⌜n⌝  + ⌜1⌝  < # nσ → nσ[n] ≤ nσ[n + 1]);
      
      monls-def: mon<(nσ) ↔ (∀ n. ⌜n⌝  + ⌜1⌝  < # nσ → nσ[n] < nσ[n + 1]);
      
      leninv-def: leninv(nσ) = max∞(λ n. n ≠ 0 → (∃ m. ⌜m⌝  < # nσ ∧ nσ[m] = n - 1 ∧ ¬(# nσ = ∞ ∧ (∀ m0. m < m0 → nσ[m0] = n - 1))));
      
      inv-def: 
        stutf(nσ)
      →   inv(nσ)
        = (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝  < # nσ ∧ nσ[n] = m).n⌝ ;⌜λ m. max∞(λ n. ⌜n⌝  < # nσ ∧ nσ[n] = m).n⌝  to leninv(nσ).n);
      
      min-def: 
        mon<(nσ)
      → (nσ = []
        ⊃ min(nσ, n) = 0
        ;(# nσ ≠ ∞ ∧ nσ[(# nσ).n - 1] < n
         ⊃ min(nσ, n) = (# nσ).n
         ;⌜min(nσ, n)⌝  < # nσ ∧ n ≤ nσ[min(nσ, n)] ∧ (∀ m. ⌜m⌝  < # nσ ∧ n ≤ nσ[m] → min(nσ, n) ≤ m)
         )
        );
      comment: Skolem function justified by theorems min-skolemf;
   
   
end enrich