Sid iddh dharth Kr h Kris ishn hna procedure insert(lst: Node , - - PowerPoint PPT Presentation
Sid iddh dharth Kr h Kris ishn hna procedure insert(lst: Node , - - PowerPoint PPT Presentation
Sid iddh dharth Kr h Kris ishn hna procedure insert(lst: Node , elt: Node ) returns (res: Node ) requires , ensures (,
procedure insert(lst: Node, elt: Node) returns (res: Node) requires πππ’ β¦ ππ£ππ β ππ‘ππ ππ‘π’, ππ£ππ ensures ππ‘ππ(π ππ‘, ππ£ππ) { if (lst != null) { var curr := lst; while (nondet() && curr.next != null) invariant ππ£π π β ππ£ππ βΆ πππ’ β¦ ππ£ππ β ππ‘ππ ππ‘π’, ππ£π π β ππ‘ππ ππ£π π , ππ£ππ { curr := curr.next; } elt.next := curr.next; curr.next := elt; return lst; } else return elt; }
procedure insertion_sort(lst: Node) requires ππ‘ππ ππ‘π’, ππ£ππ β ππ‘π’ β ππ£ππ ensures π‘ππ‘ππ(ππ‘π’, ππ£ππ) { var prv := null, srt := lst; while (srt != null) invariant (ππ π€ = ππ£ππ β π‘π π’ = ππ‘π’ β ππ‘ππ(ππ‘π’, ππ£ππ)) || (ππ‘ππ (ππ‘π’, ππ π€) β ππ β¦ π‘π π’ β ππ‘ππ (π‘π π’, ππ£ππ)) { var curr := srt.next; var min := srt; while (curr != null) invariant ππ π€ = ππ£ππ β ππ‘ππ ππ‘π’, π‘π π’ β ππ‘ππ π‘π π’, πππ β ππ‘ππ πππ, ππ£π π β ππ‘ππ ππ£π π , ππ£ππ || (ππ‘ππ(ππ‘π’, ππ π€) β ππ‘ππ (ππ π€, π‘π π’) β ππ‘ππ π‘π π’, πππ β ππ‘ππ πππ, ππ£π π β ππ‘ππ(ππ£π π , ππ£ππ)) invariant πππ β ππ£ππ { if (curr.data < min.data) { min := curr; } curr := curr.next; } var tmp := min.data; min.data := srt.data; srt.data := tmp; prv := srt; srt := srt.next; } }
procedure insert(lst: Node, elt: Node) returns (res: Node) requires πππ’ β¦ ππ£ππ β ππ‘ππ ππ‘π’, ππ£ππ ensures ππ‘ππ(π ππ‘, ππ£ππ) { if (lst != null) { var curr := lst; while (nondet() && curr.next != null) { invariant ππ£π π β ππ£ππ βΆ πππ’ β¦ ππ£ππ β ππ‘ππ(ππ‘π’, ππ£π π ) β ππ‘ππ ππ£π π , ππ£ππ curr := curr.next; } elt.next := curr.next; curr.next := elt; return lst; } else return elt; } ... ... ...
ππ£π π β ππ£ππ βΆ πππ’ β¦ ππ£ππ β ππ‘ππ(ππ‘π’, ππ£π π ) β ππ‘ππ ππ£π π , ππ£ππ
x 1
πππ
x 1
π§ β¦ π¨
x 1
π§ β¦ π¨ β π¨ β¦ π§
x 1
π§ β¦ π¨ β§ π¨ β¦ π§
x 1
π¦ = 1 βΆ π§ β¦ π¨ β π¨ β¦ π§
ππ‘ππ π¦, π§ β β π¨. π¦ = π§ βΆ πππ β¨ (π¦ β π§ βΆ π¦ β¦ π¨ β ππ‘ππ π¨, π§ )
k 1
ππ‘ππ π¦, ππ£ππ β‘ βπ¨ . π¦ β ππ£ππ βΆ π¦ β¦ π¨ β ππ‘ππ π¨, ππ£ππ β‘ β¦ β‘ π¦ β¦ π¨ β π¨ β¦ ππ£ππ β πππ
(π§ β₯ π¦)
Formulas
ππ£π π β ππ£ππ βΆ πππ’ β¦ ππ£ππ β ππ‘ππ(ππ‘π’, ππ£π π ) β ππ‘ππ ππ£π π , ππ£ππ
Graphs
πΊππ ππ£ππ πππ πΊππ ππ£ππ | πΌππππππ’π‘ πΌππππππ’π‘ πΌππππππ’ πΌππππππ’π‘ | πππ πΌππππππ’ πΉπ¦ππ πΉπ¦ππ πππ πππ πππ πππ πΊππ ππ£ππ πΉπ¦ππ πππ πππ πππ πππ πΊππ ππ£ππ πΉπ¦ππ πππ
πΊππ ππ£ππ β β πππ πΊππ ππ£ππ | πΌππππππ’π‘ πΌππππππ’π‘ πΌππππππ’ πΌππππππ’π‘ | πππ πΌππππππ’ πΉπ¦ππ πΉπ¦ππ πππ πππ πππ πππ πΊππ ππ£ππ πΉπ¦ππ πππ πππ πππ πππ πΊππ ππ£ππ πΉπ¦π πππ
πΊππ ππ£ππ π’ πΊππ ππ£ππ πΌππππππ’ πΌππππππ’π‘ πΉπ¦ππ πΉπ¦ππ πΌππππππ’π‘
πΌππππππ’ πΉπ¦ππ πΉπ¦ππ πππ πππ πππ πππ πΊππ ππ£ππ πΉπ¦ππ πππ πππ πππ πππ πΊππ ππ£ππ
πΊππ ππ£ππ π’ πΊππ ππ£ππ πΌππππππ’ πΌππππππ’π‘ πΉπ¦ππ πΉπ¦ππ
2
π¦ π’
3 4 5 6
πΌππππππ’π‘
πΊππ ππ£ππ β β πππ . πΊππ ππ£ππ | πΌππππππ’π‘ πΌππππππ’π‘ β πΌππππππ’ β πΌππππππ’π‘ | πππ πΌππππππ’ β ls πΉπ¦ππ , πΉπ¦ππ , β¦ | tree πΉπ¦ππ , β¦ πΉπ¦π β 0 β£ πππ
ππ‘ππ ππ‘π’, ππ£π π ππ‘ππ ππ£π π , ππ‘π’ ππ‘ππ ππ‘π’, ππ£π π β ππ‘ππ ππ£π π , ππ£ππ ... ππ£π π β ππ£ππ βΆ πππ’ β¦ ππ£ππ β ππ‘ππ ππ‘π’, ππ£π π β ππ‘ππ ππ£π π , ππ£ππ ...
πΌππππππ’ β ls πΉπ¦ππ , πΉπ¦ππ , _ | tree πΉπ¦ππ , _
ππ£π π β ππ£ππ βΆ πππ’ β¦ ππ£ππ β ππ‘ππ ππ‘π’, ππ£π π β ππ‘ππ ππ£π π , ππ£ππ
πΊππ ππ£ππ πππ πΊππ ππ£ππ | πΌππππππ’π‘
πΊππ ππ£ππ π’ πΊππ ππ£ππ
2
π¦ π’
3 4 5 6
πΌππππππ’π‘ πΌππππππ’ πΌππππππ’π‘ | πππ
πΊππ ππ£ππ π’ πΊππ ππ£ππ πΌππππππ’ πΌππππππ’π‘
2
π¦ π’
3 4 5 6
πΌππππππ’π‘
πΌππππππ’ πΉπ¦ππ πΉπ¦ππ πΉπ¦ππ
πΊππ ππ£ππ π’ πΊππ ππ£ππ πΌππππππ’ πΌππππππ’π‘ πΉπ¦ππ πΉπ¦ππ
2
π¦ π’
3 4 5 6
πΌππππππ’π‘
πΉπ¦ππ πππ
2
π¦ π’
3 4 5 6
πΊππ ππ£ππ π’ πΊππ ππ£ππ πΌππππππ’ πΌππππππ’π‘ πΉπ¦ππ πΉπ¦ππ πΌππππππ’π‘
Numeric Invariants:
- Training at verification time
- Training data: Observations
- Desired Invariant
~ Model Our Heap Invariants:
- Training beforehand
- Training data: Independent
- Desired Invariant
~ Predicted Label
...
These slides from David Sontag, adapted from Luke Zettlemoyer, Vibhav Gogate, Carlos Guestrin, Andrew Moore, Dan Klein
procedure insert(lst: Node, elt: Node) returns (res: Node) requires πππ’ β¦ ππ£ππ β ππ‘ππ ππ‘π’, ππ£ππ ensures ππ‘ππ(π ππ‘, ππ£ππ) { if (lst != null) { var curr := lst; while ( ? && curr.next != null) { curr := curr.next; } elt.next := curr.next; curr.next := elt; return lst; } } ππ£π π β ππ£ππ βΆ πππ’ β¦ ππ£ππ β ππ‘ππ(ππ‘π’, ππ£π π ) β ππ‘ππ ππ£π π , ππ£ππ procedure insert(lst: Node, elt: Node) returns (res: Node) requires πππ’ β¦ ππ£ππ β ππ‘ππ ππ‘π’, ππ£ππ ensures ππ‘ππ(π ππ‘, ππ£ππ) { if (lst != null) { var curr := lst; while ( ? && curr.next != null) invariant ππ£π π β ππ£ππ βΆ πππ’ β¦ ππ£ππ β ππ‘ππ(ππ‘π’, ππ£π π ) β ππ‘ππ ππ£π π , ππ£ππ { curr := curr.next; } elt.next := curr.next; curr.next := elt; return lst; } } Grasshopper picture from this blog
lseg(lst, curr) [] [2] [2, 4] lseg(curr, null) [2, 4, 6, 9] [4, 6, 9] [6, 9] lseg(elt, null) [7] [7] [7] lst.data 2 2 2 curr.data 2 4 6 elt.data 7 7 7
... ... ... βπ£. π£ β πΊπ ππ‘ππ ππ‘π’, ππ£π π β π£. πππ’π < ππ£π π . πππ’π βπ£, π€. πΊπ ππ‘ππ ππ‘π’, ππ£π π : π£ β+ π€ β π£. πππ’π β€ π€. πππ’π βπ£, π€. πΊπ ππ‘ππ ππ£π π , ππ£ππ : π£ β+ π€ β π£. πππ’π β€ π€. πππ’π ππ£π π . πππ’π β€ πππ’. πππ’π
- Analog to functional version from:
He Zhu, Gustavo Petri, Suresh Jagannathan, Automatically Learning Shape Specifications, PLDI 2016
Picture from Aqua Teen Hunger Force Wikia