• alloy•    – Push    –    –•            alloy••
alloy
大事な3つ• アトムと関係• 演算• 制約
アトム• これ以上分けられない• 変化することがない• それ自体意味をもたない• 「要素」である
アトムの例• 「本」• 「ユーザ」• 「名前」• 「時刻」• 「状態名」
例えば           sig User {}と書くと、Userというアトムの集合があるということを宣言している。馴染みの言語で言えば、           class Userと意味は似ているかもしれない
sig User {}において、Userというのはアトムの集合を表す。User = {U0, U1, ...}という感じで、要素としてアトムを持つ。class Userが無数のインスタンスを持つようなもの
関係                          関係「profile」•   関係はタプルの集合          User Name Addr•   タプルはアトムの並び         U0    N0   A0•   関係はRDB...
関係「profile」User Name Addr U0   N0   A0     profile = {                    (U0, N0, A0), U0   N0   A1                    (U...
さっき        sig User {}は      User = {U0, U1, ...}と書きましたが、より正確には      User = {(U0), (U1), ...}という、タプルのアリティが1の関係を表します。※「関係はタ...
関係には名前をつけることができます       sig User {       name: Name       }       sig Name {}
sig User {             name: Name             }             sig Name {}を、RDB的な表現をすると  create table User (id primary key); ...
あと、これ重要Alloyの全ての値は      関係      です※つまり全ての変数の内容は関係です
また、アリティが1で要素数が1の関係を特別にスカラと呼びますUser U0    u0={(U0)}   スカラは                   何か一つのモノを                   表すのでよく使うので         ...
演算今回使うものだけ説明します
ドット結合         user.nameRDBで言えば、JOINです.関係user と 関係nameをJOINして JOINキー列を除去した関係を表します
User      .    name U0           U0 N0 U1                     最初はこう              U2 N2 U2               join       U0 U0 N...
直感的な結果になる  User                         name   U0                          U0 N0                               U2 N2u0={(U...
他の例       関係mail(from, message, to)               U1 M1 U2               U1 M2 U3               U5 M3 U2左から         u1.mai...
JOINキーは最左か最右• SQLみたいに列名でJOINできない• 関係の列の順番が重要になります• 実用上それほど困らないらしいです
矢印積 これが矢印積 U1 -> N1集合の直積を表す
Group                       drinkFood    G0                         D0 F0    G1                         D1 F1{(G0), (G1)} ...
特に双方がスカラの場合によく使う  User                     Name   U0                        N0u0= {(U0)}                n0= {(N0)}        ...
制約• 論理and, or, not とか 集合のinとか馴染 みの言語でよく使うものは当然ある• Alloyに制約の書き方は本当にたくさんあ りますが、今回は2つだけ説明します
implies (含意)     A ならば B である   というのを      A implies B   と記述することができます。※Alloyでは implies を => とも書きますでも矢印積(->)となんか紛らわしい・・・
A implies B      というのは      (A and B) or (not A)      と同じ意味です。「君が金メダリスト ならば 私は総理大臣だ」が真になる(嘘ではない)のは、「君が金メダリスト かつ 私が総理大臣」もしく...
限量     そろそろ馴染みが薄い領域・・・all x: e | F    eを満たす全てのxにおいてFが成立するsome x: e | F   eを満たすあるxにおいてFが成立するno x: e | F     eを満たす全てのxにおいてFが...
Push• Push  –  – DeviceToken          ID
Push                             GCM1.2. DeviceToken3.             DeviceToken4. Push5. Push
DeviceToken• DeviceToken    –            DeviceToken        Push                        DeviceToken    –                 D...
GCMAPI      DB
DT                                            GCM                           Push                                          ...
DT                                        GCM                         Push                                              DT...
DT                          API                                                   GCM                                     ...
Push                        PushGCM      DT                        DB    DT                  GCMDT                        ...
DT                                                     GCM                          Push                                  ...
DT                                                     GCM                          Push                                  ...
• DeviceToken•                     Push•    –    – Push      GCM    – Push            GCM•• DB                         Pus...
•     DeviceToken•   DeviceToken
• alloy•    –    –
•    –      DeviceToken Push•    –       GCM DB•    – DeviceToken       Push••
• open   – Time DeviceToken• abstract   – PushAvailability      extends
•                             2    –        •    – Push        • PushAvailability Time        •                 one     Pu...
•            AppState•    – fact
GCM• GCM DeviceToken   – 2,3     lone                     DeviceToken   1• current previous                        3   –  ...
GCM• GCMState                         2  – previous             current       previous    DeviceToken  – current       pre...
DB•                      DeviceToken PushAvailability• DeviceToken1              PushAvailability           1    – lone   ...
•    – alloy    –•    –2    –         pred
•   t t
•            3    –    – Push    – Push
GCM• GCM            2 – DeviceToken –
GCM
GCM
DB
DB
DB
Push• Push  – Push  –  –               DB  –     • 1   Push        GCM     • 2   Push              DB
Push
Push•    – AppState    – GCMState             DB Push    – DBState      • previous current
Push   AppState• AppState
Push              GCMState    – DB Push    –•    – current          GCMState      previous•    – GCM
Push                  DBState• p   c   dt=c → dt dt              DB• p   c   dt≠c → dt      dt=dt           DeviceToken
Push                      DBState• p   c   dt=p → dt=dt=p p.next=c      DB p         c• p   c   dt=c → dt dt              ...
Push          DBState• p   c   → dt   dt=dt      DeviceToken
•    –      DeviceToken Push•    –       GCM DB•    – DeviceToken       Push••
• alloy    –     t• first & DeviceToken    –     first      next   ordering                                     first     ...
••• alloy   1
Traces
Traces• alloy   –
Traces• alloy   –   – last   t
Traces• alloy   –   – last   t   t       t
Traces• alloy   –   – last   t   t       t
Traces• alloy   –   – last   t   t       t
•    –      DeviceToken Push•    –       GCM DB•    – DeviceToken       Push••
•     DeviceToken•   DeviceToken
DeviceToken•    –                 DB
DeviceToken•    –            Push   2
•   counterexample
•    EventState
•
DT•
DT• Next        Projection:none Time
DT•
DT•   Theme            …
DT•
DT•           GCMUpdate    DeviceToken0→DeviceToken1
DT• GCMExpire        DeviceToken0•             DB         GCM  DeviceToken
DT•   Push   DB
DT•
DT•   Push
DT• API   Push   DB
DT•
DT• Push
DT•    Push• DB             PushUnavailable
•            DeviceToken    –                           DT•       DeviceToken    – Push
dry run•       Push                  GCM Push•           DeviceToken             DeviceToken•                          Pus...
dry run•    –•    –• DB    –    →    –            →   DeviceToken    –        →
dryrun
dryrun• GCM
dryrun• Push     dryrun
•   Dryrun    Traces 2•            Dryrun
DT
DT• Traces                    assert• implies    Traces1  Traces2          Dryrun
DT
DT              1•    –        Push   2
DT                         2•                 Push   dryrun   2    DeviceToken
• DoNotLoseUser2
DT   2•
DT   2• Push
DT   2• DB
DT   2•
DT       2• Push       Dryrun   EventState
DT         2• Push        Dryrun2
•             DeviceToken    –                       DT    –                dryrun             DT        GCM              ...
• DT           Push       dryrun•                 alloy•       alloy
形式手法勉強会第3回 device tokenの仕様について
形式手法勉強会第3回 device tokenの仕様について
形式手法勉強会第3回 device tokenの仕様について
形式手法勉強会第3回 device tokenの仕様について
形式手法勉強会第3回 device tokenの仕様について
形式手法勉強会第3回 device tokenの仕様について
形式手法勉強会第3回 device tokenの仕様について
Upcoming SlideShare
Loading in …5
×

形式手法勉強会第3回 device tokenの仕様について

10,200 views

Published on

形式手法勉強会で使った資料です。
alloyというツールを使っています。
alloy自体の紹介は別の資料で説明しており、
この資料では以下の語を説明無しに使っています
・ドット(結合)
・矢印(積)
・その他各種シグネチャ
・alloyの特徴(全ては関係、全ては論理式、非手続き型言語であることなど)
このあたりの理解は原典にあたるのが一番手っ取り早いです
http://alloy.mit.edu/alloy/

  • Be the first to comment

形式手法勉強会第3回 device tokenの仕様について

  1. 1. • alloy• – Push – –• alloy••
  2. 2. alloy
  3. 3. 大事な3つ• アトムと関係• 演算• 制約
  4. 4. アトム• これ以上分けられない• 変化することがない• それ自体意味をもたない• 「要素」である
  5. 5. アトムの例• 「本」• 「ユーザ」• 「名前」• 「時刻」• 「状態名」
  6. 6. 例えば sig User {}と書くと、Userというアトムの集合があるということを宣言している。馴染みの言語で言えば、 class Userと意味は似ているかもしれない
  7. 7. sig User {}において、Userというのはアトムの集合を表す。User = {U0, U1, ...}という感じで、要素としてアトムを持つ。class Userが無数のインスタンスを持つようなもの
  8. 8. 関係 関係「profile」• 関係はタプルの集合 User Name Addr• タプルはアトムの並び U0 N0 A0• 関係はRDBの「Table」だと 思えば良い U0 N0 A1 U1 N1 A2各行がタプル U2 N2 A2
  9. 9. 関係「profile」User Name Addr U0 N0 A0 profile = { (U0, N0, A0), U0 N0 A1 (U0, N0, A1), (U1, N1, A2), U1 N1 A2 (U2, N2, A2) } アリティ=3 U2 N2 A2 こんな感じでよく書きますあとこの列の数をアリティと呼びます
  10. 10. さっき sig User {}は User = {U0, U1, ...}と書きましたが、より正確には User = {(U0), (U1), ...}という、タプルのアリティが1の関係を表します。※「関係はタプルの集合」です
  11. 11. 関係には名前をつけることができます sig User { name: Name } sig Name {}
  12. 12. sig User { name: Name } sig Name {}を、RDB的な表現をすると create table User (id primary key); create table Name (id primary key); create table name(id User, id Name);というニュアンスだと思ってください。特に、最後のnameが少し変わってますね。
  13. 13. あと、これ重要Alloyの全ての値は 関係 です※つまり全ての変数の内容は関係です
  14. 14. また、アリティが1で要素数が1の関係を特別にスカラと呼びますUser U0 u0={(U0)} スカラは 何か一つのモノを 表すのでよく使うので 概念名をつけていますが、 繰り返しますが、 スカラも関係です。Name N2 n2={(N2)}
  15. 15. 演算今回使うものだけ説明します
  16. 16. ドット結合 user.nameRDBで言えば、JOINです.関係user と 関係nameをJOINして JOINキー列を除去した関係を表します
  17. 17. User . name U0 U0 N0 U1 最初はこう U2 N2 U2 join U0 U0 N0 JOINキーが同じタプル U2 U2 N2 で新しい関係を作る N0 JOINキー列は削除 N2
  18. 18. 直感的な結果になる User name U0 U0 N0 U2 N2u0={(U0)} name={(U0, N0), (U2, N2)} u0.name = {(N0)}
  19. 19. 他の例 関係mail(from, message, to) U1 M1 U2 U1 M2 U3 U5 M3 U2左から u1.mail={(M1, U2), (M2, U3)}右側から mail.u2={(U1, M1), (U5, M3)}両側から u1.mail.u2={(M1)} 自由にJOINできる
  20. 20. JOINキーは最左か最右• SQLみたいに列名でJOINできない• 関係の列の順番が重要になります• 実用上それほど困らないらしいです
  21. 21. 矢印積 これが矢印積 U1 -> N1集合の直積を表す
  22. 22. Group drinkFood G0 D0 F0 G1 D1 F1{(G0), (G1)} {(D0,F0), (D1,F1)} Group -> drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1 {(G0, D0, F0), (G0, D1, F1), (G1, D0,F0), (G1, D1, F1)}
  23. 23. 特に双方がスカラの場合によく使う User Name U0 N0u0= {(U0)} n0= {(N0)} u0 -> n0 U0 N0 {(U0, N0)}
  24. 24. 制約• 論理and, or, not とか 集合のinとか馴染 みの言語でよく使うものは当然ある• Alloyに制約の書き方は本当にたくさんあ りますが、今回は2つだけ説明します
  25. 25. implies (含意) A ならば B である というのを A implies B と記述することができます。※Alloyでは implies を => とも書きますでも矢印積(->)となんか紛らわしい・・・
  26. 26. A implies B というのは (A and B) or (not A) と同じ意味です。「君が金メダリスト ならば 私は総理大臣だ」が真になる(嘘ではない)のは、「君が金メダリスト かつ 私が総理大臣」もしくは「君が金メダリストではない」ときですよね。
  27. 27. 限量 そろそろ馴染みが薄い領域・・・all x: e | F eを満たす全てのxにおいてFが成立するsome x: e | F eを満たすあるxにおいてFが成立するno x: e | F eを満たす全てのxにおいてFが成立しないlone x: e | F eを満たす高々1つのxにおいてFが成立するone x: e | F eを満たすちょうど1つのxにおいてFが成立
  28. 28. Push• Push – – DeviceToken ID
  29. 29. Push GCM1.2. DeviceToken3. DeviceToken4. Push5. Push
  30. 30. DeviceToken• DeviceToken – DeviceToken Push DeviceToken – DeviceToken• – Push
  31. 31. GCMAPI DB
  32. 32. DT GCM Push DT PushGCM Google Cloud Messaging for Android API DeviceToken Push android Push iPhone DB
  33. 33. DT GCM Push DTPush Push DT API Push GCM DT API DB DB Push
  34. 34. DT API GCM DT DBPush Push DB Push DT API DT Push DB
  35. 35. Push PushGCM DT DB DT GCMDT DB DT Push Push DT API Push DT DT Push DT DB DT
  36. 36. DT GCM Push DTPush Push DT API Push DT DT Push DT DB DT
  37. 37. DT GCM Push DTPush Push DT DB API Push DT DT Push DT DB DT
  38. 38. • DeviceToken• Push• – – Push GCM – Push GCM•• DB Push GCM
  39. 39. • DeviceToken• DeviceToken
  40. 40. • alloy• – –
  41. 41. • – DeviceToken Push• – GCM DB• – DeviceToken Push••
  42. 42. • open – Time DeviceToken• abstract – PushAvailability extends
  43. 43. • 2 – • – Push • PushAvailability Time • one PushAvailability 1
  44. 44. • AppState• – fact
  45. 45. GCM• GCM DeviceToken – 2,3 lone DeviceToken 1• current previous 3 – current previous – current previous – current,previous
  46. 46. GCM• GCMState 2 – previous current previous DeviceToken – current previous
  47. 47. DB• DeviceToken PushAvailability• DeviceToken1 PushAvailability 1 – lone (DT0, Available) (DT0,Unavailable) – lone one DeviceToken
  48. 48. • – alloy –• –2 – pred
  49. 49. • t t
  50. 50. • 3 – – Push – Push
  51. 51. GCM• GCM 2 – DeviceToken –
  52. 52. GCM
  53. 53. GCM
  54. 54. DB
  55. 55. DB
  56. 56. DB
  57. 57. Push• Push – Push – – DB – • 1 Push GCM • 2 Push DB
  58. 58. Push
  59. 59. Push• – AppState – GCMState DB Push – DBState • previous current
  60. 60. Push AppState• AppState
  61. 61. Push GCMState – DB Push –• – current GCMState previous• – GCM
  62. 62. Push DBState• p c dt=c → dt dt DB• p c dt≠c → dt dt=dt DeviceToken
  63. 63. Push DBState• p c dt=p → dt=dt=p p.next=c DB p c• p c dt=c → dt dt DB• p c dt≠p,c → dt dt=dt DeviceToken
  64. 64. Push DBState• p c → dt dt=dt DeviceToken
  65. 65. • – DeviceToken Push• – GCM DB• – DeviceToken Push••
  66. 66. • alloy – t• first & DeviceToken – first next ordering first next – Time DeviceToken first 2 – DeviceToken &
  67. 67. ••• alloy 1
  68. 68. Traces
  69. 69. Traces• alloy –
  70. 70. Traces• alloy – – last t
  71. 71. Traces• alloy – – last t t t
  72. 72. Traces• alloy – – last t t t
  73. 73. Traces• alloy – – last t t t
  74. 74. • – DeviceToken Push• – GCM DB• – DeviceToken Push••
  75. 75. • DeviceToken• DeviceToken
  76. 76. DeviceToken• – DB
  77. 77. DeviceToken• – Push 2
  78. 78. • counterexample
  79. 79. • EventState
  80. 80.
  81. 81. DT•
  82. 82. DT• Next Projection:none Time
  83. 83. DT•
  84. 84. DT• Theme …
  85. 85. DT•
  86. 86. DT• GCMUpdate DeviceToken0→DeviceToken1
  87. 87. DT• GCMExpire DeviceToken0• DB GCM DeviceToken
  88. 88. DT• Push DB
  89. 89. DT•
  90. 90. DT• Push
  91. 91. DT• API Push DB
  92. 92. DT•
  93. 93. DT• Push
  94. 94. DT• Push• DB PushUnavailable
  95. 95. • DeviceToken – DT• DeviceToken – Push
  96. 96. dry run• Push GCM Push• DeviceToken DeviceToken• Push• dry run
  97. 97. dry run• –• –• DB – → – → DeviceToken – →
  98. 98. dryrun
  99. 99. dryrun• GCM
  100. 100. dryrun• Push dryrun
  101. 101. • Dryrun Traces 2• Dryrun
  102. 102. DT
  103. 103. DT• Traces assert• implies Traces1 Traces2 Dryrun
  104. 104. DT
  105. 105. DT 1• – Push 2
  106. 106. DT 2• Push dryrun 2 DeviceToken
  107. 107. • DoNotLoseUser2
  108. 108. DT 2•
  109. 109. DT 2• Push
  110. 110. DT 2• DB
  111. 111. DT 2•
  112. 112. DT 2• Push Dryrun EventState
  113. 113. DT 2• Push Dryrun2
  114. 114. • DeviceToken – DT – dryrun DT GCM DT• DeviceToken – Push – dryrun GCM DT – dryrun GCM DT DB
  115. 115. • DT Push dryrun• alloy• alloy

×