Моделирование IFTTT с использованием сплава - PullRequest
0 голосов
/ 08 апреля 2019

Я новичок в Alloy.Я хочу моделировать IFTTT из сплава.В IFTTT есть одно событие триггера и одно событие действия.Можно связать его различные онлайн-приложения друг с другом, используя IFTTT.Триггер - это причина события, а действие - результат триггера.Один триггер и одно действие объединяет рецепт.Итак, я начинаю с одного рецепта .Во-первых, я выбрал, когда человек выходит из зоны, Пайпер будет вооружаться.Пока что я написал следующий код.Но я не уверен, правильно это или нет.

abstract sig Service{
    name: String,
    statusList: some String,
    triggerList: some Trigger,
    actionList: some Action 
}

sig Account{
    email: String,
    userid: String
}

sig Location extends Service{
}{
    name = "Location Service"
    statusList = "inside home"
}

pred exitAnArea[location: Location, tr: Trigger]{
    location.statusList = "outside home" 
    tr.tri_attrib = "exit an area triggered"

}

sig Piper extends Service{
}{
    name = "Piper Service"
    statusList = "disarm"
}

pred armPiper[piper: Piper, ac: Action]{
    piper.statusList = "arm"
    ac.ac_attrib = "value chg"  
}


abstract sig Trigger{
    name: String,
        tri_attrib: String  
}

abstract sig Action{
    name: String,
        ac_attrib: String

}

sig Receipe{
    name: String,
    trigger:  Trigger,
    action:  Action,
    triggerService: Service,
    actionService: Service
}

//exit an area, arm piper
pred executeFirstReceipe{ 
    one tr_service: Location, ac_service: Piper,  trigger:Trigger, action: Action 
    |  exitAnArea[tr_service, trigger] => armPiper[ac_service, action]
}

run {}

...