Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation...

49
Towards verified compilation of CakeML into WebAssembly Lorenz Leutgeb [email protected] 2018-11-28 TU Wien (Austria) and Data61, CSIRO (Australia)

Transcript of Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation...

Page 1: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Towards verified compilationof CakeML into WebAssembly

Lorenz [email protected]

2018-11-28

TU Wien (Austria) and Data61, CSIRO (Australia)

Page 2: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

How this project came about…

• Previously: Bachelor’s in Software Engineering at TU Wien• Currently: European Master’s Program in Computational Logic

• TU Dresden, Germany, EU• Free University of Bolzano, Italy, EU• TU Wien, Austria, EU

• My project work is sponsored in part by EMCL and by Data61, andI am supervised by Michael Norrish.

2/36

Page 3: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Agenda

Prelude

Software Verification

Introduction

WebAssembly

CakeML

Translating CakeML to WebAssembly

Verification

Progress and Outlook

3/36

Page 4: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Prelude

Page 5: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Motivation

Software systems have “bugs”that lead to injury and death!

• Generally, when bugs mean human casualties or significantfinancial loss.

• Critical infrastructure from power plants to TLS implementations(Microsoft Research, F∗).

• Airplanes, weapon systems.• And yes, sometimes even operating systems (Data 61, seL4Linux).

4/36

Page 6: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

The question that programmers repeatedly ask themselves …

Does my code do what it should?

• Is it free of security vulnerabilities (that I can describe)?• Is it deadlock-free, e.g. will it remain responsive to some degreein any scenario?

• Does it implement what was specified?• Will all components that want to access a resource eventuallyaccess it?

5/36

Page 7: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Formal Verification vs. Testing

Unit testing? Each unit test covers one trace through theimplementation. However, there are infinitely manypossible traves. Therefore, unit testing is gravelylimited.

Other testing approaches? Might cover complex scenarios, but canalways only check for specific cases. Same problem.

You get formal proof, not a just green box in your test report! Makespossible new tools and answering new questions.

6/36

Page 8: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Business?

Mostly static analysis tools. Not many synthesis tools have beenpublished.

• DiffBlue Ltd. (17M GPB investment by Goldman Sachs and OxfordSciences Innovation in 2017)

• Infer (static analyzer by Facebook, Inc.)• Galois, Inc. (bootstrapped, founded dotcom times)• Automated Reasoning Group at Amazon, Software Analysis Teamat Google, Microsoft Research teams

• Chip manufacturers (ARM, Intel, Apple, Google, …)• Verified compilers are slowly moving from research to productstages.

7/36

Page 9: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)
Page 10: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Introduction

Page 11: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)
Page 12: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Processtypically one of:

Embeddertypically the JS runtime of a browser

Module

Module

Import/Export

Host FunctionM

emory

Filesystem?

Web APIs (Fetch, WebGL)

Function Table

Functions

Types

Service Worker

Web UI

Garbage Collection

Document Model of a Website

Page 13: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

What is WebAssembly?…

• A portable code format and instruction set architecture• Sandboxed, embedded by design• Open Standard, steered by a World Wide Web Consortiumworking group

• Actually supported by all major browser vendors• Supersedes PNaCl (portable native client, Google), asm.js(simple subset of JS, Mozilla)

• Within 10% of native code performance in the browser• Opens up browsers for other languages than JS

11/36

Page 14: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Design Goals

Semantics RepresentationLanguage independent CompactPlatform independent Easy to generateHardware independent Fast to decodeFast to execute Fast to validateSafe to execute Fast to compileDeterministic StreamableEasy to reason about Parallelisable

Taken from presentation “Neither Web nor Assembly” by AndreasRossberg (spec author).

12/36

Page 15: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Concrete Syntax by Example

S-Expression:(module(func $add(param i32 i32)(result i32)(i32.add ;; 3(get_local 0) ;; 1(get_local 1) ;; 2

))(export ”add” (func $add))

)

00 6100 6d73 0001 0000 0701 6001 7f02 017f10 037f 0102 0700 010a 6106 6464 7754 006f20 0a00 0109 0007 0020 0120 0b6a 1900 6e0430 6d61 0165 0109 0600 6461 5464 6f77 070240 0001 0002 0100 0000

Preferred by browsers, for bandwidth!

13/36

Page 16: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Concrete Syntax by Example

S-Expression:(module(func $add(param i32 i32)(result i32)(i32.add ;; 3(get_local 0) ;; 1(get_local 1) ;; 2

))(export ”add” (func $add))

)

00 6100 6d73 0001 0000 0701 6001 7f02 017f10 037f 0102 0700 010a 6106 6464 7754 006f20 0a00 0109 0007 0020 0120 0b6a 1900 6e0430 6d61 0165 0109 0600 6461 5464 6f77 070240 0001 0002 0100 0000

Preferred by browsers, for bandwidth!

Postfix notation:(module(func $fac

(param f64) (result f64)(get_local 0)(f64.const 1)f64.ltif (result f64)f64.const 1

elseget_local 0get_local 0f64.const 1f64.subcall $facf64.mul

end)

)13/36

Page 17: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Abstract Syntax

• InstructionsNumeric Constants, unary and binary operations, binary

relations, conversions.Variables get_local, set_local, get_global,

set_globalMemory load, store, size, grow

Control Flow if, loop, block, call. All of them have somenotion of a return type.

… and a few others.• Declarations for tables, memories, exports, imports, …

14/36

Page 18: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Semantics

• Statically as a type system (“embarassingly simple”)• Dynamically as a nondeterministic, relational small-stepreduction, and types extending the static setting.

• Combining these two, soundness provides:• Type Safety (locals, globals, instruction/function args)• Memory Safety (locals, globals, tables, memory)• No undefined behaviour (evaluation rules cover all cases and aremutually consistent)

• Encapsulation (scope of locals, module components according toimports/exports)

15/36

Page 19: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)
Page 20: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)
Page 21: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

18/36

Page 22: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

19/36

Page 23: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Soundness: Key Theorems

Preservation If ⊢ (S, T) : t and (S, T) ↪→ (S′, T′) then⊢ (S′, T′) : t and ⊢ S ⪯ S′.

Progress If ⊢ (S, T) : t theneither (S, T) is terminal or there is (S′, T′)s.t. (S, T) ↪→ (S′, T′).

Soundness If ⊢ (S, T) : t then(S, T) either diverges or takes a finite number of↪→-steps to reach a terminal configuration (S′, T′)s.t. ⊢ (S′, T′) : t.

Proofs mechanized in Isabelle/HOL in [?] based on the definitions onpaper in [?].

20/36

Page 24: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Maturity and Adoption i

• Specification officially (still) a draft, however widelyimplemented and used.

• Released a minimum viable product early on.• Formal specification, reference interpreter (OCaml) maintainedby spec authors.

• Many embedders in/compilers from various languages available(just search GitHub).

• Early Adopters: Gamers! Run all the flash minigames withWebAssembly.

• But now, it is possible to compile game engines from C/C++ tothe web!

• “Native performance on the web.”• Leveraging legacy codebases, i.e. PSPDFKit’s PDF handling library.• Standalone VM using LLVM IR and JIT

21/36

Page 25: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Future

• Multiple memories, 64bit addressable memory, multiple returnvalues

• Garbage collection (reference types, call_ref,{struct|array|i31ref}.new, more typing)

• Concurrency through threads (atomic operations, mutexes)• Exception handling (try/catch)• Tail Calls• SIMD

22/36

Page 26: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)
Page 27: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)
Page 28: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

A verified Implementation of ML i

• …as a compiler in Higher Order Logic.• First verified compiler of a functional programming language(POPL’14).

• Developed by team of 16+25 with many publications, please seewebsite!

25/36

Page 29: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

A verified Implementation of ML ii

• CakeML is a substantial subset of Standard ML.• Two frontends:

1. Translate from HOL to CakeML abstract syntax2. Parse CakeML concrete syntax

• Optimizing backend which targets x86, ARM, RISC-V, MIPS.Working on targeting WebAssembly.

• Can bootstrap inside HOL, i.e. compile itself via frontend 1.• Allows calls to a foreign function interface

26/36

Page 30: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)
Page 31: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Compiler Architecture

28/36

Page 32: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Translating CakeML toWebAssembly

Page 33: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Which intermediate language to compile from?

Looking for a language thatmatches WebAssembly’s features:

1. Operates on words2. ■ Manages memory3. ■ Local control flow4. ■ No register usageconventions

5. ■ Implicit stack?

29/36

Page 34: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Which intermediate language to compile from?

Looking for a language thatmatches WebAssembly’s features:1. Operates on words

2. ■ Manages memory3. ■ Local control flow4. ■ No register usageconventions

5. ■ Implicit stack?

29/36

Page 35: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Which intermediate language to compile from?

Looking for a language thatmatches WebAssembly’s features:1. Operates on words

2. ■ Manages memory3. ■ Local control flow4. ■ No register usageconventions

5. ■ Implicit stack?

29/36

Page 36: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Which intermediate language to compile from?

Looking for a language thatmatches WebAssembly’s features:1. Operates on words2. ■ Manages memory

3. ■ Local control flow4. ■ No register usageconventions

5. ■ Implicit stack?

29/36

Page 37: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Which intermediate language to compile from?

Looking for a language thatmatches WebAssembly’s features:1. Operates on words2. ■ Manages memory3. ■ Local control flow

4. ■ No register usageconventions

5. ■ Implicit stack?

29/36

Page 38: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Which intermediate language to compile from?

Looking for a language thatmatches WebAssembly’s features:1. Operates on words2. ■ Manages memory3. ■ Local control flow4. ■ No register usageconventions

5. ■ Implicit stack?

29/36

Page 39: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Which intermediate language to compile from?

Looking for a language thatmatches WebAssembly’s features:1. Operates on words2. ■ Manages memory3. ■ Local control flow4. ■ No register usageconventions

5. ■ Implicit stack?

29/36

Page 40: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Challenges ≈ mismatch(StackLang, WebAssembly)

What I need to “compile away”:

• No exception handling.• No tail recursive calls in WebAssembly!

1. Cannot use call/return without risk of stack overflows.2. Hence, emulate jumps in WebAsssembly!3. Jumps emulated by br_table which with local control flow.4. Cannot use if, loop, block, br.

Also: Provide a functional big-step semantics.

30/36

Page 41: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Implementation

stack_to_wasm

wasmLang(abstract syntax)

stackSem

wasmSem(deterministic, funct. small- and big-step)

wasmRelSem(nondeterministic, relational)

wasmSemanticPrimitives(aux for *Sem)

dep

depdep

equivalence

stackLangdep

dep

dep

p2

p1

Very close translationof wasm spec

thm

thm

wasmStaticSem(type system, validation)

dep

Frontend

wasm_binary(abstract syntax to bytes)

dep

stack_to_wasmProof

dep

dep

corr

ectn

ess

Output

31/36

Page 42: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Verification

Page 43: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Compiler Correctness Theorem

p1 s1 p2 s2

r1 s′1 r2 s′2

eval1 eval2

sims

compile

simr

sims

(∀ . . .) eval1 p1 s1 = (r1, s′1) ∧ sims s1 s2 ∧ compile p1 = p2 ∧ r1 ̸= Error−→

(∃ r2 s′2) eval2 p2 s2 = (r2, s′2) ∧ sims s′1 s′2 ∧ simr r1 r2

32/36

Page 44: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Progress and Outlook

Page 45: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Progress

• Mechanized static and dynamic semantics• Mechanized most of the initialization semantics• Specified an alternative dynamic semantics in functionalbig-step style

• Prototyped translation• Prepared the CakeML compiler architecture for integrating thenew target

• Proved some lemmas, mostly about the relation between thetwo semantics

• Thought about and formulated some …conjectures …• Prototyped a runtime to execute generated code in browser

33/36

Page 46: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

TODO

• Prove that all compiler output is valid WebAssembly• Prove compiler correctness

34/36

Page 47: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Recap

Prelude

Software Verification

Introduction

WebAssembly

CakeML

Translating CakeML to WebAssembly

Verification

Progress and Outlook

35/36

Page 48: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

Questions, please!

Or mail to [email protected]!

35/36

Page 49: Towards verified compilation of CakeML into WebAssembly · Towardsverifiedcompilation ofCakeMLintoWebAssembly LorenzLeutgeb lorenz@leutgeb.xyz 2018-11-28 TUWien(Austria) and Data61,CSIRO(Australia)

References i

A. Haas, A. Rossberg, D. L. Schuff, B. L. Titzer, M. Holman,D. Gohman, L. Wagner, A. Zakai, and J. F. Bastien.Bringing the web up to speed with webassembly.In A. Cohen and M. T. Vechev, editors, Proceedings of the 38thACM SIGPLAN Conference on Programming Language Design andImplementation, PLDI 2017, Barcelona, Spain, June 18-23, 2017,pages 185–200. ACM, 2017.

C. Watt.Mechanising and verifying the webassembly specification.In J. Andronick and A. P. Felty, editors, Proceedings of the 7th ACMSIGPLAN International Conference on Certified Programs andProofs, CPP 2018, Los Angeles, CA, USA, January 8-9, 2018, pages53–65. ACM, 2018.

36/36