Step * of Lemma cpsquicksort-quicksort

[T:Type]
  ∀[A:Type]. ∀[cmp:comparison(T)].  ∀L:T List. ∀[k:(T List) ⟶ A]. (cpsquicksort(cmp;L;k) quicksort(cmp;L)) 
  supposing valueall-type(T)
BY
(InductionOnLength
   THEN Auto
   THEN (RecUnfold `cpsquicksort` THEN RecUnfold `quicksort` 0)
   THEN OldAutoSplit
   THEN (Auto THENA (DVar `L' THEN Reduce THEN Auto THEN -1 THEN Auto))
   THEN RepeatFor ((CallByValueReduce THENA Auto))
   THEN RepeatFor (((GenConclAtAddr [1;1] THENA (Auto THEN Auto)) THEN RW (AddrC [1] UnfoldTopAbC) THEN Reduce 0))
   THEN (Assert ||filter(λz.0 <cmp v;L)|| < ||L|| ∧ ||filter(λz.0 <cmp z;L)|| < ||L|| BY
               (RevHypSubst' -7 0
                THEN Auto
                THEN ((BLemma `length-filter-decreases` THEN Auto THEN Reduce 0)
                      THEN (With ⌜0⌝ (D 0)⋅ THEN Reduce 0)
                      THEN Auto
                      THEN RWO "select0" 0
                      THEN Auto
                      THEN Subst' cmp hd(L) hd(L) 0
                      THEN Reduce 0
                      THEN Auto
                      THEN (InstLemma `comparison-equiv` [⌜T⌝;⌜cmp⌝]⋅ THENA Auto)
                      THEN -1
                      THEN Auto)⋅))) }

1
1. Type
2. valueall-type(T)
3. Type
4. cmp comparison(T)
5. : ℕ
6. List
7. ∀L1:T List. (||L1|| < ||L||  (∀[k:(T List) ⟶ A]. (cpsquicksort(cmp;L1;k) quicksort(cmp;L1))))
8. (T List) ⟶ A
9. ¬(L [] ∈ (T List))
10. T
11. hd(L) v ∈ T
12. v1 List
13. filter(λz.0 <cmp v;L) v1 ∈ (T List)
14. v2 List
15. filter(λz.(0 =z cmp z);L) v2 ∈ (T List)
16. v3 List
17. filter(λz.0 <cmp z;L) v3 ∈ (T List)
18. ||filter(λz.0 <cmp v;L)|| < ||L|| ∧ ||filter(λz.0 <cmp z;L)|| < ||L||
⊢ cpsquicksort(cmp;v1;λS1.cpsquicksort(cmp;v3;λS3.(k (S1 v2 S3)))) 
                                                                         let L3 ⟵ v2
                                                                         in quicksort(cmp;v1) L3 quicksort(cmp;v3)


Latex:


Latex:
\mforall{}[T:Type]
    \mforall{}[A:Type].  \mforall{}[cmp:comparison(T)].
        \mforall{}L:T  List.  \mforall{}[k:(T  List)  {}\mrightarrow{}  A].  (cpsquicksort(cmp;L;k)  \msim{}  k  quicksort(cmp;L)) 
    supposing  valueall-type(T)


By


Latex:
(InductionOnLength
  THEN  Auto
  THEN  (RecUnfold  `cpsquicksort`  0  THEN  RecUnfold  `quicksort`  0)
  THEN  OldAutoSplit
  THEN  (Auto  THENA  (DVar  `L'  THEN  Reduce  0  THEN  Auto  THEN  D  -1  THEN  Auto))
  THEN  RepeatFor  3  ((CallByValueReduce  0  THENA  Auto))
  THEN  RepeatFor  4  (((GenConclAtAddr  [1;1]  THENA  (Auto  THEN  Auto))
                                        THEN  RW  (AddrC  [1]  UnfoldTopAbC)  0
                                        THEN  Reduce  0))
  THEN  (Assert  ||filter(\mlambda{}z.0  <z  cmp  z  v;L)||  <  ||L||  \mwedge{}  ||filter(\mlambda{}z.0  <z  cmp  v  z;L)||  <  ||L||  BY
                          (RevHypSubst'  -7  0
                            THEN  Auto
                            THEN  ((BLemma  `length-filter-decreases`  THEN  Auto  THEN  Reduce  0)
                                        THEN  (With  \mkleeneopen{}0\mkleeneclose{}  (D  0)\mcdot{}  THEN  Reduce  0)
                                        THEN  Auto
                                        THEN  RWO  "select0"  0
                                        THEN  Auto
                                        THEN  Subst'  cmp  hd(L)  hd(L)  \msim{}  0  0
                                        THEN  Reduce  0
                                        THEN  Auto
                                        THEN  (InstLemma  `comparison-equiv`  [\mkleeneopen{}T\mkleeneclose{};\mkleeneopen{}cmp\mkleeneclose{}]\mcdot{}  THENA  Auto)
                                        THEN  D  -1
                                        THEN  Auto)\mcdot{})))




Home Index