SlideShare una empresa de Scribd logo
1 de 49
Descargar para leer sin conexión
Verified Stack-based
                         Genetic Programming
                         via Dependent Types
                               by Larry Diehl




Tuesday, July 19, 2011
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
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
Genetic Programming

                     • representation
                     • genetic operators
                     • evaluation function
                     • initialization procedure

Tuesday, July 19, 2011
“Forth” operations

                         word   consumes   produces
                         true       0          1
                          not       1          1
                         and        2          1




Tuesday, July 19, 2011
“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
append (ill)
                                    1
                                   and
                                   and
                             2    ≠ 3
                            not
                           true
                           true
                             0


Tuesday, July 19, 2011
append (ill)
                                    2
                                   and
                             2    ≠ 3
                            not
                           true
                           true
                             0



Tuesday, July 19, 2011
append (well)
                                  1
                                 and     1
                           2    = 2    and
                          not           not
                         true          true
                         true          true
                           0             0



Tuesday, July 19, 2011
split
                                   1
                           1      and
                         and       2 =     2
                          not             not
                         true            true
                         true            true
                           0               0



Tuesday, July 19, 2011
split
                                    1
                                  and
                           2       not
                         and      true
                          not       1 =     1
                         true             true
                         true               0
                           0


Tuesday, July 19, 2011
Agda Crash Course



Tuesday, July 19, 2011
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
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
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
_+_ : ℕ ! ℕ ! ℕ
                 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
Representation



Tuesday, July 19, 2011
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
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
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
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
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
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
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
Genetic Operators



Tuesday, July 19, 2011
crossover : {inp   out : ℕ}
                           (female male :   Term inp out)
                           (randF randM :   ℕ) !
                           Term inp out ×   Term inp out




Tuesday, July 19, 2011
bc : Term 2 1
                         bc = and ∷ []

                         ab : Term 0 2
                         ab = not ∷ true ∷ true ∷ []

                         ac : Term 0 1
                         ac = bc ++ ab




Tuesday, July 19, 2011
_++_ : ∀ {inp mid out} !
                    Term mid out !
                    Term inp mid !
                    Term inp out
                  [] ++ ys = ys
                  (x ∷ xs) ++ ys = x ∷ (xs ++ ys)




Tuesday, July 19, 2011
split
                                   1
                           1      and
                         and       2 =     2
                          not             not
                         true            true
                         true            true
                           0               0



Tuesday, July 19, 2011
ac : Term 0 1
                         ac = and ∷ not ∷ true ∷ true ∷ []

                         bc++ab : Split 2 ac
                         bc++ab = bc ++' ab




Tuesday, July 19, 2011
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
ac : Term 0 1
                         ac = and ∷ not ∷ true ∷ true ∷ []

                         bc++ab : Split 2 ac
                         bc++ab = proj₂ (split 1 ac)




Tuesday, July 19, 2011
ac : Term 0 1
                         ac = and ∷ not ∷ true ∷ true ∷ []

                         bc++ab : Σ ℕ λ mid ! Split mid ac
                         bc++ab = split 1 ac




Tuesday, July 19, 2011
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) ++' ys




Tuesday, July 19, 2011
Evaluation Function



Tuesday, July 19, 2011
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
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
score   : Term 0 1 !   ℕ
                         score   xs with eval   xs []
                         ... |   true ∷ [] =    0
                         ... |   false ∷ [] =   1

                         open Evolution score




Tuesday, July 19, 2011
Initialization Procedure



Tuesday, July 19, 2011
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
-- 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
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
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
Generalization



Tuesday, July 19, 2011
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
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
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
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
FIN
                 github.com/larrytheliquid/dtgp/tree/aaip11
                            questions?


Tuesday, July 19, 2011

Más contenido relacionado

Destacado

Destacado (7)

Reading writing purposes
Reading writing purposesReading writing purposes
Reading writing purposes
 
10 Best Practices For Successful Statement of Purpose Writing
10 Best Practices For Successful Statement of Purpose Writing10 Best Practices For Successful Statement of Purpose Writing
10 Best Practices For Successful Statement of Purpose Writing
 
Writing For A Purpose
Writing For A PurposeWriting For A Purpose
Writing For A Purpose
 
Authors purpose powerpoint - edmodo copy with audio
Authors purpose powerpoint - edmodo copy with audioAuthors purpose powerpoint - edmodo copy with audio
Authors purpose powerpoint - edmodo copy with audio
 
Purpose And Audience Powerpoint
Purpose And Audience PowerpointPurpose And Audience Powerpoint
Purpose And Audience Powerpoint
 
Author's purpose
Author's purposeAuthor's purpose
Author's purpose
 
Author’s Purpose
Author’s PurposeAuthor’s Purpose
Author’s Purpose
 

Último

Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 

Último (20)

Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
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
  • 12. Agda Crash Course 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
  • 26. crossover : {inp out : ℕ} (female male : Term inp out) (randF randM : ℕ) ! Term inp out × Term inp out Tuesday, July 19, 2011
  • 27. bc : Term 2 1 bc = and ∷ [] ab : Term 0 2 ab = not ∷ true ∷ true ∷ [] ac : Term 0 1 ac = bc ++ ab Tuesday, 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 0 Tuesday, July 19, 2011
  • 30. ac : Term 0 1 ac = and ∷ not ∷ true ∷ true ∷ [] bc++ab : Split 2 ac bc++ab = bc ++' ab Tuesday, 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 ac Tuesday, 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) ++' ys 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