Verifying That Web Pages Have Accessible Layout Pavel Panchekha , - - PowerPoint PPT Presentation

verifying that web pages have accessible layout
SMART_READER_LITE
LIVE PREVIEW

Verifying That Web Pages Have Accessible Layout Pavel Panchekha , - - PowerPoint PPT Presentation

Verifying That Web Pages Have Accessible Layout Pavel Panchekha , Adam T. Geller, Michael D. Ernst, Zachary Tatlock, Shoaib Kamil This Work: Automated Veri fi cation for Web Page Layout 3.6M lines 66% 17% 9% 7% Backend Layout Script


slide-1
SLIDE 1

Verifying That Web Pages Have Accessible Layout

Pavel Panchekha, Adam T. Geller, Michael D. Ernst, Zachary Tatlock, Shoaib Kamil

slide-2
SLIDE 2
slide-3
SLIDE 3

Existing Verification Work

7% 9% 17% 66%

3.6M lines

Backend Layout Script Config

This Work:

Automated Verification for Web Page Layout

slide-4
SLIDE 4

Multiple layouts, responsive design

slide-5
SLIDE 5

ADA Compliance

Usability, accessibility, mobile-friendliness

slide-6
SLIDE 6

Complex Behavior Correctness Properties

+

?

HELP WANTED

Automatic Verification

VizAssert

for Web Page Layout

slide-7
SLIDE 7

VizAssert

Plus Concrete Rendering Sound Guarantee

  • r

+

Guideline

Button visible Over configurable range of: Browser widths Browser heights Font sizes Scrollbar widths ….

slide-8
SLIDE 8

Z3

VizAssert

  • r

+

(set-logic QF_LRA) (declare-type Box …) (declare-const b1 Box) (declare-const b2 Box) (assert (not …))

3.

SMT Query

2.

Renderings

1.

Visual Logic

∀b1, b2 ∈ B, b1 ∈ $(.search-button) ∧ b2 ∈ $(.toolbar) = ⇒ within(b1, b2)

<latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit>

Guideline

Button visible

slide-9
SLIDE 9

VizAssert

  • r

+

(set-logic QF_LRA) (declare-type Box …) (declare-const b1 Box) (declare-const b2 Box) (assert (not …))

3.

SMT Query

2.

Renderings

1.

Visual Logic

∀b1, b2 ∈ B, b1 ∈ $(.search-button) ∧ b2 ∈ $(.toolbar) = ⇒ within(b1, b2)

<latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit>

Guideline

Button visible

Z3

slide-10
SLIDE 10

VizAssert

  • r

+

(set-logic QF_LRA) (declare-type Box …) (declare-const b1 Box) (declare-const b2 Box) (assert (not …))

3.

SMT Query

2.

Renderings Visual Logic

∀b1, b2 ∈ B, b1 ∈ $(.search-button) ∧ b2 ∈ $(.toolbar) = ⇒ within(b1, b2)

<latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit>

1.

Guideline

Button visible

Z3

slide-11
SLIDE 11

Guideline

Button visible

Universal quantifier Layout property

Visual Logic

∀b1, b2 ∈ B, b1 ∈ $(.search-button) ∧ b2 ∈ $(.toolbar) = ⇒ within(b1, b2)

<latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="hP+6LrUf2d3tZaldqaQvEKMXyw=">AB2XicbZDNSgMxFIXv1L86Vq1rN8EiuCozbnQpuHFZwbZCO5RM5k4bmskMyR2hDH0BF25EfC93vo3pz0JbDwQ+zknIvSculLQUBN9ebWd3b/+gfugfNfzjk9Nmo2fz0gjsilzl5jnmFpXU2CVJCp8LgzyLFfbj6f0i7+gsTLXTzQrMr4WMtUCk7O6oyaraAdLMW2IVxDC9YaNb+GS7KDUJxa0dhEFBUcUNSaFw7g9LiwUXUz7GgUPNM7RtRxzi6dk7A0N+5oYkv394uKZ9bOstjdzDhN7Ga2MP/LBiWlt1EldVESarH6KC0Vo5wtdmaJNChIzRxwYaSblYkJN1yQa8Z3HYSbG29D7odBu3wMYA6nMFXEIN3AHD9CBLghI4BXevYn35n2suqp569LO4I+8zx84xIo4</latexit><latexit sha1_base64="h4gkOyUWKw4BAQEW3dnZfaSf7+8=">ACeXicbVFNbxMxEPUuUEoELhysegHqRSi3VQIjhVcOBaJtJXiKJp1ZhurXntlzxai1f6S/qve+m/wblIELSPZenpvxp5k5VaeUqS2yh+9PjJ1tPtZ73nOy9evuq/3jn1tnISJ9Jq684z8KiVwQkp0nheOoQi03iWX5t9bMrdF5Z84NWJc4KuDAqVxIoUP+9YHIrQOteTZPh+Eac6EMFwXQUoKuvzRDIXoHQVzewNB+It8Xo8gpPLD1lFZE1zyIUGs+B1w9cF4z8F7VtAVmrM3BtqirCcOi71Dv9p6KlMs3grpHDeX83GSVd8Icg3YBdtomTef9GLKysCjQkNXg/TZOSZjU4UlJj0xOVxLkJVzgNEADBfpZ3ZnY8P3ALHgwIxDvGP/rqih8H5VZCGza/i+1pL/06YV5Z9ntTJlRWjk+qO80pwsbzfCF8qhJL0KAKRToVcul+BAUthbL5iQ3h/5ITgdj9JklH5P2DZ7y96xAUvZJ3bMvrETNmEyiqL3URKl8VY8jI/WdsXRxrc37J+IP/4GQlq9fg=</latexit><latexit sha1_base64="h4gkOyUWKw4BAQEW3dnZfaSf7+8=">ACeXicbVFNbxMxEPUuUEoELhysegHqRSi3VQIjhVcOBaJtJXiKJp1ZhurXntlzxai1f6S/qve+m/wblIELSPZenpvxp5k5VaeUqS2yh+9PjJ1tPtZ73nOy9evuq/3jn1tnISJ9Jq684z8KiVwQkp0nheOoQi03iWX5t9bMrdF5Z84NWJc4KuDAqVxIoUP+9YHIrQOteTZPh+Eac6EMFwXQUoKuvzRDIXoHQVzewNB+It8Xo8gpPLD1lFZE1zyIUGs+B1w9cF4z8F7VtAVmrM3BtqirCcOi71Dv9p6KlMs3grpHDeX83GSVd8Icg3YBdtomTef9GLKysCjQkNXg/TZOSZjU4UlJj0xOVxLkJVzgNEADBfpZ3ZnY8P3ALHgwIxDvGP/rqih8H5VZCGza/i+1pL/06YV5Z9ntTJlRWjk+qO80pwsbzfCF8qhJL0KAKRToVcul+BAUthbL5iQ3h/5ITgdj9JklH5P2DZ7y96xAUvZJ3bMvrETNmEyiqL3URKl8VY8jI/WdsXRxrc37J+IP/4GQlq9fg=</latexit><latexit sha1_base64="RUmU4MacjBTuw8hMy+x/P9RmLFI=">AChHicbVFdb9MwFHUCjFG+CjzyYlEYndRVSRGCJzSNFx6HRLdJdVXduDerNceO7JuNKsov4V/xr/BSTsEG1eydXTOPfb9yEqtPCXJryi+c/fezv3dB72Hjx4/edp/9vzE28pJnEqrTvLwKNWBqekSONZ6RCKTONpdvG51U8v0XlzTdalzgv4NyoXEmgQC36P/ZEbh1ozbNFOgrXhAtluCiAVhJ0fdSMhOjtBXHDvx4Kwu/k83rsEZxcHWQVkTXNPhcazJLXDd8YJn8M7VutgazVGbg2VRWhOfRd6rV+pWilTDO8LmR/0R8k46QLfhukWzBg2zhe9H+KpZVgYakBu9naVLSvAZHSmpseqLyWIK8gHOcBWigQD+vuyE2/E1gljwMIxDvGP/dtRQeL8uspDZFXxTa8n/abOK8o/zWpmyIjRy81FeaU6WtxvhS+VQkl4HANKpUCuXK3AgKeytF4aQ3mz5NjiZjNknH5NBodH23HspfsFRuylH1gh+wLO2ZTJqMoehslURrvxKP4Xfx+kxpHW8L9k/En34DjYm+ag=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="hP+6LrUf2d3tZaldqaQvEKMXyw=">AB2XicbZDNSgMxFIXv1L86Vq1rN8EiuCozbnQpuHFZwbZCO5RM5k4bmskMyR2hDH0BF25EfC93vo3pz0JbDwQ+zknIvSculLQUBN9ebWd3b/+gfugfNfzjk9Nmo2fz0gjsilzl5jnmFpXU2CVJCp8LgzyLFfbj6f0i7+gsTLXTzQrMr4WMtUCk7O6oyaraAdLMW2IVxDC9YaNb+GS7KDUJxa0dhEFBUcUNSaFw7g9LiwUXUz7GgUPNM7RtRxzi6dk7A0N+5oYkv394uKZ9bOstjdzDhN7Ga2MP/LBiWlt1EldVESarH6KC0Vo5wtdmaJNChIzRxwYaSblYkJN1yQa8Z3HYSbG29D7odBu3wMYA6nMFXEIN3AHD9CBLghI4BXevYn35n2suqp569LO4I+8zx84xIo4</latexit><latexit sha1_base64="h4gkOyUWKw4BAQEW3dnZfaSf7+8=">ACeXicbVFNbxMxEPUuUEoELhysegHqRSi3VQIjhVcOBaJtJXiKJp1ZhurXntlzxai1f6S/qve+m/wblIELSPZenpvxp5k5VaeUqS2yh+9PjJ1tPtZ73nOy9evuq/3jn1tnISJ9Jq684z8KiVwQkp0nheOoQi03iWX5t9bMrdF5Z84NWJc4KuDAqVxIoUP+9YHIrQOteTZPh+Eac6EMFwXQUoKuvzRDIXoHQVzewNB+It8Xo8gpPLD1lFZE1zyIUGs+B1w9cF4z8F7VtAVmrM3BtqirCcOi71Dv9p6KlMs3grpHDeX83GSVd8Icg3YBdtomTef9GLKysCjQkNXg/TZOSZjU4UlJj0xOVxLkJVzgNEADBfpZ3ZnY8P3ALHgwIxDvGP/rqih8H5VZCGza/i+1pL/06YV5Z9ntTJlRWjk+qO80pwsbzfCF8qhJL0KAKRToVcul+BAUthbL5iQ3h/5ITgdj9JklH5P2DZ7y96xAUvZJ3bMvrETNmEyiqL3URKl8VY8jI/WdsXRxrc37J+IP/4GQlq9fg=</latexit><latexit sha1_base64="h4gkOyUWKw4BAQEW3dnZfaSf7+8=">ACeXicbVFNbxMxEPUuUEoELhysegHqRSi3VQIjhVcOBaJtJXiKJp1ZhurXntlzxai1f6S/qve+m/wblIELSPZenpvxp5k5VaeUqS2yh+9PjJ1tPtZ73nOy9evuq/3jn1tnISJ9Jq684z8KiVwQkp0nheOoQi03iWX5t9bMrdF5Z84NWJc4KuDAqVxIoUP+9YHIrQOteTZPh+Eac6EMFwXQUoKuvzRDIXoHQVzewNB+It8Xo8gpPLD1lFZE1zyIUGs+B1w9cF4z8F7VtAVmrM3BtqirCcOi71Dv9p6KlMs3grpHDeX83GSVd8Icg3YBdtomTef9GLKysCjQkNXg/TZOSZjU4UlJj0xOVxLkJVzgNEADBfpZ3ZnY8P3ALHgwIxDvGP/rqih8H5VZCGza/i+1pL/06YV5Z9ntTJlRWjk+qO80pwsbzfCF8qhJL0KAKRToVcul+BAUthbL5iQ3h/5ITgdj9JklH5P2DZ7y96xAUvZJ3bMvrETNmEyiqL3URKl8VY8jI/WdsXRxrc37J+IP/4GQlq9fg=</latexit><latexit sha1_base64="RUmU4MacjBTuw8hMy+x/P9RmLFI=">AChHicbVFdb9MwFHUCjFG+CjzyYlEYndRVSRGCJzSNFx6HRLdJdVXduDerNceO7JuNKsov4V/xr/BSTsEG1eydXTOPfb9yEqtPCXJryi+c/fezv3dB72Hjx4/edp/9vzE28pJnEqrTvLwKNWBqekSONZ6RCKTONpdvG51U8v0XlzTdalzgv4NyoXEmgQC36P/ZEbh1ozbNFOgrXhAtluCiAVhJ0fdSMhOjtBXHDvx4Kwu/k83rsEZxcHWQVkTXNPhcazJLXDd8YJn8M7VutgazVGbg2VRWhOfRd6rV+pWilTDO8LmR/0R8k46QLfhukWzBg2zhe9H+KpZVgYakBu9naVLSvAZHSmpseqLyWIK8gHOcBWigQD+vuyE2/E1gljwMIxDvGP/dtRQeL8uspDZFXxTa8n/abOK8o/zWpmyIjRy81FeaU6WtxvhS+VQkl4HANKpUCuXK3AgKeytF4aQ3mz5NjiZjNknH5NBodH23HspfsFRuylH1gh+wLO2ZTJqMoehslURrvxKP4Xfx+kxpHW8L9k/En34DjYm+ag=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit>

Structural properties

slide-12
SLIDE 12

Structural properties Universal quantifier Layout property

root b.parent b.previous b.first-child b ∈ $(selector)

<latexit sha1_base64="DFRjopxGYd56umz0BMuHXfOov9c=">ACYHicbZFNSwMxEIaz61etX1VveglWRQ+WXRH0KHrxWMFWoVtKNp21wWyJLNqWfonvXnw4i8xrSto60Dg5XknZOZNnElhMQjePX9ufmFxqbJcXVldW9+obW61rc4NhxbXUpuHmFmQkELBUp4yAywNJZwHz9dj/37ZzBWaHWHwy6KXtUIhGcoUO92sthPCKNimM1jiUVQ9jBs/LGMG1Cw18Cx0bqd5IozFEz4Qsl9aNBKRvtHkw6BhZsTOGozOu7V6kEjmBSdFWEp6qSsZq/2FvU1z1M3D5fM2k4YZNgtmEHBJYyqUW4hY/yJPULHScVSsN1iEtCIHjSp4k27ikE/r7RsFSa4dp7DpThgM7Y3hf14nx+SiWwiV5QiKfz+U5JKipuO0aV8Yt7AcOsG4EW5WygfMI7uT6ouhHB65VnRPm2EQSO8PatfXpVxVMgu2SNHJCTn5JLckCZpEU4+vDlv1VvzPv2Kv+Fvfrf6Xnlnm/wpf+cLroa2Nw=</latexit><latexit sha1_base64="DFRjopxGYd56umz0BMuHXfOov9c=">ACYHicbZFNSwMxEIaz61etX1VveglWRQ+WXRH0KHrxWMFWoVtKNp21wWyJLNqWfonvXnw4i8xrSto60Dg5XknZOZNnElhMQjePX9ufmFxqbJcXVldW9+obW61rc4NhxbXUpuHmFmQkELBUp4yAywNJZwHz9dj/37ZzBWaHWHwy6KXtUIhGcoUO92sthPCKNimM1jiUVQ9jBs/LGMG1Cw18Cx0bqd5IozFEz4Qsl9aNBKRvtHkw6BhZsTOGozOu7V6kEjmBSdFWEp6qSsZq/2FvU1z1M3D5fM2k4YZNgtmEHBJYyqUW4hY/yJPULHScVSsN1iEtCIHjSp4k27ikE/r7RsFSa4dp7DpThgM7Y3hf14nx+SiWwiV5QiKfz+U5JKipuO0aV8Yt7AcOsG4EW5WygfMI7uT6ouhHB65VnRPm2EQSO8PatfXpVxVMgu2SNHJCTn5JLckCZpEU4+vDlv1VvzPv2Kv+Fvfrf6Xnlnm/wpf+cLroa2Nw=</latexit><latexit sha1_base64="DFRjopxGYd56umz0BMuHXfOov9c=">ACYHicbZFNSwMxEIaz61etX1VveglWRQ+WXRH0KHrxWMFWoVtKNp21wWyJLNqWfonvXnw4i8xrSto60Dg5XknZOZNnElhMQjePX9ufmFxqbJcXVldW9+obW61rc4NhxbXUpuHmFmQkELBUp4yAywNJZwHz9dj/37ZzBWaHWHwy6KXtUIhGcoUO92sthPCKNimM1jiUVQ9jBs/LGMG1Cw18Cx0bqd5IozFEz4Qsl9aNBKRvtHkw6BhZsTOGozOu7V6kEjmBSdFWEp6qSsZq/2FvU1z1M3D5fM2k4YZNgtmEHBJYyqUW4hY/yJPULHScVSsN1iEtCIHjSp4k27ikE/r7RsFSa4dp7DpThgM7Y3hf14nx+SiWwiV5QiKfz+U5JKipuO0aV8Yt7AcOsG4EW5WygfMI7uT6ouhHB65VnRPm2EQSO8PatfXpVxVMgu2SNHJCTn5JLckCZpEU4+vDlv1VvzPv2Kv+Fvfrf6Xnlnm/wpf+cLroa2Nw=</latexit><latexit sha1_base64="DFRjopxGYd56umz0BMuHXfOov9c=">ACYHicbZFNSwMxEIaz61etX1VveglWRQ+WXRH0KHrxWMFWoVtKNp21wWyJLNqWfonvXnw4i8xrSto60Dg5XknZOZNnElhMQjePX9ufmFxqbJcXVldW9+obW61rc4NhxbXUpuHmFmQkELBUp4yAywNJZwHz9dj/37ZzBWaHWHwy6KXtUIhGcoUO92sthPCKNimM1jiUVQ9jBs/LGMG1Cw18Cx0bqd5IozFEz4Qsl9aNBKRvtHkw6BhZsTOGozOu7V6kEjmBSdFWEp6qSsZq/2FvU1z1M3D5fM2k4YZNgtmEHBJYyqUW4hY/yJPULHScVSsN1iEtCIHjSp4k27ikE/r7RsFSa4dp7DpThgM7Y3hf14nx+SiWwiV5QiKfz+U5JKipuO0aV8Yt7AcOsG4EW5WygfMI7uT6ouhHB65VnRPm2EQSO8PatfXpVxVMgu2SNHJCTn5JLckCZpEU4+vDlv1VvzPv2Kv+Fvfrf6Xnlnm/wpf+cLroa2Nw=</latexit>

b.left b.top[margin] x + 2y − z b1.top < b2.top b.bg.r ∀b1, b2, . . .

Visual Logic HTML CSS . . . . . .

slide-13
SLIDE 13

VizAssert

  • r

+

(set-logic QF_LRA) (declare-type Box …) (declare-const b1 Box) (declare-const b2 Box) (assert (not …))

3.

SMT Query

2.

Renderings Visual Logic

∀b1, b2 ∈ B, b1 ∈ $(.search-button) ∧ b2 ∈ $(.toolbar) = ⇒ within(b1, b2)

<latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit>

1.

Guideline

Button visible

Z3

slide-14
SLIDE 14

VizAssert

  • r

+

(set-logic QF_LRA) (declare-type Box …) (declare-const b1 Box) (declare-const b2 Box) (assert (not …))

3.

SMT Query Renderings

1.

Visual Logic

∀b1, b2 ∈ B, b1 ∈ $(.search-button) ∧ b2 ∈ $(.toolbar) = ⇒ within(b1, b2)

<latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit>

2.

Guideline

Button visible

Z3

slide-15
SLIDE 15


 web browser Symbolic
 in SMT 102 standards 100k+ words 487 properties

slide-16
SLIDE 16

In OOPSLA’16

Cascade Shrink-to-fit Box T ypes Layout Mode Horizontal Vertical Height Clearance Floating Layout Line Height Margin Collapse Flow Width Selectors Styles

Formalized CSS Features

fi Box T ypes Layout Mode Horizontal Vertical Height Flow Width

This Paper

slide-17
SLIDE 17

Finitization Reductions

Finite number of registers

∀∃∀∃

<latexit sha1_base64="qozMT3JULEpjB/FRTLAVe2MsqCA=">ACBXicbVBNS8NAEJ3Ur1q/oh71ECyCp5KIoMeiF48V7Ae0oWy2k3bpZhN2N2IJvXjxr3jxoIhX/4M3/43bNgfb+mDh7XszMwLEs6Udt0fq7Cyura+UdwsbW3v7O7Z+wcNFaeSYp3GPJatgCjkTGBdM82xlUgkUcCxGQxvJn7zAaVisbjXowT9iPQFCxkl2khd+7gTxpJw3sFHM0zN/7p2a24UzjLxMtJGXLUuvZ3pxfTNEKhKSdKtT030X5GpGaU47jUSRUmhA5JH9uGChKh8rPpFWPn1Cg9xyxgntDOVP3bkZFIqVEUmMqI6IFa9Cbif1471eGVnzGRpBoFnQ0KU+7o2JlE4vSYRKr5yBCJTO7OnRAJKHaBFcyIXiLJy+TxnFcyve3UW5ep3HUYQjOIEz8OASqnALNagDhSd4gTd4t56tV+vD+pyVFqy85xDmYH39AuRFmXM=</latexit><latexit sha1_base64="qozMT3JULEpjB/FRTLAVe2MsqCA=">ACBXicbVBNS8NAEJ3Ur1q/oh71ECyCp5KIoMeiF48V7Ae0oWy2k3bpZhN2N2IJvXjxr3jxoIhX/4M3/43bNgfb+mDh7XszMwLEs6Udt0fq7Cyura+UdwsbW3v7O7Z+wcNFaeSYp3GPJatgCjkTGBdM82xlUgkUcCxGQxvJn7zAaVisbjXowT9iPQFCxkl2khd+7gTxpJw3sFHM0zN/7p2a24UzjLxMtJGXLUuvZ3pxfTNEKhKSdKtT030X5GpGaU47jUSRUmhA5JH9uGChKh8rPpFWPn1Cg9xyxgntDOVP3bkZFIqVEUmMqI6IFa9Cbif1471eGVnzGRpBoFnQ0KU+7o2JlE4vSYRKr5yBCJTO7OnRAJKHaBFcyIXiLJy+TxnFcyve3UW5ep3HUYQjOIEz8OASqnALNagDhSd4gTd4t56tV+vD+pyVFqy85xDmYH39AuRFmXM=</latexit><latexit sha1_base64="qozMT3JULEpjB/FRTLAVe2MsqCA=">ACBXicbVBNS8NAEJ3Ur1q/oh71ECyCp5KIoMeiF48V7Ae0oWy2k3bpZhN2N2IJvXjxr3jxoIhX/4M3/43bNgfb+mDh7XszMwLEs6Udt0fq7Cyura+UdwsbW3v7O7Z+wcNFaeSYp3GPJatgCjkTGBdM82xlUgkUcCxGQxvJn7zAaVisbjXowT9iPQFCxkl2khd+7gTxpJw3sFHM0zN/7p2a24UzjLxMtJGXLUuvZ3pxfTNEKhKSdKtT030X5GpGaU47jUSRUmhA5JH9uGChKh8rPpFWPn1Cg9xyxgntDOVP3bkZFIqVEUmMqI6IFa9Cbif1471eGVnzGRpBoFnQ0KU+7o2JlE4vSYRKr5yBCJTO7OnRAJKHaBFcyIXiLJy+TxnFcyve3UW5ep3HUYQjOIEz8OASqnALNagDhSd4gTd4t56tV+vD+pyVFqy85xDmYH39AuRFmXM=</latexit><latexit sha1_base64="qozMT3JULEpjB/FRTLAVe2MsqCA=">ACBXicbVBNS8NAEJ3Ur1q/oh71ECyCp5KIoMeiF48V7Ae0oWy2k3bpZhN2N2IJvXjxr3jxoIhX/4M3/43bNgfb+mDh7XszMwLEs6Udt0fq7Cyura+UdwsbW3v7O7Z+wcNFaeSYp3GPJatgCjkTGBdM82xlUgkUcCxGQxvJn7zAaVisbjXowT9iPQFCxkl2khd+7gTxpJw3sFHM0zN/7p2a24UzjLxMtJGXLUuvZ3pxfTNEKhKSdKtT030X5GpGaU47jUSRUmhA5JH9uGChKh8rPpFWPn1Cg9xyxgntDOVP3bkZFIqVEUmMqI6IFa9Cbif1471eGVnzGRpBoFnQ0KU+7o2JlE4vSYRKr5yBCJTO7OnRAJKHaBFcyIXiLJy+TxnFcyve3UW5ep3HUYQjOIEz8OASqnALNagDhSd4gTd4t56tV+vD+pyVFqy85xDmYH39AuRFmXM=</latexit>

Quantifier alternation

Line Height

µx.P(x)

<latexit sha1_base64="h7kgmTrIJFqTWp1ApeqbiAsjAFA=">AB8nicbVBNS8NAEN34WetX1aOXxSLUS0hE0GPRi8cK9gPSUDbTbt0dxN2J9IS+jO8eFDEq7/Gm/GbZuDtj4YeLw3w8y8KBXcgOd9O2vrG5tb26Wd8u7e/sFh5ei4ZJMU9akiUh0JyKGCa5YEzgI1k1IzISrB2N7mZ+4lpwxP1CJOUhZIMFI85JWCloCszPHZxoza+6FWqnuvNgVeJX5AqKtDoVb6/YRmkimghgT+F4KYU40cCrYtNzNDEsJHZEBCyxVRDIT5vOTp/jcKn0cJ9qWAjxXf0/kRBozkZHtlASGZtmbif95QbxTZhzlWbAF0sijOBIcGz/3Gfa0ZBTCwhVHN7K6ZDogkFm1LZhuAv7xKWpeu7n+w1W1flvEUKn6AzVkI+uUR3dowZqIoS9Ixe0ZsDzovz7nwsWtecYuYE/YHz+QOcTJAl</latexit><latexit sha1_base64="h7kgmTrIJFqTWp1ApeqbiAsjAFA=">AB8nicbVBNS8NAEN34WetX1aOXxSLUS0hE0GPRi8cK9gPSUDbTbt0dxN2J9IS+jO8eFDEq7/Gm/GbZuDtj4YeLw3w8y8KBXcgOd9O2vrG5tb26Wd8u7e/sFh5ei4ZJMU9akiUh0JyKGCa5YEzgI1k1IzISrB2N7mZ+4lpwxP1CJOUhZIMFI85JWCloCszPHZxoza+6FWqnuvNgVeJX5AqKtDoVb6/YRmkimghgT+F4KYU40cCrYtNzNDEsJHZEBCyxVRDIT5vOTp/jcKn0cJ9qWAjxXf0/kRBozkZHtlASGZtmbif95QbxTZhzlWbAF0sijOBIcGz/3Gfa0ZBTCwhVHN7K6ZDogkFm1LZhuAv7xKWpeu7n+w1W1flvEUKn6AzVkI+uUR3dowZqIoS9Ixe0ZsDzovz7nwsWtecYuYE/YHz+QOcTJAl</latexit><latexit sha1_base64="h7kgmTrIJFqTWp1ApeqbiAsjAFA=">AB8nicbVBNS8NAEN34WetX1aOXxSLUS0hE0GPRi8cK9gPSUDbTbt0dxN2J9IS+jO8eFDEq7/Gm/GbZuDtj4YeLw3w8y8KBXcgOd9O2vrG5tb26Wd8u7e/sFh5ei4ZJMU9akiUh0JyKGCa5YEzgI1k1IzISrB2N7mZ+4lpwxP1CJOUhZIMFI85JWCloCszPHZxoza+6FWqnuvNgVeJX5AqKtDoVb6/YRmkimghgT+F4KYU40cCrYtNzNDEsJHZEBCyxVRDIT5vOTp/jcKn0cJ9qWAjxXf0/kRBozkZHtlASGZtmbif95QbxTZhzlWbAF0sijOBIcGz/3Gfa0ZBTCwhVHN7K6ZDogkFm1LZhuAv7xKWpeu7n+w1W1flvEUKn6AzVkI+uUR3dowZqIoS9Ixe0ZsDzovz7nwsWtecYuYE/YHz+QOcTJAl</latexit><latexit sha1_base64="h7kgmTrIJFqTWp1ApeqbiAsjAFA=">AB8nicbVBNS8NAEN34WetX1aOXxSLUS0hE0GPRi8cK9gPSUDbTbt0dxN2J9IS+jO8eFDEq7/Gm/GbZuDtj4YeLw3w8y8KBXcgOd9O2vrG5tb26Wd8u7e/sFh5ei4ZJMU9akiUh0JyKGCa5YEzgI1k1IzISrB2N7mZ+4lpwxP1CJOUhZIMFI85JWCloCszPHZxoza+6FWqnuvNgVeJX5AqKtDoVb6/YRmkimghgT+F4KYU40cCrYtNzNDEsJHZEBCyxVRDIT5vOTp/jcKn0cJ9qWAjxXf0/kRBozkZHtlASGZtmbif95QbxTZhzlWbAF0sijOBIcGz/3Gfa0ZBTCwhVHN7K6ZDogkFm1LZhuAv7xKWpeu7n+w1W1flvEUKn6AzVkI+uUR3dowZqIoS9Ixe0ZsDzovz7nwsWtecYuYE/YHz+QOcTJAl</latexit>

Fixpoints, reachability

Margin Collapsing

sort(L)

<latexit sha1_base64="ac9l9J4huw16ExGakxp1cCHZ1CQ=">AB+XicbVDLSgMxFM34rPU16tJNsAh1U2ZE0GXRjQsXFewD2qFk0kwbmkmG5E6hDP0TNy4UceufuPNvTKez0NYDgcM593JPTpgIbsDzvp219Y3Nre3STnl3b/g0D06bhmVasqaVAmlOyExTHDJmsBsE6iGYlDwdrh+G7utydMG67kE0wTFsRkKHnEKQEr9V23FxMYmSgzSsOs+nDRdytezcuBV4lfkAoq0Oi7X72BomnMJFBjOn6XgJBRjRwKtis3EsNSwgdkyHrWipJzEyQ5cln+NwqAxwpbZ8EnKu/NzISGzONQzuZ51z25uJ/XjeF6CbIuExSYJIuDkWpwKDwvAY84JpREFNLCNXcZsV0RDShYMsq2xL85S+vktZlzfdq/uNVpX5b1FCp+gMVZGPrlEd3aMGaiKJugZvaI3J3NenHfnYzG65hQ7J+gPnM8fd/aThw=</latexit><latexit sha1_base64="ac9l9J4huw16ExGakxp1cCHZ1CQ=">AB+XicbVDLSgMxFM34rPU16tJNsAh1U2ZE0GXRjQsXFewD2qFk0kwbmkmG5E6hDP0TNy4UceufuPNvTKez0NYDgcM593JPTpgIbsDzvp219Y3Nre3STnl3b/g0D06bhmVasqaVAmlOyExTHDJmsBsE6iGYlDwdrh+G7utydMG67kE0wTFsRkKHnEKQEr9V23FxMYmSgzSsOs+nDRdytezcuBV4lfkAoq0Oi7X72BomnMJFBjOn6XgJBRjRwKtis3EsNSwgdkyHrWipJzEyQ5cln+NwqAxwpbZ8EnKu/NzISGzONQzuZ51z25uJ/XjeF6CbIuExSYJIuDkWpwKDwvAY84JpREFNLCNXcZsV0RDShYMsq2xL85S+vktZlzfdq/uNVpX5b1FCp+gMVZGPrlEd3aMGaiKJugZvaI3J3NenHfnYzG65hQ7J+gPnM8fd/aThw=</latexit><latexit sha1_base64="ac9l9J4huw16ExGakxp1cCHZ1CQ=">AB+XicbVDLSgMxFM34rPU16tJNsAh1U2ZE0GXRjQsXFewD2qFk0kwbmkmG5E6hDP0TNy4UceufuPNvTKez0NYDgcM593JPTpgIbsDzvp219Y3Nre3STnl3b/g0D06bhmVasqaVAmlOyExTHDJmsBsE6iGYlDwdrh+G7utydMG67kE0wTFsRkKHnEKQEr9V23FxMYmSgzSsOs+nDRdytezcuBV4lfkAoq0Oi7X72BomnMJFBjOn6XgJBRjRwKtis3EsNSwgdkyHrWipJzEyQ5cln+NwqAxwpbZ8EnKu/NzISGzONQzuZ51z25uJ/XjeF6CbIuExSYJIuDkWpwKDwvAY84JpREFNLCNXcZsV0RDShYMsq2xL85S+vktZlzfdq/uNVpX5b1FCp+gMVZGPrlEd3aMGaiKJugZvaI3J3NenHfnYzG65hQ7J+gPnM8fd/aThw=</latexit><latexit sha1_base64="ac9l9J4huw16ExGakxp1cCHZ1CQ=">AB+XicbVDLSgMxFM34rPU16tJNsAh1U2ZE0GXRjQsXFewD2qFk0kwbmkmG5E6hDP0TNy4UceufuPNvTKez0NYDgcM593JPTpgIbsDzvp219Y3Nre3STnl3b/g0D06bhmVasqaVAmlOyExTHDJmsBsE6iGYlDwdrh+G7utydMG67kE0wTFsRkKHnEKQEr9V23FxMYmSgzSsOs+nDRdytezcuBV4lfkAoq0Oi7X72BomnMJFBjOn6XgJBRjRwKtis3EsNSwgdkyHrWipJzEyQ5cln+NwqAxwpbZ8EnKu/NzISGzONQzuZ51z25uJ/XjeF6CbIuExSYJIuDkWpwKDwvAY84JpREFNLCNXcZsV0RDShYMsq2xL85S+vktZlzfdq/uNVpX5b1FCp+gMVZGPrlEd3aMGaiKJugZvaI3J3NenHfnYzG65hQ7J+gPnM8fd/aThw=</latexit>

Data structures

Floating Layout

slide-18
SLIDE 18

Line Height

fg fg Baseline

½ Leading ½ Leading Descent Ascent

Maximum

  • ver all boxes

“The line box height is the distance between the uppermost box top and the lowermost box bottom.”

Reduced to 2-register encoding

Incremental maximum/minimum computations

Avoid the jargon in audio Faster

Box

slide-19
SLIDE 19

Margin collapsing

Reduced to 6-register encoding

Collapse margins box-by-box as they’re laid out

Overlap through blue box “Adjoining vertical margins collapse; two margins are adjoining if and only if: …” Reachability condition

slide-20
SLIDE 20

Float Semantics

“Here are the precise rules that govern the behavior of left floats:

  • 1. A floating box’s left outer edge may not be to the left of the left edge of its

containing block.

  • 2. A floating box must be to the right of the right outer edge, or below the bottom
  • uter edge, of any earlier floating box.
  • 3. The right outer edge of a left-floating box may not be to the right of the left outer

edge of any right-floating box that is next to it.

  • 4. A floating box's outer top may not be higher than the top of its containing block.
  • 5. The outer top of a floating box may not be higher than the outer top of any block
  • r floated box generated by an element earlier in the source document.
  • 6. The outer top of an element's floating box may not be higher than the top of any

line-box containing a box generated by an earlier element.

  • 7. A left-floating box that has another left-floating box to its left may not have its

right outer edge to the right of its containing block's right edge.

  • 8. A floating box must be placed as high as possible.
  • 9. A left-floating box must be put as far to the left as possible.”

Optimization problem

“Here are the precise rules that govern the behavior of left floats:

  • 1. A floating box’s left outer edge may not be to the left of the left edge of its

containing block.

  • 2. A floating box must be to the right of the right outer edge, or below the bottom
  • uter edge, of any earlier floating box.
  • 3. The right outer edge of a left-floating box may not be to the right of the left outer

edge of any right-floating box that is next to it.

  • 4. A floating box's outer top may not be higher than the top of its containing block.
  • 5. The outer top of a floating box may not be higher than the outer top of any block
  • r floated box generated by an element earlier in the source document.
  • 6. The outer top of an element's floating box may not be higher than the top of any

line-box containing a box generated by an earlier element.

  • 7. A left-floating box that has another left-floating box to its left may not have its

right outer edge to the right of its containing block's right edge.

  • 8. A floating box must be placed as high as possible.
  • 9. A left-floating box must be put as far to the left as possible.”

Right floats analogous

Go to gray faster

slide-21
SLIDE 21

Float Semantics

Where floats are allowed

slide-22
SLIDE 22

Float Semantics

slide-23
SLIDE 23

Float Semantics

Text Line will wrap around fl-

  • ats.
slide-24
SLIDE 24

Float Semantics

Text Line will wrap around fl-

  • ats.

y0 y1

<latexit sha1_base64="dFpwFkqSE/qJSmPpk9iKmxkVioY=">AB6nicbVBNS8NAEJ3Ur1q/qh69LBbBU0lE0GPRi8eK9gPaUDbTbt0swm7EyGE/gQvHhTx6i/y5r9x2+agrQ8GHu/NMDMvSKQw6LrfTmltfWNzq7xd2dnd2z+oHh61TZxqxlslrHuBtRwKRvoUDJu4nmNAok7wST25nfeLaiFg9YpZwP6IjJULBKFrpIRt4g2rNrbtzkFXiFaQGBZqD6ld/GLM04gqZpMb0PDdBP6caBZN8WumnhieUTeiI9yxVNOLGz+enTsmZVYkjLUthWSu/p7IaWRMFgW2M6I4NsveTPzP6UYXvu5UEmKXLHFojCVBGMy+5sMheYMZWYJZVrYWwkbU0Z2nQqNgRv+eV0r6oe27du7+sNW6KOMpwAqdwDh5cQPuoAktYDCZ3iFN0c6L86787FoLTnFzDH8gfP5Aw02jaE=</latexit><latexit sha1_base64="dFpwFkqSE/qJSmPpk9iKmxkVioY=">AB6nicbVBNS8NAEJ3Ur1q/qh69LBbBU0lE0GPRi8eK9gPaUDbTbt0swm7EyGE/gQvHhTx6i/y5r9x2+agrQ8GHu/NMDMvSKQw6LrfTmltfWNzq7xd2dnd2z+oHh61TZxqxlslrHuBtRwKRvoUDJu4nmNAok7wST25nfeLaiFg9YpZwP6IjJULBKFrpIRt4g2rNrbtzkFXiFaQGBZqD6ld/GLM04gqZpMb0PDdBP6caBZN8WumnhieUTeiI9yxVNOLGz+enTsmZVYkjLUthWSu/p7IaWRMFgW2M6I4NsveTPzP6UYXvu5UEmKXLHFojCVBGMy+5sMheYMZWYJZVrYWwkbU0Z2nQqNgRv+eV0r6oe27du7+sNW6KOMpwAqdwDh5cQPuoAktYDCZ3iFN0c6L86787FoLTnFzDH8gfP5Aw02jaE=</latexit><latexit sha1_base64="dFpwFkqSE/qJSmPpk9iKmxkVioY=">AB6nicbVBNS8NAEJ3Ur1q/qh69LBbBU0lE0GPRi8eK9gPaUDbTbt0swm7EyGE/gQvHhTx6i/y5r9x2+agrQ8GHu/NMDMvSKQw6LrfTmltfWNzq7xd2dnd2z+oHh61TZxqxlslrHuBtRwKRvoUDJu4nmNAok7wST25nfeLaiFg9YpZwP6IjJULBKFrpIRt4g2rNrbtzkFXiFaQGBZqD6ld/GLM04gqZpMb0PDdBP6caBZN8WumnhieUTeiI9yxVNOLGz+enTsmZVYkjLUthWSu/p7IaWRMFgW2M6I4NsveTPzP6UYXvu5UEmKXLHFojCVBGMy+5sMheYMZWYJZVrYWwkbU0Z2nQqNgRv+eV0r6oe27du7+sNW6KOMpwAqdwDh5cQPuoAktYDCZ3iFN0c6L86787FoLTnFzDH8gfP5Aw02jaE=</latexit><latexit sha1_base64="dFpwFkqSE/qJSmPpk9iKmxkVioY=">AB6nicbVBNS8NAEJ3Ur1q/qh69LBbBU0lE0GPRi8eK9gPaUDbTbt0swm7EyGE/gQvHhTx6i/y5r9x2+agrQ8GHu/NMDMvSKQw6LrfTmltfWNzq7xd2dnd2z+oHh61TZxqxlslrHuBtRwKRvoUDJu4nmNAok7wST25nfeLaiFg9YpZwP6IjJULBKFrpIRt4g2rNrbtzkFXiFaQGBZqD6ld/GLM04gqZpMb0PDdBP6caBZN8WumnhieUTeiI9yxVNOLGz+enTsmZVYkjLUthWSu/p7IaWRMFgW2M6I4NsveTPzP6UYXvu5UEmKXLHFojCVBGMy+5sMheYMZWYJZVrYWwkbU0Z2nQqNgRv+eV0r6oe27du7+sNW6KOMpwAqdwDh5cQPuoAktYDCZ3iFN0c6L86787FoLTnFzDH8gfP5Aw02jaE=</latexit>

y2

<latexit sha1_base64="D3AX+j/PE1m53fMd5IxYxCDCOuI=">AB6nicbVBNS8NAEJ34WetX1aOXxSJ4KkR9Fj04rGi/YA2lM120i7dbMLuRgihP8GLB0W8+ou8+W/ctjlo64OBx3szMwLEsG1cd1vZ219Y3Nru7RT3t3bPzisHB23dZwqhi0Wi1h1A6pRcIktw43AbqKQRoHATjC5nfmdJ1Sax/LRZAn6ER1JHnJGjZUeskF9UKm6NXcOskq8glShQHNQ+eoPY5ZGKA0TVOue5ybGz6kynAmclvupxoSyCR1hz1JI9R+Pj91Ss6tMiRhrGxJQ+bq74mcRlpnUWA7I2rGetmbif95vdSE137OZIalGyxKEwFMTGZ/U2GXCEzIrOEMsXtrYSNqaLM2HTKNgRv+eV0q7XPLfm3V9WGzdFHCU4hTO4A+uoAF30IQWMBjBM7zCmyOcF+fd+Vi0rjnFzAn8gfP5Aw6jaI=</latexit><latexit sha1_base64="D3AX+j/PE1m53fMd5IxYxCDCOuI=">AB6nicbVBNS8NAEJ34WetX1aOXxSJ4KkR9Fj04rGi/YA2lM120i7dbMLuRgihP8GLB0W8+ou8+W/ctjlo64OBx3szMwLEsG1cd1vZ219Y3Nru7RT3t3bPzisHB23dZwqhi0Wi1h1A6pRcIktw43AbqKQRoHATjC5nfmdJ1Sax/LRZAn6ER1JHnJGjZUeskF9UKm6NXcOskq8glShQHNQ+eoPY5ZGKA0TVOue5ybGz6kynAmclvupxoSyCR1hz1JI9R+Pj91Ss6tMiRhrGxJQ+bq74mcRlpnUWA7I2rGetmbif95vdSE137OZIalGyxKEwFMTGZ/U2GXCEzIrOEMsXtrYSNqaLM2HTKNgRv+eV0q7XPLfm3V9WGzdFHCU4hTO4A+uoAF30IQWMBjBM7zCmyOcF+fd+Vi0rjnFzAn8gfP5Aw6jaI=</latexit><latexit sha1_base64="D3AX+j/PE1m53fMd5IxYxCDCOuI=">AB6nicbVBNS8NAEJ34WetX1aOXxSJ4KkR9Fj04rGi/YA2lM120i7dbMLuRgihP8GLB0W8+ou8+W/ctjlo64OBx3szMwLEsG1cd1vZ219Y3Nru7RT3t3bPzisHB23dZwqhi0Wi1h1A6pRcIktw43AbqKQRoHATjC5nfmdJ1Sax/LRZAn6ER1JHnJGjZUeskF9UKm6NXcOskq8glShQHNQ+eoPY5ZGKA0TVOue5ybGz6kynAmclvupxoSyCR1hz1JI9R+Pj91Ss6tMiRhrGxJQ+bq74mcRlpnUWA7I2rGetmbif95vdSE137OZIalGyxKEwFMTGZ/U2GXCEzIrOEMsXtrYSNqaLM2HTKNgRv+eV0q7XPLfm3V9WGzdFHCU4hTO4A+uoAF30IQWMBjBM7zCmyOcF+fd+Vi0rjnFzAn8gfP5Aw6jaI=</latexit><latexit sha1_base64="D3AX+j/PE1m53fMd5IxYxCDCOuI=">AB6nicbVBNS8NAEJ34WetX1aOXxSJ4KkR9Fj04rGi/YA2lM120i7dbMLuRgihP8GLB0W8+ou8+W/ctjlo64OBx3szMwLEsG1cd1vZ219Y3Nru7RT3t3bPzisHB23dZwqhi0Wi1h1A6pRcIktw43AbqKQRoHATjC5nfmdJ1Sax/LRZAn6ER1JHnJGjZUeskF9UKm6NXcOskq8glShQHNQ+eoPY5ZGKA0TVOue5ybGz6kynAmclvupxoSyCR1hz1JI9R+Pj91Ss6tMiRhrGxJQ+bq74mcRlpnUWA7I2rGetmbif95vdSE137OZIalGyxKEwFMTGZ/U2GXCEzIrOEMsXtrYSNqaLM2HTKNgRv+eV0q7XPLfm3V9WGzdFHCU4hTO4A+uoAF30IQWMBjBM7zCmyOcF+fd+Vi0rjnFzAn8gfP5Aw6jaI=</latexit>

l1

<latexit sha1_base64="/giPlvBQ4aQce5QlfLqhCcE8grQ=">AB6nicbVBNS8NAEJ3Ur1q/oh69LBbBU0lE0GPRi8eK9gPaUDbTbt0swm7E6GE/gQvHhTx6i/y5r9x2+agrQ8GHu/NMDMvTKUw6HnfTmltfWNzq7xd2dnd2z9wD49aJsk0402WyER3Qmq4FIo3UaDknVRzGoeSt8Px7cxvP3FtRKIecZLyIKZDJSLBKFrpQfb9vlv1at4cZJX4BalCgUbf/eoNEpbFXCGT1Jiu76UY5FSjYJPK73M8JSyMR3yrqWKxtwE+fzUKTmzyoBEibalkMzV3xM5jY2ZxKHtjCmOzLI3E/zuhlG10EuVJohV2yxKMokwYTM/iYDoTlDObGEMi3srYSNqKYMbToVG4K/PIqaV3UfK/m319W6zdFHGU4gVM4Bx+uoA530IAmMBjCM7zCmyOdF+fd+Vi0lpxi5hj+wPn8AflZjZQ=</latexit><latexit sha1_base64="/giPlvBQ4aQce5QlfLqhCcE8grQ=">AB6nicbVBNS8NAEJ3Ur1q/oh69LBbBU0lE0GPRi8eK9gPaUDbTbt0swm7E6GE/gQvHhTx6i/y5r9x2+agrQ8GHu/NMDMvTKUw6HnfTmltfWNzq7xd2dnd2z9wD49aJsk0402WyER3Qmq4FIo3UaDknVRzGoeSt8Px7cxvP3FtRKIecZLyIKZDJSLBKFrpQfb9vlv1at4cZJX4BalCgUbf/eoNEpbFXCGT1Jiu76UY5FSjYJPK73M8JSyMR3yrqWKxtwE+fzUKTmzyoBEibalkMzV3xM5jY2ZxKHtjCmOzLI3E/zuhlG10EuVJohV2yxKMokwYTM/iYDoTlDObGEMi3srYSNqKYMbToVG4K/PIqaV3UfK/m319W6zdFHGU4gVM4Bx+uoA530IAmMBjCM7zCmyOdF+fd+Vi0lpxi5hj+wPn8AflZjZQ=</latexit><latexit sha1_base64="/giPlvBQ4aQce5QlfLqhCcE8grQ=">AB6nicbVBNS8NAEJ3Ur1q/oh69LBbBU0lE0GPRi8eK9gPaUDbTbt0swm7E6GE/gQvHhTx6i/y5r9x2+agrQ8GHu/NMDMvTKUw6HnfTmltfWNzq7xd2dnd2z9wD49aJsk0402WyER3Qmq4FIo3UaDknVRzGoeSt8Px7cxvP3FtRKIecZLyIKZDJSLBKFrpQfb9vlv1at4cZJX4BalCgUbf/eoNEpbFXCGT1Jiu76UY5FSjYJPK73M8JSyMR3yrqWKxtwE+fzUKTmzyoBEibalkMzV3xM5jY2ZxKHtjCmOzLI3E/zuhlG10EuVJohV2yxKMokwYTM/iYDoTlDObGEMi3srYSNqKYMbToVG4K/PIqaV3UfK/m319W6zdFHGU4gVM4Bx+uoA530IAmMBjCM7zCmyOdF+fd+Vi0lpxi5hj+wPn8AflZjZQ=</latexit><latexit sha1_base64="/giPlvBQ4aQce5QlfLqhCcE8grQ=">AB6nicbVBNS8NAEJ3Ur1q/oh69LBbBU0lE0GPRi8eK9gPaUDbTbt0swm7E6GE/gQvHhTx6i/y5r9x2+agrQ8GHu/NMDMvTKUw6HnfTmltfWNzq7xd2dnd2z9wD49aJsk0402WyER3Qmq4FIo3UaDknVRzGoeSt8Px7cxvP3FtRKIecZLyIKZDJSLBKFrpQfb9vlv1at4cZJX4BalCgUbf/eoNEpbFXCGT1Jiu76UY5FSjYJPK73M8JSyMR3yrqWKxtwE+fzUKTmzyoBEibalkMzV3xM5jY2ZxKHtjCmOzLI3E/zuhlG10EuVJohV2yxKMokwYTM/iYDoTlDObGEMi3srYSNqKYMbToVG4K/PIqaV3UfK/m319W6zdFHGU4gVM4Bx+uoA530IAmMBjCM7zCmyOdF+fd+Vi0lpxi5hj+wPn8AflZjZQ=</latexit>

l2

<latexit sha1_base64="ZCcfjDIHnwTI/oFNR6XChCvjg=">AB6nicbVBNS8NAEJ3Ur1q/qh69LBbBU0mKUI9FLx4r2g9oQ9lsJ+3SzSbsboQS+hO8eFDEq7/Im/GbZuDtj4YeLw3w8y8IBFcG9f9dgobm1vbO8Xd0t7+weFR+fikreNUMWyxWMSqG1CNgktsGW4EdhOFNAoEdoLJ7dzvPKHSPJaPZpqgH9GR5CFn1FjpQxqg3LFrboLkHXi5aQCOZqD8ld/GLM0QmYoFr3PDcxfkaV4UzgrNRPNSaUTegIe5ZKGqH2s8WpM3JhlSEJY2VLGrJQf09kNJ6GgW2M6JmrFe9ufif10tNeO1nXCapQcmWi8JUEBOT+d9kyBUyI6aWUKa4vZWwMVWUGZtOyYbgrb68Ttq1qudWvfurSuMmj6MIZ3AOl+BHRpwB01oAYMRPMrvDnCeXHenY9la8HJZ07hD5zPH/rdjZU=</latexit><latexit sha1_base64="ZCcfjDIHnwTI/oFNR6XChCvjg=">AB6nicbVBNS8NAEJ3Ur1q/qh69LBbBU0mKUI9FLx4r2g9oQ9lsJ+3SzSbsboQS+hO8eFDEq7/Im/GbZuDtj4YeLw3w8y8IBFcG9f9dgobm1vbO8Xd0t7+weFR+fikreNUMWyxWMSqG1CNgktsGW4EdhOFNAoEdoLJ7dzvPKHSPJaPZpqgH9GR5CFn1FjpQxqg3LFrboLkHXi5aQCOZqD8ld/GLM0QmYoFr3PDcxfkaV4UzgrNRPNSaUTegIe5ZKGqH2s8WpM3JhlSEJY2VLGrJQf09kNJ6GgW2M6JmrFe9ufif10tNeO1nXCapQcmWi8JUEBOT+d9kyBUyI6aWUKa4vZWwMVWUGZtOyYbgrb68Ttq1qudWvfurSuMmj6MIZ3AOl+BHRpwB01oAYMRPMrvDnCeXHenY9la8HJZ07hD5zPH/rdjZU=</latexit><latexit sha1_base64="ZCcfjDIHnwTI/oFNR6XChCvjg=">AB6nicbVBNS8NAEJ3Ur1q/qh69LBbBU0mKUI9FLx4r2g9oQ9lsJ+3SzSbsboQS+hO8eFDEq7/Im/GbZuDtj4YeLw3w8y8IBFcG9f9dgobm1vbO8Xd0t7+weFR+fikreNUMWyxWMSqG1CNgktsGW4EdhOFNAoEdoLJ7dzvPKHSPJaPZpqgH9GR5CFn1FjpQxqg3LFrboLkHXi5aQCOZqD8ld/GLM0QmYoFr3PDcxfkaV4UzgrNRPNSaUTegIe5ZKGqH2s8WpM3JhlSEJY2VLGrJQf09kNJ6GgW2M6JmrFe9ufif10tNeO1nXCapQcmWi8JUEBOT+d9kyBUyI6aWUKa4vZWwMVWUGZtOyYbgrb68Ttq1qudWvfurSuMmj6MIZ3AOl+BHRpwB01oAYMRPMrvDnCeXHenY9la8HJZ07hD5zPH/rdjZU=</latexit><latexit sha1_base64="ZCcfjDIHnwTI/oFNR6XChCvjg=">AB6nicbVBNS8NAEJ3Ur1q/qh69LBbBU0mKUI9FLx4r2g9oQ9lsJ+3SzSbsboQS+hO8eFDEq7/Im/GbZuDtj4YeLw3w8y8IBFcG9f9dgobm1vbO8Xd0t7+weFR+fikreNUMWyxWMSqG1CNgktsGW4EdhOFNAoEdoLJ7dzvPKHSPJaPZpqgH9GR5CFn1FjpQxqg3LFrboLkHXi5aQCOZqD8ld/GLM0QmYoFr3PDcxfkaV4UzgrNRPNSaUTegIe5ZKGqH2s8WpM3JhlSEJY2VLGrJQf09kNJ6GgW2M6JmrFe9ufif10tNeO1nXCapQcmWi8JUEBOT+d9kyBUyI6aWUKa4vZWwMVWUGZtOyYbgrb68Ttq1qudWvfurSuMmj6MIZ3AOl+BHRpwB01oAYMRPMrvDnCeXHenY9la8HJZ07hD5zPH/rdjZU=</latexit>

Reduced to (5k+2)-register encoding

In practice, k ≤ 7; search for sufficient value

k Steps

slide-25
SLIDE 25

Finitization Reductions

∀∃∀∃

<latexit sha1_base64="qozMT3JULEpjB/FRTLAVe2MsqCA=">ACBXicbVBNS8NAEJ3Ur1q/oh71ECyCp5KIoMeiF48V7Ae0oWy2k3bpZhN2N2IJvXjxr3jxoIhX/4M3/43bNgfb+mDh7XszMwLEs6Udt0fq7Cyura+UdwsbW3v7O7Z+wcNFaeSYp3GPJatgCjkTGBdM82xlUgkUcCxGQxvJn7zAaVisbjXowT9iPQFCxkl2khd+7gTxpJw3sFHM0zN/7p2a24UzjLxMtJGXLUuvZ3pxfTNEKhKSdKtT030X5GpGaU47jUSRUmhA5JH9uGChKh8rPpFWPn1Cg9xyxgntDOVP3bkZFIqVEUmMqI6IFa9Cbif1471eGVnzGRpBoFnQ0KU+7o2JlE4vSYRKr5yBCJTO7OnRAJKHaBFcyIXiLJy+TxnFcyve3UW5ep3HUYQjOIEz8OASqnALNagDhSd4gTd4t56tV+vD+pyVFqy85xDmYH39AuRFmXM=</latexit><latexit sha1_base64="qozMT3JULEpjB/FRTLAVe2MsqCA=">ACBXicbVBNS8NAEJ3Ur1q/oh71ECyCp5KIoMeiF48V7Ae0oWy2k3bpZhN2N2IJvXjxr3jxoIhX/4M3/43bNgfb+mDh7XszMwLEs6Udt0fq7Cyura+UdwsbW3v7O7Z+wcNFaeSYp3GPJatgCjkTGBdM82xlUgkUcCxGQxvJn7zAaVisbjXowT9iPQFCxkl2khd+7gTxpJw3sFHM0zN/7p2a24UzjLxMtJGXLUuvZ3pxfTNEKhKSdKtT030X5GpGaU47jUSRUmhA5JH9uGChKh8rPpFWPn1Cg9xyxgntDOVP3bkZFIqVEUmMqI6IFa9Cbif1471eGVnzGRpBoFnQ0KU+7o2JlE4vSYRKr5yBCJTO7OnRAJKHaBFcyIXiLJy+TxnFcyve3UW5ep3HUYQjOIEz8OASqnALNagDhSd4gTd4t56tV+vD+pyVFqy85xDmYH39AuRFmXM=</latexit><latexit sha1_base64="qozMT3JULEpjB/FRTLAVe2MsqCA=">ACBXicbVBNS8NAEJ3Ur1q/oh71ECyCp5KIoMeiF48V7Ae0oWy2k3bpZhN2N2IJvXjxr3jxoIhX/4M3/43bNgfb+mDh7XszMwLEs6Udt0fq7Cyura+UdwsbW3v7O7Z+wcNFaeSYp3GPJatgCjkTGBdM82xlUgkUcCxGQxvJn7zAaVisbjXowT9iPQFCxkl2khd+7gTxpJw3sFHM0zN/7p2a24UzjLxMtJGXLUuvZ3pxfTNEKhKSdKtT030X5GpGaU47jUSRUmhA5JH9uGChKh8rPpFWPn1Cg9xyxgntDOVP3bkZFIqVEUmMqI6IFa9Cbif1471eGVnzGRpBoFnQ0KU+7o2JlE4vSYRKr5yBCJTO7OnRAJKHaBFcyIXiLJy+TxnFcyve3UW5ep3HUYQjOIEz8OASqnALNagDhSd4gTd4t56tV+vD+pyVFqy85xDmYH39AuRFmXM=</latexit><latexit sha1_base64="qozMT3JULEpjB/FRTLAVe2MsqCA=">ACBXicbVBNS8NAEJ3Ur1q/oh71ECyCp5KIoMeiF48V7Ae0oWy2k3bpZhN2N2IJvXjxr3jxoIhX/4M3/43bNgfb+mDh7XszMwLEs6Udt0fq7Cyura+UdwsbW3v7O7Z+wcNFaeSYp3GPJatgCjkTGBdM82xlUgkUcCxGQxvJn7zAaVisbjXowT9iPQFCxkl2khd+7gTxpJw3sFHM0zN/7p2a24UzjLxMtJGXLUuvZ3pxfTNEKhKSdKtT030X5GpGaU47jUSRUmhA5JH9uGChKh8rPpFWPn1Cg9xyxgntDOVP3bkZFIqVEUmMqI6IFa9Cbif1471eGVnzGRpBoFnQ0KU+7o2JlE4vSYRKr5yBCJTO7OnRAJKHaBFcyIXiLJy+TxnFcyve3UW5ep3HUYQjOIEz8OASqnALNagDhSd4gTd4t56tV+vD+pyVFqy85xDmYH39AuRFmXM=</latexit>

Quantifier alternation

Line Height

µx.P(x)

<latexit sha1_base64="h7kgmTrIJFqTWp1ApeqbiAsjAFA=">AB8nicbVBNS8NAEN34WetX1aOXxSLUS0hE0GPRi8cK9gPSUDbTbt0dxN2J9IS+jO8eFDEq7/Gm/GbZuDtj4YeLw3w8y8KBXcgOd9O2vrG5tb26Wd8u7e/sFh5ei4ZJMU9akiUh0JyKGCa5YEzgI1k1IzISrB2N7mZ+4lpwxP1CJOUhZIMFI85JWCloCszPHZxoza+6FWqnuvNgVeJX5AqKtDoVb6/YRmkimghgT+F4KYU40cCrYtNzNDEsJHZEBCyxVRDIT5vOTp/jcKn0cJ9qWAjxXf0/kRBozkZHtlASGZtmbif95QbxTZhzlWbAF0sijOBIcGz/3Gfa0ZBTCwhVHN7K6ZDogkFm1LZhuAv7xKWpeu7n+w1W1flvEUKn6AzVkI+uUR3dowZqIoS9Ixe0ZsDzovz7nwsWtecYuYE/YHz+QOcTJAl</latexit><latexit sha1_base64="h7kgmTrIJFqTWp1ApeqbiAsjAFA=">AB8nicbVBNS8NAEN34WetX1aOXxSLUS0hE0GPRi8cK9gPSUDbTbt0dxN2J9IS+jO8eFDEq7/Gm/GbZuDtj4YeLw3w8y8KBXcgOd9O2vrG5tb26Wd8u7e/sFh5ei4ZJMU9akiUh0JyKGCa5YEzgI1k1IzISrB2N7mZ+4lpwxP1CJOUhZIMFI85JWCloCszPHZxoza+6FWqnuvNgVeJX5AqKtDoVb6/YRmkimghgT+F4KYU40cCrYtNzNDEsJHZEBCyxVRDIT5vOTp/jcKn0cJ9qWAjxXf0/kRBozkZHtlASGZtmbif95QbxTZhzlWbAF0sijOBIcGz/3Gfa0ZBTCwhVHN7K6ZDogkFm1LZhuAv7xKWpeu7n+w1W1flvEUKn6AzVkI+uUR3dowZqIoS9Ixe0ZsDzovz7nwsWtecYuYE/YHz+QOcTJAl</latexit><latexit sha1_base64="h7kgmTrIJFqTWp1ApeqbiAsjAFA=">AB8nicbVBNS8NAEN34WetX1aOXxSLUS0hE0GPRi8cK9gPSUDbTbt0dxN2J9IS+jO8eFDEq7/Gm/GbZuDtj4YeLw3w8y8KBXcgOd9O2vrG5tb26Wd8u7e/sFh5ei4ZJMU9akiUh0JyKGCa5YEzgI1k1IzISrB2N7mZ+4lpwxP1CJOUhZIMFI85JWCloCszPHZxoza+6FWqnuvNgVeJX5AqKtDoVb6/YRmkimghgT+F4KYU40cCrYtNzNDEsJHZEBCyxVRDIT5vOTp/jcKn0cJ9qWAjxXf0/kRBozkZHtlASGZtmbif95QbxTZhzlWbAF0sijOBIcGz/3Gfa0ZBTCwhVHN7K6ZDogkFm1LZhuAv7xKWpeu7n+w1W1flvEUKn6AzVkI+uUR3dowZqIoS9Ixe0ZsDzovz7nwsWtecYuYE/YHz+QOcTJAl</latexit><latexit sha1_base64="h7kgmTrIJFqTWp1ApeqbiAsjAFA=">AB8nicbVBNS8NAEN34WetX1aOXxSLUS0hE0GPRi8cK9gPSUDbTbt0dxN2J9IS+jO8eFDEq7/Gm/GbZuDtj4YeLw3w8y8KBXcgOd9O2vrG5tb26Wd8u7e/sFh5ei4ZJMU9akiUh0JyKGCa5YEzgI1k1IzISrB2N7mZ+4lpwxP1CJOUhZIMFI85JWCloCszPHZxoza+6FWqnuvNgVeJX5AqKtDoVb6/YRmkimghgT+F4KYU40cCrYtNzNDEsJHZEBCyxVRDIT5vOTp/jcKn0cJ9qWAjxXf0/kRBozkZHtlASGZtmbif95QbxTZhzlWbAF0sijOBIcGz/3Gfa0ZBTCwhVHN7K6ZDogkFm1LZhuAv7xKWpeu7n+w1W1flvEUKn6AzVkI+uUR3dowZqIoS9Ixe0ZsDzovz7nwsWtecYuYE/YHz+QOcTJAl</latexit>

Fixpoints, reachability

Margin Collapsing

sort(L)

<latexit sha1_base64="ac9l9J4huw16ExGakxp1cCHZ1CQ=">AB+XicbVDLSgMxFM34rPU16tJNsAh1U2ZE0GXRjQsXFewD2qFk0kwbmkmG5E6hDP0TNy4UceufuPNvTKez0NYDgcM593JPTpgIbsDzvp219Y3Nre3STnl3b/g0D06bhmVasqaVAmlOyExTHDJmsBsE6iGYlDwdrh+G7utydMG67kE0wTFsRkKHnEKQEr9V23FxMYmSgzSsOs+nDRdytezcuBV4lfkAoq0Oi7X72BomnMJFBjOn6XgJBRjRwKtis3EsNSwgdkyHrWipJzEyQ5cln+NwqAxwpbZ8EnKu/NzISGzONQzuZ51z25uJ/XjeF6CbIuExSYJIuDkWpwKDwvAY84JpREFNLCNXcZsV0RDShYMsq2xL85S+vktZlzfdq/uNVpX5b1FCp+gMVZGPrlEd3aMGaiKJugZvaI3J3NenHfnYzG65hQ7J+gPnM8fd/aThw=</latexit><latexit sha1_base64="ac9l9J4huw16ExGakxp1cCHZ1CQ=">AB+XicbVDLSgMxFM34rPU16tJNsAh1U2ZE0GXRjQsXFewD2qFk0kwbmkmG5E6hDP0TNy4UceufuPNvTKez0NYDgcM593JPTpgIbsDzvp219Y3Nre3STnl3b/g0D06bhmVasqaVAmlOyExTHDJmsBsE6iGYlDwdrh+G7utydMG67kE0wTFsRkKHnEKQEr9V23FxMYmSgzSsOs+nDRdytezcuBV4lfkAoq0Oi7X72BomnMJFBjOn6XgJBRjRwKtis3EsNSwgdkyHrWipJzEyQ5cln+NwqAxwpbZ8EnKu/NzISGzONQzuZ51z25uJ/XjeF6CbIuExSYJIuDkWpwKDwvAY84JpREFNLCNXcZsV0RDShYMsq2xL85S+vktZlzfdq/uNVpX5b1FCp+gMVZGPrlEd3aMGaiKJugZvaI3J3NenHfnYzG65hQ7J+gPnM8fd/aThw=</latexit><latexit sha1_base64="ac9l9J4huw16ExGakxp1cCHZ1CQ=">AB+XicbVDLSgMxFM34rPU16tJNsAh1U2ZE0GXRjQsXFewD2qFk0kwbmkmG5E6hDP0TNy4UceufuPNvTKez0NYDgcM593JPTpgIbsDzvp219Y3Nre3STnl3b/g0D06bhmVasqaVAmlOyExTHDJmsBsE6iGYlDwdrh+G7utydMG67kE0wTFsRkKHnEKQEr9V23FxMYmSgzSsOs+nDRdytezcuBV4lfkAoq0Oi7X72BomnMJFBjOn6XgJBRjRwKtis3EsNSwgdkyHrWipJzEyQ5cln+NwqAxwpbZ8EnKu/NzISGzONQzuZ51z25uJ/XjeF6CbIuExSYJIuDkWpwKDwvAY84JpREFNLCNXcZsV0RDShYMsq2xL85S+vktZlzfdq/uNVpX5b1FCp+gMVZGPrlEd3aMGaiKJugZvaI3J3NenHfnYzG65hQ7J+gPnM8fd/aThw=</latexit><latexit sha1_base64="ac9l9J4huw16ExGakxp1cCHZ1CQ=">AB+XicbVDLSgMxFM34rPU16tJNsAh1U2ZE0GXRjQsXFewD2qFk0kwbmkmG5E6hDP0TNy4UceufuPNvTKez0NYDgcM593JPTpgIbsDzvp219Y3Nre3STnl3b/g0D06bhmVasqaVAmlOyExTHDJmsBsE6iGYlDwdrh+G7utydMG67kE0wTFsRkKHnEKQEr9V23FxMYmSgzSsOs+nDRdytezcuBV4lfkAoq0Oi7X72BomnMJFBjOn6XgJBRjRwKtis3EsNSwgdkyHrWipJzEyQ5cln+NwqAxwpbZ8EnKu/NzISGzONQzuZ51z25uJ/XjeF6CbIuExSYJIuDkWpwKDwvAY84JpREFNLCNXcZsV0RDShYMsq2xL85S+vktZlzfdq/uNVpX5b1FCp+gMVZGPrlEd3aMGaiKJugZvaI3J3NenHfnYzG65hQ7J+gPnM8fd/aThw=</latexit>

Data structures

Floating Layout

2 registers 5 registers 5k+2 registers

slide-26
SLIDE 26

VizAssert

  • r

+

(set-logic QF_LRA) (declare-type Box …) (declare-const b1 Box) (declare-const b2 Box) (assert (not …))

3.

SMT Query Renderings

1.

Visual Logic

∀b1, b2 ∈ B, b1 ∈ $(.search-button) ∧ b2 ∈ $(.toolbar) = ⇒ within(b1, b2)

<latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit>

2.

Guideline

Button visible

Z3

slide-27
SLIDE 27

VizAssert

  • r

+

(set-logic QF_LRA) (declare-type Box …) (declare-const b1 Box) (declare-const b2 Box) (assert (not …))

SMT Query

2.

Renderings

1.

Visual Logic

∀b1, b2 ∈ B, b1 ∈ $(.search-button) ∧ b2 ∈ $(.toolbar) = ⇒ within(b1, b2)

<latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit>

3.

Guideline

Button visible

Z3

slide-28
SLIDE 28

User constraints, ex. browser width > 600 Valid counterexample to assertion

SMT Query

val html = “<html><body>…</body></html>” val css = “#main { … }; p li { … }; …” abstract params : BrowserParams abstract layout : Rendering require layout = render (html, css, params) require ¬ P(layout)

slide-29
SLIDE 29

abstract params : BrowserParams abstract layout : Rendering

SMT Query

val html = “<html><body>…</body></html>” val css = “#main { … }; p li { … }; …” require layout = render (html, css, params) require ¬ P(layout) Query unsat Solver ¬P(layout)

k

∨ ¬ sufficient-k(layout) else k++

k

slide-30
SLIDE 30

VizAssert

  • r

+

(set-logic QF_LRA) (declare-type Box …) (declare-const b1 Box) (declare-const b2 Box) (assert (not …))

SMT Query

2.

Renderings

1.

Visual Logic

∀b1, b2 ∈ B, b1 ∈ $(.search-button) ∧ b2 ∈ $(.toolbar) = ⇒ within(b1, b2)

<latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit>

3.

Guideline

Button visible

Z3

slide-31
SLIDE 31

Z3

VizAssert

  • r

+

(set-logic QF_LRA) (declare-type Box …) (declare-const b1 Box) (declare-const b2 Box) (assert (not …))

3.

SMT Query

2.

Renderings

1.

Visual Logic

∀b1, b2 ∈ B, b1 ∈ $(.search-button) ∧ b2 ∈ $(.toolbar) = ⇒ within(b1, b2)

<latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit>

Evaluation

Guideline

Button visible

slide-32
SLIDE 32

14 Real-world Assertions

Text is at least 14px tall Main button is big enough Lines at most 80 characters Text not overlapping Contrast is sufficient Headings form hierarchy Columns vertically aligned …

Customize to page Design principles

slide-33
SLIDE 33

62 Real-World Web Pages

slide-34
SLIDE 34

Verified True Pos Timeout False Pos

VizAssert’s Results

Assertion Text size Button position Line width Alt text position No horiz. scroll Heading sizes Occluded text Line spacing High contrast Text on bg Hidden menu Align columns Visible text Button size Total (of 476) Assertion Verified Bug found False Positive Timeout Text size 38 18 3 3 Button position 59 1 1 1 Line width 39 18 3 2 Alt text position 36 No horiz. scroll 60 1 1 Heading sizes 39 21 2 Occluded text 53 2 5 2 Line spacing 59 3 High contrast 1 Text on bg 1 Hidden menu 1 Align columns 1 Visible text 1 Button size 1 Total (of 476) 388 64 13 11

Guarantees! No Customization Customized

slide-35
SLIDE 35

True positive

Small Title Big body

VizAssert’s Results

False positive Verified True Pos Timeout False Pos

slide-36
SLIDE 36

CSS Section VizAssert OOPSLA’16 Margins 93% 64% Collapsing 96% 10% Floats 90% 0% Float position 89% 0% Clearance 87% 0% Line height 70% 10% Leading 89% 18% Overall 91% 27%

Value of Finitization Reductions

Rediscovered two known Firefox bugs

And some purposeful deviations from the standard

CSS Section VizAssert Margins 93% Collapsing 96% Floats 90% Float position 89% Clearance 87% Line height 70% Leading 89% Overall (of 1009) 91%

slide-37
SLIDE 37

Time (seconds; log scale) Percentage of tested websites

Performance

Fast Most complex assertion

VizAssert Runtime CDF

slide-38
SLIDE 38

Future Work

Per-component reasoning

Reuse, incrementalization, caching, parallelization

ZACH WANTS MORE PAGES

slide-39
SLIDE 39

VizAssert

  • r

+

(set-logic QF_LRA) (declare-type Box …) (declare-const b1 Box) (declare-const b2 Box) (assert (not …))

3.

SMT Query

2.

Renderings

1.

Visual Logic

∀b1, b2 ∈ B, b1 ∈ $(.search-button) ∧ b2 ∈ $(.toolbar) = ⇒ within(b1, b2)

<latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit><latexit sha1_base64="CisXTKkR90TFzhWYa2lkiGz4zW4=">AChHicbVFdb9MwFHUCjFG+OnjkxaIwOqlUSQHBE5rGC49Dotukuqpu3JvVmNH9s2givJL+Fe8W9w0g7BxpVsHZ1zj30/slIrT0nyK4pv3b6zc3f3Xu/+g4ePHvf3npx4WzmJU2m1dWcZeNTK4JQUaTwrHUKRaTzNLj61+uklOq+s+UrEucFnBuVKwkUqEX/x7IrQOtebZIR+GacKEMFwXQSoKuj5qREL39IG74F0NB+J18Xo89gpOr1lFZE1zwIUGs+R1wzeGyR9D+1ZrIGt1Bq5NVUVoDn2XeqV/U7RSphleFXKw6A+ScdIFvwnSLRiwbRwv+j/F0sqQENSg/ezNClpXoMjJTU2PVF5LEFewDnOAjRQoJ/X3RAb/jIwSx6GEY4h3rF/O2ovF8XWcjsCr6uteT/tFlF+Yd5rUxZERq5+SivNCfL243wpXIoSa8DAOlUqJXLFTiQFPbWC0NIr7d8E5xMxmkyTr+8HRwebcexy56x52zIUvaeHbLP7JhNmYyi6FWURGm8E4/iN/G7TWocbT1P2T8Rf/wNjsm+bg=</latexit>

Evaluation

Guideline

Button visible

BGCOLOR

slide-40
SLIDE 40

Automated Verification of Web Page Layout

Visual Logic

Formalize layout properties

Novel semantics of CSS

Line height, margins, floats

Handles real web pages

95% verified or true positive

https:/ /cassius.uwplse.org

slide-41
SLIDE 41

Font Size: 16px Font Size: 24px Font Size: 32px

Image occludes button

renderings