WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
DTGP AAIP11
1. Verified Stack-based
Genetic Programming
via Dependent Types
by Larry Diehl
Tuesday, 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
language
Tuesday, 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 procedure
Tuesday, July 19, 2011
5. “Forth” operations
word consumes produces
true 0 1
not 1 1
and 2 1
Tuesday, 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 true
Tuesday, July 19, 2011
7. append (ill)
1
and
and
2 ≠ 3
not
true
true
0
Tuesday, July 19, 2011
8. append (ill)
2
and
2 ≠ 3
not
true
true
0
Tuesday, July 19, 2011
9. append (well)
1
and 1
2 = 2 and
not not
true true
true true
0 0
Tuesday, July 19, 2011
10. split
1
1 and
and 2 = 2
not not
true true
true true
0 0
Tuesday, July 19, 2011
11. split
1
and
2 not
and true
not 1 = 1
true true
true 0
0
Tuesday, 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 two
Tuesday, 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∷[]1
Tuesday, 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
18. data Word : Set where
true not and : Word
data List (A : Set) : Set where
[] : List A
_∷_ : A ! List A ! List A
Term = List Word
Tuesday, 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 post
Tuesday, 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
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₂) ∷ os
Tuesday, July 19, 2011
38. score : Term 0 1 ! ℕ
score xs with eval xs []
... | true ∷ [] = 0
... | false ∷ [] = 1
open Evolution score
Tuesday, 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∷true
Tuesday, 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 match
Tuesday, 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 ++ ab
Tuesday, July 19, 2011
49. FIN
github.com/larrytheliquid/dtgp/tree/aaip11
questions?
Tuesday, July 19, 2011