Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
Siddharth Krishna
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