#!/usr/bin/env python3

import pyactr as actr


Model = actr.ACTRModel()
actr.chunktype("countOrder", ("first", "second"))
actr.chunktype("add", ("arg1", "arg2", "sum", "count"))

dm = Model.decmem

for i in range(0, 11):
    dm.add(actr.makechunk("chunk" + str(i), "countOrder", first=i, second=i + 1))

Model.goal.add(actr.makechunk("", "add", arg1=5, arg2=2))

Model.productionstring(
    name="init_addition",
    string="""
    =g>
    isa     add
    arg1    =num1
    arg2    =num2
    sum     None
    ==>
    =g>
    isa     add
    sum     =num1
    count   0
    +retrieval>
    isa     countOrder
    first   =num1
""",
)

Model.productionstring(
    name="terminate_addition",
    string="""
        =g>
        isa     add
        count   =num
        arg2    =num
        sum     =answer
        ==>
        ~g>""",
)

Model.productionstring(
    name="increment_count",
    string="""
        =g>
        isa     add
        count   =count
        sum     =sum
        =retrieval>
        isa     countOrder
        first   =count
        second  =newcount
        ==>
        =g>
        isa     add
        count   =newcount
        +retrieval>
        isa     countOrder
        first   =sum""",
)

Model.productionstring(
    name="increment_sum",
    string="""
        =g>
        isa     add
        count   =count
        arg2    ~=count
        sum     =sum
        =retrieval>
        isa     countOrder
        first   =sum
        second  =newsum
        ==>
        =g>
        isa     add
        sum     =newsum
        +retrieval>
        isa     countOrder
        first   =count""",
)

if __name__ == "__main__":
    x = Model.simulation()
    x.run()