Step
*
1
of Lemma
sub-bag-map-equal
1. T : Type
2. U : Type
3. b2 : T List
4. f : T ⟶ U
5. c1 : U List
6. cs : T List
7. map(f;b2) = ((map(f;b2) @ map(f;cs)) @ c1) ∈ bag(U)
⊢ cs = [] ∈ bag(T)
BY
{ ((RWO "append_assoc" (-1) THENA Auto)
   THEN (Assert ⌜(map(f;b2) + []) = (map(f;b2) + (map(f;cs) @ c1)) ∈ bag(U)⌝⋅
         THENA (Try (Fold `empty-bag` 0) THEN RWO "bag-append-empty" 0 THEN Auto THEN Unfold `bag-append` 0 THEN Auto)
         )
   THEN (RWO "bag-append-cancel" (-1) THENA Auto)
   THEN Try (Fold `bag-append` (-1))
   THEN Try (Fold `empty-bag` (-1))
   THEN (InstLemma `bag-append-eq-empty` [⌜U⌝;⌜map(f;cs)⌝;⌜c1⌝]⋅ THENA Auto)
   THEN Auto
   THEN Try (Fold `empty-bag` 0)
   THEN Auto) }
1
1. T : Type
2. U : Type
3. b2 : T List
4. f : T ⟶ U
5. c1 : U List
6. cs : T List
7. map(f;b2) = (map(f;b2) @ map(f;cs) @ c1) ∈ bag(U)
8. {} = (map(f;cs) + c1) ∈ bag(U)
9. (map(f;cs) + c1) = {} ∈ bag(U) supposing (map(f;cs) = {} ∈ bag(U)) ∧ (c1 = {} ∈ bag(U))
10. map(f;cs) = {} ∈ bag(U)
11. c1 = {} ∈ bag(U)
⊢ cs = {} ∈ bag(T)
Latex:
Latex:
1.  T  :  Type
2.  U  :  Type
3.  b2  :  T  List
4.  f  :  T  {}\mrightarrow{}  U
5.  c1  :  U  List
6.  cs  :  T  List
7.  map(f;b2)  =  ((map(f;b2)  @  map(f;cs))  @  c1)
\mvdash{}  cs  =  []
By
Latex:
((RWO  "append\_assoc"  (-1)  THENA  Auto)
  THEN  (Assert  \mkleeneopen{}(map(f;b2)  +  [])  =  (map(f;b2)  +  (map(f;cs)  @  c1))\mkleeneclose{}\mcdot{}
              THENA  (Try  (Fold  `empty-bag`  0)
                            THEN  RWO  "bag-append-empty"  0
                            THEN  Auto
                            THEN  Unfold  `bag-append`  0
                            THEN  Auto)
              )
  THEN  (RWO  "bag-append-cancel"  (-1)  THENA  Auto)
  THEN  Try  (Fold  `bag-append`  (-1))
  THEN  Try  (Fold  `empty-bag`  (-1))
  THEN  (InstLemma  `bag-append-eq-empty`  [\mkleeneopen{}U\mkleeneclose{};\mkleeneopen{}map(f;cs)\mkleeneclose{};\mkleeneopen{}c1\mkleeneclose{}]\mcdot{}  THENA  Auto)
  THEN  Auto
  THEN  Try  (Fold  `empty-bag`  0)
  THEN  Auto)
Home
Index