Your SlideShare is downloading. ×
0
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
DTGP AAIP11
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

DTGP AAIP11

294

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
294
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  1. Verified Stack-based Genetic Programming via Dependent Types by Larry DiehlTuesday, July 19, 2011
  2. Motivation • avoid searching space of stack under/ overflowing programs • use strongly typed genetic operators • avoid logic and runtime errors due to increasingly complex genetic operators • use a total and dependently typed languageTuesday, July 19, 2011
  3. Dependent Types • Agda programming language • purely functional (like Haskell) • total (coverage/termination/positivity) • types can encode any intuitionistic logic formula • e.g. proof theory judgement “Even 6”Tuesday, July 19, 2011
  4. Genetic Programming • representation • genetic operators • evaluation function • initialization procedureTuesday, July 19, 2011
  5. “Forth” operations word consumes produces true 0 1 not 1 1 and 2 1Tuesday, July 19, 2011
  6. “Forth” terms 1→1 3→1 0→1 7→7 6→4 0→3 not and not and true not and not and true true trueTuesday, July 19, 2011
  7. append (ill) 1 and and 2 ≠ 3 not true true 0Tuesday, July 19, 2011
  8. append (ill) 2 and 2 ≠ 3 not true true 0Tuesday, July 19, 2011
  9. append (well) 1 and 1 2 = 2 and not not true true true true 0 0Tuesday, July 19, 2011
  10. split 1 1 and and 2 = 2 not not true true true true 0 0Tuesday, July 19, 2011
  11. split 1 and 2 not and true not 1 = 1 true true true 0 0Tuesday, July 19, 2011
  12. Agda Crash CourseTuesday, July 19, 2011
  13. data Bool : Set where true false : Bool data ℕ : Set where zero : ℕ suc : ℕ ! ℕ one : ℕ one = suc zero two : ℕ two = suc one three : ℕ three = suc twoTuesday, July 19, 2011
  14. data List (A : Set) : Set where [] : List A _∷_ : A ! List A ! List A false∷[] : List Bool false∷[] = false ∷ [] true∷false∷[] : List Bool true∷false∷[] = true ∷ false∷[]Tuesday, July 19, 2011
  15. data Vec (A : Set) : ℕ ! Set where [] : Vec A zero _∷_ : {n : ℕ} ! A ! Vec A n ! Vec A (suc n) false∷[]1 : Vec Bool one false∷[]1 = false ∷ [] true∷false∷[]2 : Vec Bool two true∷false∷[]2 = true ∷ false∷[]1Tuesday, July 19, 2011
  16. _+_ : ℕ ! ℕ ! ℕ zero + n = n suc m + n = suc (m + n) _++_ : {A : Set} {m n : ℕ} ! Vec A m ! Vec A n ! Vec A (m + n) [] ++ ys = ys (x ∷ xs) ++ ys = x ∷ (xs ++ ys) true∷false∷true∷[]3 : Vec Bool three true∷false∷true∷[]3 = (true ∷ false ∷ []) ++ (true ∷ [])Tuesday, July 19, 2011
  17. RepresentationTuesday, July 19, 2011
  18. data Word : Set where true not and : Word data List (A : Set) : Set where [] : List A _∷_ : A ! List A ! List A Term = List WordTuesday, July 19, 2011
  19. bc : Term -- 2 1 bc = and ∷ [] ab : Term -- 0 2 ab = not ∷ true ∷ true ∷ [] ac : Term -- 0 1 ac = and ∷ not ∷ true ∷ true ∷ []Tuesday, July 19, 2011
  20. bc : Term 2 1 bc = and [] ab : Term 0 2 ab = not (true (true [])) ac : Term 0 1 ac = and (not (true (true [])))Tuesday, July 19, 2011
  21. data Term (inp : ℕ) : ℕ ! Set where [] : Term inp inp true : {out : ℕ} ! Term inp out ! Term inp (1 + out) not : {out : ℕ} ! Term inp (1 + out) ! Term inp (1 + out) and : {out : ℕ} ! Term inp (2 + out) ! Term inp (1 + out)Tuesday, July 19, 2011
  22. module DTGP {Word : Set} (pre post : Word ! ℕ ! ℕ) where data Term (inp : ℕ) : ℕ ! Set where [] : Term inp inp _∷_ : ∀ {n} (w : Word) ! Term inp (pre w n) ! Term inp (post w n)Tuesday, July 19, 2011
  23. data Word : Set where true not and : Word pre : Word ! ℕ ! ℕ pre true n = n pre not n = 1 + n pre and n = 2 + n post : Word ! ℕ ! ℕ post true n = 1 + n post not n = 1 + n post and n = 1 + n open import DTGP pre postTuesday, July 19, 2011
  24. bc : Term 2 1 bc = and ∷ [] ab : Term 0 2 ab = not ∷ true ∷ true ∷ [] ac : Term 0 1 ac = and ∷ not ∷ true ∷ true ∷ []Tuesday, July 19, 2011
  25. Genetic OperatorsTuesday, July 19, 2011
  26. crossover : {inp out : ℕ} (female male : Term inp out) (randF randM : ℕ) ! Term inp out × Term inp outTuesday, July 19, 2011
  27. bc : Term 2 1 bc = and ∷ [] ab : Term 0 2 ab = not ∷ true ∷ true ∷ [] ac : Term 0 1 ac = bc ++ abTuesday, July 19, 2011
  28. _++_ : ∀ {inp mid out} ! Term mid out ! Term inp mid ! Term inp out [] ++ ys = ys (x ∷ xs) ++ ys = x ∷ (xs ++ ys)Tuesday, July 19, 2011
  29. split 1 1 and and 2 = 2 not not true true true true 0 0Tuesday, July 19, 2011
  30. ac : Term 0 1 ac = and ∷ not ∷ true ∷ true ∷ [] bc++ab : Split 2 ac bc++ab = bc ++ abTuesday, July 19, 2011
  31. data Split {inp out} mid : Term inp out ! Set where _++_ : (xs : Term mid out) (ys : Term inp mid) ! Split mid (xs ++ ys)Tuesday, July 19, 2011
  32. ac : Term 0 1 ac = and ∷ not ∷ true ∷ true ∷ [] bc++ab : Split 2 ac bc++ab = proj₂ (split 1 ac)Tuesday, July 19, 2011
  33. ac : Term 0 1 ac = and ∷ not ∷ true ∷ true ∷ [] bc++ab : Σ ℕ λ mid ! Split mid ac bc++ab = split 1 acTuesday, July 19, 2011
  34. split : ∀ {inp out} (n : ℕ) (xs : Term inp out) ! Σ ℕ λ mid ! Split mid xs split zero xs = _ , [] ++ xs split (suc n) [] = _ , [] ++ [] split (suc n) (x ∷ xs) with split n xs split (suc n) (x ∷ .(xs ++ ys)) | _ , xs ++ ys = _ , (x ∷ xs) ++ ysTuesday, July 19, 2011
  35. Evaluation FunctionTuesday, July 19, 2011
  36. bc : Term 2 1 bc = and ∷ [] eval-bc : Vec Bool 1 eval-bc = eval bc (true ∷ false ∷ []) ac : Term 0 1 ac = and ∷ not ∷ true ∷ true ∷ [] eval-ac : Vec Bool 1 eval-ac = eval ac []Tuesday, July 19, 2011
  37. eval : {inp out : ℕ} ! Term inp out ! Vec Bool inp ! Vec Bool out eval [] is = is eval (true ∷ xs) is = true ∷ eval xs is eval (not ∷ xs) is with eval xs is ... | o ∷ os = ¬ o ∷ os eval (and ∷ xs) is with eval xs is ... | o₂ ∷ o₁ ∷ os = (o₁ ∧ o₂) ∷ osTuesday, July 19, 2011
  38. score : Term 0 1 ! ℕ score xs with eval xs [] ... | true ∷ [] = 0 ... | false ∷ [] = 1 open Evolution scoreTuesday, July 19, 2011
  39. Initialization ProcedureTuesday, July 19, 2011
  40. choices : List Word choices = true ∷ not ∷ and ∷ [] population : List (Term 0 1) population = init 2 0 1 choices -- (and ∷ true ∷ true ∷ []) ∷ -- (not ∷ not ∷ true ∷ []) ∷ -- (not ∷ true ∷ []) ∷ -- (true ∷ []) ∷ -- []Tuesday, July 19, 2011
  41. -- data Term (inp : ℕ) : ℕ ! Set where -- _∷_ : ∀ {n} (w : Word) ! -- Term inp (pre w n) ! -- Term inp (post w n) -- pre : Word ! ℕ ! ℕ -- pre and n = 2 + n true∷true : Term 0 2 true∷true = true ∷ true ∷ [] and∷and∷true : Term 0 1 and∷and∷true = _∷_ {n = 0} and true∷trueTuesday, July 19, 2011
  42. match : (w : Word) (out : ℕ) ! Dec (Σ ℕ λ n ! out ≡ pre w n) match true n = yes (n , refl) match not zero = no ¬p where ¬p : Σ ℕ (λ n ! 0 ≡ suc n) ! ⊥ ¬p (_ , ()) match not (suc n) = yes (n , refl)Tuesday, July 19, 2011
  43. match and zero = no ¬p where ¬p : Σ ℕ (λ n ! 0 ≡ suc (suc n)) ! ⊥ ¬p (_ , ()) match and (suc zero) = no ¬p where ¬p : Σ ℕ (λ n ! 1 ≡ suc (suc n)) ! ⊥ ¬p (_ , ()) match and (suc (suc n)) = yes (n , refl) open Initialization matchTuesday, July 19, 2011
  44. GeneralizationTuesday, July 19, 2011
  45. module DTGP {Domain Word : Set} (pre post : Word ! Domain ! Domain) (_≟_ : (x y : Domain) ! Dec (x ≡ y)) where data Term (inp : Domain) : Domain ! Set where [] : Term inp inp _∷_ : ∀ {d} (w : Word) ! Term inp (pre w d) ! Term inp (post w d)Tuesday, July 19, 2011
  46. data Word : Set where not gt : Word num : ℕ ! Word record Domain : Set where constructor _,_ field bools : ℕ nats : ℕ postulate _≟_ : (x y : Domain) ! Dec (x ≡ y)Tuesday, July 19, 2011
  47. pre : Word ! Domain ! Domain pre not (m , n) = 1 + m , n pre (num _) (m , n) = m , n pre gt (m , n) = m , 2 + n post : Word ! Domain ! Domain post not (m , n) = 1 + m , n post (num _) (m , n) = m , 1 + n post gt (m , n) = 1 + m , n open DTGP pre post _≟_Tuesday, July 19, 2011
  48. bc : Term (0 , 2) (1 , 0) bc = not ∷ gt ∷ [] ab : Term (0 , 0) (0 , 2) ab = num 3 ∷ num 5 ∷ [] ac : Term (0 , 0) (1 , 0) ac = bc ++ abTuesday, July 19, 2011
  49. FIN github.com/larrytheliquid/dtgp/tree/aaip11 questions?Tuesday, July 19, 2011

×