PasteRack.org
Paste # 96981
2019-02-17 09:58:59

Fork as a new paste.

Paste viewed 78 times.


Embed:

quickSort doesn't work in pie

#lang pie

;; append
(claim step-append
  (Pi ((E U))
    (-> E (List E) (List E)
        (List E))))
(define step-append
  (lambda (E )
    (lambda (e es append_es )
      (:: e append_es))))

(claim append
  (Pi ((E U) )
    (-> (List E) (List E) 
        (List E))))
(define append
  (lambda (E )
    (lambda (start end )
      (rec-List start
        end
        (step-append E)))))

;; filter
(claim step-filter
  (-> (-> Nat Nat)
      Nat (List Nat) (List Nat)
      (List Nat)))
(define step-filter
  (lambda (pred)
    (lambda (h _ filtered)
      (rec-Nat (pred h)
        filtered
        (lambda (n-1 _)
          (:: h filtered))))))

(claim filter
  (-> (-> Nat Nat) (List Nat)
      (List Nat)))

(define filter
  (lambda (pred es)
    (rec-List es
      (the (List Nat) nil)
      (step-filter pred))))

;; <=?
(claim zero<=?
  (-> Nat Nat))
(define zero<=?
  (lambda (j)
      1))

(claim step-<=?
  (-> Nat (-> Nat Nat)
      (-> Nat Nat)))
(define step-<=?
  (lambda (n-1 n-1<=?)
    (lambda (j)
      (rec-Nat j
        0
        (lambda (j-1 almost_j-1)
          (n-1<=? j-1))))))


(claim <=? (-> Nat Nat Nat))
(define <=?
  (lambda (n j)
    ((rec-Nat n
      zero<=?
      step-<=?) j)))

;; >?
(claim zero>?
  (-> Nat Nat))
(define zero>?
  (lambda (j)
      0))

(claim step->?
  (-> Nat (-> Nat Nat)
      (-> Nat Nat)))
(define step->?
  (lambda (n-1 n-1>?)
    (lambda (j)
      (rec-Nat j
        1
        (lambda (j-1 almost_j-1)
          (n-1>? j-1))))))

(claim >? (-> Nat Nat Nat))
(define >?
  (lambda (n j)
    ((rec-Nat n
      zero>?
      step->?) j)))

;; quickSort :: Ord a => [a] -> [a]
;; quickSort [] = []
;; quickSort [x:xs] = quickSort min ++ [x] quickSort max
;;         where
;;             min = filter (<x) xs
;;             max = filter (>=x) xs
(claim step-quickSort
  (-> Nat (List Nat) (List Nat) (List Nat)))
(define step-quickSort
  (lambda (x xs sorted_es) ;; sorted_es not a n-1 list! depend on mini max!
    TODO))

(claim quickSort
  (-> (List Nat) (List Nat)))
(define quickSort
  (lambda (list)
    (rec-List list
      (the (List Nat) nil)
      step-quickSort)))