{ [size:]. [A:Type]. [num:A  ]. [P:A  ].
    (collectfilteracc2(size;x.num[x];v.P[v])
    = collect_accum(x.num[x];<0
      , tt
      >;p,v.let n,ok = p 
            in <n + 1, ok  P[v]>;p.(fst(p) = size) ((snd(p))))) }

{ Proof }



Definitions occuring in Statement :  collectfilteracc2: collectfilteracc2(size;v1.num[v1];v2.P[v2]) collect_accum: collect_accum(x.num[x];init;a,v.f[a; v];a.P[a]) isl: isl(x) eq_int: (i = j) bor: p q band: p  q bnot: b assert: b btrue: tt bool: nat_plus: nat: uall: [x:A]. B[x] top: Top so_apply: x[s] pi1: fst(t) pi2: snd(t) le: A  B implies: P  Q and: P  Q set: {x:A| B[x]}  function: x:A  B[x] spread: spread def pair: <a, b> product: x:A  B[x] union: left + right add: n + m natural_number: $n int: universe: Type equal: s = t
Definitions :  uall: [x:A]. B[x] top: Top and: P  Q assert: b pi2: snd(t) pi1: fst(t) implies: P  Q isl: isl(x) collectfilteracc2: collectfilteracc2(size;v1.num[v1];v2.P[v2]) so_apply: x[s] collect_accum: collect_accum(x.num[x];init;a,v.f[a; v];a.P[a]) btrue: tt band: p  q bor: p q bnot: b member: t  T spreadn: spread3 ifthenelse: if b then t else f fi  bfalse: ff prop: so_lambda: x.t[x] all: x:A. B[x] subtype: S  T has-value: has-value(a) true: True nat_plus: nat: bool: cand: A c B unit: Unit iff: P  Q false: False uimplies: b supposing a it: not: A
Lemmas :  nat_wf bool_wf top_wf assert_wf pi2_wf pi1_wf_top isl_wf le_wf nat_plus_wf rational-has-value int-rational nat_properties int_inc lt_int_wf iff_weakening_uiff uiff_transitivity eqtt_to_assert assert_of_lt_int false_wf le_int_wf bnot_wf eqff_to_assert assert_functionality_wrt_uiff bnot_of_lt_int assert_of_le_int eq_int_wf assert_of_eq_int btrue_wf true_wf not_wf assert_of_bnot not_functionality_wrt_uiff btrue_neq_bfalse bfalse_wf not_assert_elim assert_elim

\mforall{}[size:\mBbbN{}\msupplus{}].  \mforall{}[A:Type].  \mforall{}[num:A  {}\mrightarrow{}  \mBbbN{}].  \mforall{}[P:A  {}\mrightarrow{}  \mBbbB{}].
    (collectfilteracc2(size;x.num[x];v.P[v])
    =  collect\_accum(x.num[x];ɘ,  tt>p,v.let  n,ok  =  p 
                                                                              in  <n  +  1,  ok  \mwedge{}\msubb{}  P[v]>p.(fst(p)  =\msubz{}  size)  \mvee{}\msubb{}(\mneg{}\msubb{}(snd(p)))))


Date html generated: 2011_08_16-PM-05_29_19
Last ObjectModification: 2011_06_20-AM-01_24_48

Home Index