Step
*
1
2
2
2
1
2
of Lemma
bag-parts_wf
1. T : Type
2. valueall-type(T)
3. eq : EqDecider(T)
4. n : ℕ
5. ∀n:ℕn. ∀bs:bag(T).  ((#(bs) ≤ n) 
⇒ (bag-parts(eq;bs) ∈ bag(bag(T) List+)))
6. bs : bag(T)@i
7. #(bs) ≤ n
8. BB : bag({p:bag(T) × bag(T)| ((fst(p)) + (snd(p))) = bs ∈ bag(T)} )@i
9. p1 : bag(T)
10. p2 : bag(T)
11. (p1 + p2) = bs ∈ bag(T)
12. (#(p1) + #(p2)) = #(bs) ∈ ℤ
13. ¬(p1 = {} ∈ bag(T))
⊢ if bag-null(p1) then {}
  if bag-null(p2) then {[p1]}
  else let parts ⟵ bag-parts(eq;p2)
       in bag-map(λL.[p1 / L];parts)
  fi  ∈ bag(bag(T) List+)
BY
{ (((InstHyp [⌜n - 1⌝;⌜p2⌝] 5⋅ THENM CallByValueReduce 0) THEN Auto)
   THEN (Decide ⌜#(p1) ≤ 0⌝⋅ THEN Auto)
   THEN (FLemma `bag-size-zero` [-1] THENA Auto)
   THEN D (-3)
   THEN HypSubst' (-1) 0
   THEN Auto) }
Latex:
Latex:
1.  T  :  Type
2.  valueall-type(T)
3.  eq  :  EqDecider(T)
4.  n  :  \mBbbN{}
5.  \mforall{}n:\mBbbN{}n.  \mforall{}bs:bag(T).    ((\#(bs)  \mleq{}  n)  {}\mRightarrow{}  (bag-parts(eq;bs)  \mmember{}  bag(bag(T)  List\msupplus{})))
6.  bs  :  bag(T)@i
7.  \#(bs)  \mleq{}  n
8.  BB  :  bag(\{p:bag(T)  \mtimes{}  bag(T)|  ((fst(p))  +  (snd(p)))  =  bs\}  )@i
9.  p1  :  bag(T)
10.  p2  :  bag(T)
11.  (p1  +  p2)  =  bs
12.  (\#(p1)  +  \#(p2))  =  \#(bs)
13.  \mneg{}(p1  =  \{\})
\mvdash{}  if  bag-null(p1)  then  \{\}
    if  bag-null(p2)  then  \{[p1]\}
    else  let  parts  \mleftarrow{}{}  bag-parts(eq;p2)
              in  bag-map(\mlambda{}L.[p1  /  L];parts)
    fi    \mmember{}  bag(bag(T)  List\msupplus{})
By
Latex:
(((InstHyp  [\mkleeneopen{}n  -  1\mkleeneclose{};\mkleeneopen{}p2\mkleeneclose{}]  5\mcdot{}  THENM  CallByValueReduce  0)  THEN  Auto)
  THEN  (Decide  \mkleeneopen{}\#(p1)  \mleq{}  0\mkleeneclose{}\mcdot{}  THEN  Auto)
  THEN  (FLemma  `bag-size-zero`  [-1]  THENA  Auto)
  THEN  D  (-3)
  THEN  HypSubst'  (-1)  0
  THEN  Auto)
Home
Index