Step
*
of Lemma
bag_remove1_aux_property
∀[T:Type]
  ∀eq:EqDecider(T). ∀x:T. ∀L,checked:T List.
    ((∃as,bs:T List
       ((L = ((as @ [x]) @ bs) ∈ (T List))
       ∧ (bag_remove1_aux(eq;checked;x;L) = (inl ((rev(as) @ checked) @ bs)) ∈ (T List?))))
    ∨ ((¬(x ∈ L)) ∧ (bag_remove1_aux(eq;checked;x;L) = (inr ⋅ ) ∈ (T List?))))
BY
{ ((InductionOnList THEN Auto) THEN RecUnfold `bag_remove1_aux` 0 THEN Reduce 0 THEN Try (AutoBoolCase ⌜eq u x⌝⋅)) }
1
1. [T] : Type
2. eq : EqDecider(T)
3. x : T
4. checked : T List
⊢ (∃as,bs:T List. (([] = ((as @ [x]) @ bs) ∈ (T List)) ∧ ((inr Ax ) = (inl ((rev(as) @ checked) @ bs)) ∈ (T List?))))
∨ ((¬(x ∈ [])) ∧ ((inr Ax ) = (inr ⋅ ) ∈ (T List?)))
2
1. [T] : Type
2. eq : EqDecider(T)
3. x : T
4. u : T
5. v : T List
6. ∀checked:T List
     ((∃as,bs:T List
        ((v = ((as @ [x]) @ bs) ∈ (T List))
        ∧ (bag_remove1_aux(eq;checked;x;v) = (inl ((rev(as) @ checked) @ bs)) ∈ (T List?))))
     ∨ ((¬(x ∈ v)) ∧ (bag_remove1_aux(eq;checked;x;v) = (inr ⋅ ) ∈ (T List?))))
7. checked : T List
8. u = x ∈ T
⊢ (∃as,bs:T List
    (([u / v] = ((as @ [x]) @ bs) ∈ (T List)) ∧ ((inl (checked @ v)) = (inl ((rev(as) @ checked) @ bs)) ∈ (T List?))))
∨ ((¬(x ∈ [u / v])) ∧ ((inl (checked @ v)) = (inr ⋅ ) ∈ (T List?)))
3
1. [T] : Type
2. eq : EqDecider(T)
3. x : T
4. u : T
5. ¬(u = x ∈ T)
6. v : T List
7. ∀checked:T List
     ((∃as,bs:T List
        ((v = ((as @ [x]) @ bs) ∈ (T List))
        ∧ (bag_remove1_aux(eq;checked;x;v) = (inl ((rev(as) @ checked) @ bs)) ∈ (T List?))))
     ∨ ((¬(x ∈ v)) ∧ (bag_remove1_aux(eq;checked;x;v) = (inr ⋅ ) ∈ (T List?))))
8. checked : T List
⊢ (∃as,bs:T List
    (([u / v] = ((as @ [x]) @ bs) ∈ (T List))
    ∧ (bag_remove1_aux(eq;[u / checked];x;v) = (inl ((rev(as) @ checked) @ bs)) ∈ (T List?))))
∨ ((¬(x ∈ [u / v])) ∧ (bag_remove1_aux(eq;[u / checked];x;v) = (inr ⋅ ) ∈ (T List?)))
Latex:
Latex:
\mforall{}[T:Type]
    \mforall{}eq:EqDecider(T).  \mforall{}x:T.  \mforall{}L,checked:T  List.
        ((\mexists{}as,bs:T  List
              ((L  =  ((as  @  [x])  @  bs))
              \mwedge{}  (bag\_remove1\_aux(eq;checked;x;L)  =  (inl  ((rev(as)  @  checked)  @  bs)))))
        \mvee{}  ((\mneg{}(x  \mmember{}  L))  \mwedge{}  (bag\_remove1\_aux(eq;checked;x;L)  =  (inr  \mcdot{}  ))))
By
Latex:
((InductionOnList  THEN  Auto)
  THEN  RecUnfold  `bag\_remove1\_aux`  0
  THEN  Reduce  0
  THEN  Try  (AutoBoolCase  \mkleeneopen{}eq  u  x\mkleeneclose{}\mcdot{}))
Home
Index