From cec9347b728ff8c273254c5111c4363b82d862cc Mon Sep 17 00:00:00 2001 From: Michael Clarkson Date: Mon, 6 Jan 2025 15:32:28 -0500 Subject: [PATCH] Update textbook --- _sources/chapters/adv/curry-howard.ipynb | 22 +- _sources/chapters/basics/debugging.ipynb | 2 +- _sources/chapters/basics/expressions.ipynb | 98 ++++----- _sources/chapters/basics/functions.ipynb | 178 ++++++++--------- _sources/chapters/basics/printing.ipynb | 60 +++--- _sources/chapters/basics/toplevel.ipynb | 32 +-- .../correctness/black_glass_box.ipynb | 14 +- _sources/chapters/correctness/eq_spec.ipynb | 26 +-- .../chapters/correctness/function_docs.ipynb | 10 +- .../chapters/correctness/module_docs.ipynb | 18 +- .../correctness/proving_correctness.ipynb | 38 ++-- .../chapters/correctness/randomized.ipynb | 56 +++--- .../correctness/structural_induction.ipynb | 30 +-- .../chapters/data/algebraic_data_types.ipynb | 106 +++++----- _sources/chapters/data/assoc_list.ipynb | 10 +- _sources/chapters/data/exceptions.ipynb | 34 ++-- _sources/chapters/data/lists.ipynb | 86 ++++---- _sources/chapters/data/nats.ipynb | 24 +-- _sources/chapters/data/options.ipynb | 22 +- .../data/pattern_matching_advanced.ipynb | 14 +- _sources/chapters/data/records_tuples.ipynb | 26 +-- _sources/chapters/data/trees.ipynb | 32 +-- _sources/chapters/data/type_synonym.ipynb | 10 +- _sources/chapters/data/variants.ipynb | 18 +- _sources/chapters/ds/hash_tables.ipynb | 50 ++--- _sources/chapters/ds/memoization.ipynb | 30 +-- _sources/chapters/ds/monads.ipynb | 154 +++++++------- _sources/chapters/ds/parrays.ipynb | 46 ++--- _sources/chapters/ds/promises.ipynb | 58 +++--- _sources/chapters/ds/rb.ipynb | 22 +- _sources/chapters/ds/sequence.ipynb | 110 +++++----- _sources/chapters/hop/beyond_lists.ipynb | 24 +-- _sources/chapters/hop/currying.ipynb | 18 +- _sources/chapters/hop/filter.ipynb | 24 +-- _sources/chapters/hop/fold.ipynb | 70 +++---- _sources/chapters/hop/higher_order.ipynb | 42 ++-- _sources/chapters/hop/map.ipynb | 48 ++--- _sources/chapters/hop/pipelining.ipynb | 14 +- _sources/chapters/modules/encapsulation.ipynb | 136 ++++++------- .../modules/functional_data_structures.ipynb | 74 +++---- _sources/chapters/modules/functors.ipynb | 144 +++++++------- _sources/chapters/modules/includes.ipynb | 70 +++---- .../modules/module_type_constraints.ipynb | 68 +++---- _sources/chapters/modules/modules.ipynb | 154 +++++++------- _sources/chapters/modules/toplevel.ipynb | 40 ++-- _sources/chapters/mut/arrays.ipynb | 12 +- _sources/chapters/mut/mutable_fields.ipynb | 44 ++-- _sources/chapters/mut/refs.ipynb | 188 +++++++++--------- _sources/chapters/preface/about.ipynb | 6 +- ocaml_programming.pdf | Bin 2028942 -> 2028937 bytes searchindex.js | 2 +- 51 files changed, 1307 insertions(+), 1307 deletions(-) diff --git a/_sources/chapters/adv/curry-howard.ipynb b/_sources/chapters/adv/curry-howard.ipynb index 8855266..99b1521 100644 --- a/_sources/chapters/adv/curry-howard.ipynb +++ b/_sources/chapters/adv/curry-howard.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "bad1fbe2", + "id": "0cbf192e", "metadata": {}, "source": [ "# The Curry-Howard Correspondence\n", @@ -60,7 +60,7 @@ { "cell_type": "code", "execution_count": null, - "id": "90cb61be", + "id": "00d0d777", "metadata": {}, "outputs": [], "source": [ @@ -69,7 +69,7 @@ }, { "cell_type": "markdown", - "id": "5b0b401e", + "id": "d5e470ba", "metadata": {}, "source": [ "We could have called that type anything we wanted instead of `empty`; the\n", @@ -88,7 +88,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8e9a708e", + "id": "bfbc18da", "metadata": {}, "outputs": [], "source": [ @@ -99,7 +99,7 @@ }, { "cell_type": "markdown", - "id": "59f3d994", + "id": "9bab6d1c", "metadata": {}, "source": [ "We could think of `pair` as a function that takes in evidence for `'a` and\n", @@ -248,7 +248,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d014c190", + "id": "04b351c0", "metadata": {}, "outputs": [], "source": [ @@ -257,7 +257,7 @@ }, { "cell_type": "markdown", - "id": "a6e8ce31", + "id": "8814f479", "metadata": {}, "source": [ "A value `v` of that type is either `Left a`, where `a : 'a`; or `Right b`, where\n", @@ -291,7 +291,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3eb6075e", + "id": "1fb2f644", "metadata": {}, "outputs": [], "source": [ @@ -300,7 +300,7 @@ }, { "cell_type": "markdown", - "id": "1644b8cf", + "id": "0afc1ffa", "metadata": {}, "source": [ "Now if you enter this code in utop you will get no response:\n", @@ -319,7 +319,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7f7cabd1", + "id": "4b79835c", "metadata": { "tags": [ "raises-exception" @@ -332,7 +332,7 @@ }, { "cell_type": "markdown", - "id": "7db5558d", + "id": "fb7da075", "metadata": {}, "source": [ "Again, the expression type checks, but it never produces an actual value of type\n", diff --git a/_sources/chapters/basics/debugging.ipynb b/_sources/chapters/basics/debugging.ipynb index 721b3c2..80c7b05 100644 --- a/_sources/chapters/basics/debugging.ipynb +++ b/_sources/chapters/basics/debugging.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "d566ce0d", + "id": "0422d924", "metadata": {}, "source": [ "# Debugging\n", diff --git a/_sources/chapters/basics/expressions.ipynb b/_sources/chapters/basics/expressions.ipynb index b2fe0a4..9690d2c 100644 --- a/_sources/chapters/basics/expressions.ipynb +++ b/_sources/chapters/basics/expressions.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "ef69ae68", + "id": "7563c902", "metadata": {}, "source": [ "# Expressions\n", @@ -51,7 +51,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f1c59236", + "id": "70a63ddd", "metadata": {}, "outputs": [], "source": [ @@ -61,7 +61,7 @@ { "cell_type": "code", "execution_count": null, - "id": "eb0a9285", + "id": "65b12f43", "metadata": {}, "outputs": [], "source": [ @@ -71,7 +71,7 @@ { "cell_type": "code", "execution_count": null, - "id": "12fb88b4", + "id": "d27a5bf5", "metadata": { "tags": [ "raises-exception" @@ -84,7 +84,7 @@ }, { "cell_type": "markdown", - "id": "1467a3f4", + "id": "65277641", "metadata": {}, "source": [ "OCaml integers range from $-2^{62}$ to $2^{62}-1$ on modern platforms. They are\n", @@ -109,7 +109,7 @@ { "cell_type": "code", "execution_count": null, - "id": "038f853e", + "id": "d3c84889", "metadata": {}, "outputs": [], "source": [ @@ -119,7 +119,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1d6e21a7", + "id": "c14d7328", "metadata": {}, "outputs": [], "source": [ @@ -128,7 +128,7 @@ }, { "cell_type": "markdown", - "id": "99887dda", + "id": "aa1d4779", "metadata": {}, "source": [ "OCaml deliberately does not support operator overloading, Arithmetic operations\n", @@ -139,7 +139,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a76bed93", + "id": "7ce662de", "metadata": {}, "outputs": [], "source": [ @@ -149,7 +149,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c966a01e", + "id": "e622e1c5", "metadata": { "tags": [ "raises-exception" @@ -162,7 +162,7 @@ }, { "cell_type": "markdown", - "id": "869a152d", + "id": "b76e6381", "metadata": {}, "source": [ "OCaml will not automatically convert between `int` and `float`. If you want to\n", @@ -173,7 +173,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5a5e7c2d", + "id": "e452fcf1", "metadata": {}, "outputs": [], "source": [ @@ -182,7 +182,7 @@ }, { "cell_type": "markdown", - "id": "1a40fff6", + "id": "590adf1d", "metadata": {}, "source": [ "As in any language, the floating-point representation is approximate. That can\n", @@ -192,7 +192,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4d439537", + "id": "ff3e55ec", "metadata": {}, "outputs": [], "source": [ @@ -201,7 +201,7 @@ }, { "cell_type": "markdown", - "id": "1bffbff2", + "id": "4da4c258", "metadata": {}, "source": [ "The same behavior can be observed in Python and Java, too. If you haven't\n", @@ -229,7 +229,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7438965f", + "id": "94cb9d7e", "metadata": {}, "outputs": [], "source": [ @@ -238,7 +238,7 @@ }, { "cell_type": "markdown", - "id": "edf323eb", + "id": "16ddb048", "metadata": {}, "source": [ "Object-oriented languages often provide an overridable method for converting\n", @@ -253,7 +253,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3f2b23e6", + "id": "1daf2cf3", "metadata": {}, "outputs": [], "source": [ @@ -263,7 +263,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8cce6ef2", + "id": "11e2ffcc", "metadata": {}, "outputs": [], "source": [ @@ -272,7 +272,7 @@ }, { "cell_type": "markdown", - "id": "34df74de", + "id": "57475c8c", "metadata": {}, "source": [ "Likewise, for the same three primitive types, there are built-in functions to\n", @@ -283,7 +283,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ee4d7030", + "id": "4eae4e61", "metadata": {}, "outputs": [], "source": [ @@ -293,7 +293,7 @@ { "cell_type": "code", "execution_count": null, - "id": "33cb0e99", + "id": "ad78fcb0", "metadata": { "tags": [ "raises-exception" @@ -306,7 +306,7 @@ }, { "cell_type": "markdown", - "id": "35050f8b", + "id": "d70a6777", "metadata": {}, "source": [ "There is no `char_of_string`, but the individual characters of a string can be\n", @@ -317,7 +317,7 @@ { "cell_type": "code", "execution_count": null, - "id": "41738e4c", + "id": "664b1fee", "metadata": {}, "outputs": [], "source": [ @@ -327,7 +327,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d17fc174", + "id": "9d3a5493", "metadata": {}, "outputs": [], "source": [ @@ -337,7 +337,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e978cc7d", + "id": "69f2249d", "metadata": { "tags": [ "raises-exception" @@ -350,7 +350,7 @@ }, { "cell_type": "markdown", - "id": "b286a2a2", + "id": "1967f751", "metadata": {}, "source": [ "## More Operators\n", @@ -403,7 +403,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bce6649f", + "id": "b426ea0d", "metadata": {}, "outputs": [], "source": [ @@ -412,7 +412,7 @@ }, { "cell_type": "markdown", - "id": "dd8f3c7d", + "id": "f54f11f6", "metadata": {}, "source": [ "Unlike `if-then-else` *statements* that you may have used in imperative\n", @@ -425,7 +425,7 @@ { "cell_type": "code", "execution_count": null, - "id": "25b23a4b", + "id": "777be2ba", "metadata": {}, "outputs": [], "source": [ @@ -434,7 +434,7 @@ }, { "cell_type": "markdown", - "id": "42624895", + "id": "db1b1436", "metadata": {}, "source": [ "`If` expressions can be nested in a pleasant way:\n", @@ -455,7 +455,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ad3592af", + "id": "912fbf70", "metadata": { "tags": [ "raises-exception" @@ -468,7 +468,7 @@ }, { "cell_type": "markdown", - "id": "435d0b11", + "id": "d93889dd", "metadata": {}, "source": [ "**Syntax.** The syntax of an `if` expression:\n", @@ -523,7 +523,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6e424d8b", + "id": "15720461", "metadata": {}, "outputs": [], "source": [ @@ -532,7 +532,7 @@ }, { "cell_type": "markdown", - "id": "2a4429f0", + "id": "63c992dd", "metadata": {}, "source": [ "In the above example, variable `x` has type `int`, which is what the colon\n", @@ -549,7 +549,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3290b8ae", + "id": "30e95efd", "metadata": {}, "outputs": [], "source": [ @@ -558,7 +558,7 @@ }, { "cell_type": "markdown", - "id": "e9a83653", + "id": "96e087a4", "metadata": {}, "source": [ "defines `x` to be 42, after which we can use `x` in future definitions at the\n", @@ -570,7 +570,7 @@ { "cell_type": "code", "execution_count": null, - "id": "442bc926", + "id": "73737025", "metadata": {}, "outputs": [], "source": [ @@ -579,7 +579,7 @@ }, { "cell_type": "markdown", - "id": "8e5898e3", + "id": "c44b8304", "metadata": {}, "source": [ "Here we're *binding* a value to the name `x` then using that binding inside\n", @@ -592,7 +592,7 @@ { "cell_type": "code", "execution_count": null, - "id": "789b83b5", + "id": "b2562af3", "metadata": { "tags": [ "raises-exception" @@ -605,7 +605,7 @@ }, { "cell_type": "markdown", - "id": "4db8b558", + "id": "4e9bf01e", "metadata": {}, "source": [ "Syntactically, a `let` definition is not permitted on the left-hand side of the\n", @@ -616,7 +616,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bd1ee920", + "id": "9d5b9d82", "metadata": {}, "outputs": [], "source": [ @@ -625,7 +625,7 @@ }, { "cell_type": "markdown", - "id": "3b266910", + "id": "059d73b1", "metadata": {}, "source": [ "Another way to understand let definitions at the toplevel is that they are like\n", @@ -841,7 +841,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4f4d54bd", + "id": "36e07d86", "metadata": {}, "outputs": [], "source": [ @@ -850,7 +850,7 @@ }, { "cell_type": "markdown", - "id": "6075d132", + "id": "1cf86575", "metadata": {}, "source": [ "An incorrect annotation will produce a compile-time error:" @@ -859,7 +859,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e3b29e90", + "id": "0478d976", "metadata": { "tags": [ "raises-exception" @@ -872,7 +872,7 @@ }, { "cell_type": "markdown", - "id": "a22dc984", + "id": "9c02a646", "metadata": {}, "source": [ "And that example shows why you might use manual type annotations during\n", @@ -889,7 +889,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3c159d0b", + "id": "7af4ac6e", "metadata": { "tags": [ "raises-exception" @@ -902,7 +902,7 @@ }, { "cell_type": "markdown", - "id": "5d9e9e57", + "id": "fce01015", "metadata": {}, "source": [ "It's clear that the type annotation has failed. Although that might seem silly\n", diff --git a/_sources/chapters/basics/functions.ipynb b/_sources/chapters/basics/functions.ipynb index f979592..56e8ef8 100644 --- a/_sources/chapters/basics/functions.ipynb +++ b/_sources/chapters/basics/functions.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "19ed39df", + "id": "fa992f72", "metadata": {}, "source": [ "# Functions\n", @@ -71,7 +71,7 @@ { "cell_type": "code", "execution_count": null, - "id": "50ed8a45", + "id": "acd50b2e", "metadata": {}, "outputs": [], "source": [ @@ -82,7 +82,7 @@ }, { "cell_type": "markdown", - "id": "da62f40c", + "id": "a0874135", "metadata": {}, "source": [ "We provided a specification comment above the function to document the\n", @@ -108,7 +108,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4aebd630", + "id": "01034e32", "metadata": {}, "outputs": [], "source": [ @@ -119,7 +119,7 @@ }, { "cell_type": "markdown", - "id": "4d435813", + "id": "01ecf438", "metadata": {}, "source": [ "Note how we didn't have to write any types in either of our functions: the OCaml\n", @@ -180,7 +180,7 @@ { "cell_type": "code", "execution_count": null, - "id": "07063c84", + "id": "e7e47df2", "metadata": {}, "outputs": [], "source": [ @@ -197,7 +197,7 @@ }, { "cell_type": "markdown", - "id": "1a242fa9", + "id": "485e6724", "metadata": {}, "source": [ "{{ video_embed | replace(\"%%VID%%\", \"W0rO84YXIXo\")}}\n", @@ -245,7 +245,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fd82a569", + "id": "b7871d38", "metadata": {}, "outputs": [], "source": [ @@ -254,7 +254,7 @@ }, { "cell_type": "markdown", - "id": "3786a5bb", + "id": "b87d1acc", "metadata": {}, "source": [ "Or we can bind it to a name:" @@ -263,7 +263,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b7eb5e5e", + "id": "b76367df", "metadata": {}, "outputs": [], "source": [ @@ -272,7 +272,7 @@ }, { "cell_type": "markdown", - "id": "c45eeca8", + "id": "f33fe56b", "metadata": {}, "source": [ "Similarly, OCaml functions do not have to have names; they may be *anonymous*.\n", @@ -286,7 +286,7 @@ { "cell_type": "code", "execution_count": null, - "id": "dd2054d5", + "id": "976dae1c", "metadata": {}, "outputs": [], "source": [ @@ -296,7 +296,7 @@ }, { "cell_type": "markdown", - "id": "553edccc", + "id": "e7af7d6a", "metadata": {}, "source": [ "They are syntactically different but semantically equivalent. That is, even\n", @@ -391,7 +391,7 @@ { "cell_type": "code", "execution_count": null, - "id": "aa13cc94", + "id": "45ba3015", "metadata": {}, "outputs": [], "source": [ @@ -400,7 +400,7 @@ }, { "cell_type": "markdown", - "id": "72e301e4", + "id": "4020001b", "metadata": {}, "source": [ "Here are two equivalent ways of squaring `6`:" @@ -409,7 +409,7 @@ { "cell_type": "code", "execution_count": null, - "id": "76380e6f", + "id": "fe26055c", "metadata": {}, "outputs": [], "source": [ @@ -419,7 +419,7 @@ }, { "cell_type": "markdown", - "id": "f7b70c35", + "id": "b1fdbfcc", "metadata": {}, "source": [ "The latter uses the pipeline operator to send `5` through the `inc` function,\n", @@ -434,7 +434,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b575305f", + "id": "c1eab653", "metadata": {}, "outputs": [], "source": [ @@ -444,7 +444,7 @@ }, { "cell_type": "markdown", - "id": "bab41fc5", + "id": "3cb64b96", "metadata": {}, "source": [ "It might feel weird at first, but try using the pipeline operator in your own\n", @@ -466,7 +466,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7ad48aa3", + "id": "2f25b8d1", "metadata": {}, "outputs": [], "source": [ @@ -475,7 +475,7 @@ }, { "cell_type": "markdown", - "id": "d29a7dce", + "id": "9820df94", "metadata": {}, "source": [ "Or equivalently as an anonymous function:" @@ -484,7 +484,7 @@ { "cell_type": "code", "execution_count": null, - "id": "31a9d08b", + "id": "920dbd55", "metadata": {}, "outputs": [], "source": [ @@ -493,7 +493,7 @@ }, { "cell_type": "markdown", - "id": "44ad3029", + "id": "cbc155e1", "metadata": {}, "source": [ "The `'a` is a *type variable*: it stands for an unknown type, just like a\n", @@ -507,7 +507,7 @@ { "cell_type": "code", "execution_count": null, - "id": "47c93782", + "id": "4b24b488", "metadata": {}, "outputs": [], "source": [ @@ -518,7 +518,7 @@ }, { "cell_type": "markdown", - "id": "7f8f41dc", + "id": "cf7b7323", "metadata": {}, "source": [ "Because you can apply `id` to many types of values, it is a *polymorphic*\n", @@ -532,7 +532,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0d30b9c4", + "id": "7aa192a6", "metadata": {}, "outputs": [], "source": [ @@ -541,7 +541,7 @@ }, { "cell_type": "markdown", - "id": "d52a5ce8", + "id": "1c2a086f", "metadata": {}, "source": [ "That's the same function as `id`, except for the two manual type annotations.\n", @@ -551,7 +551,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e920665a", + "id": "a4dade1e", "metadata": { "tags": [ "raises-exception" @@ -564,7 +564,7 @@ }, { "cell_type": "markdown", - "id": "4ae019bf", + "id": "91fdb996", "metadata": {}, "source": [ "Another way of writing `id_int` would be in terms of `id`:" @@ -573,7 +573,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0a7f90d7", + "id": "1d372344", "metadata": {}, "outputs": [], "source": [ @@ -582,7 +582,7 @@ }, { "cell_type": "markdown", - "id": "798f2a43", + "id": "fbc46938", "metadata": {}, "source": [ "In effect, we took a value of type `'a -> 'a`, and we bound it to a name whose\n", @@ -609,7 +609,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d03924cb", + "id": "ebf24287", "metadata": {}, "outputs": [], "source": [ @@ -618,7 +618,7 @@ }, { "cell_type": "markdown", - "id": "275fa166", + "id": "15014435", "metadata": {}, "source": [ "Function `id'` is actually the increment function, not the identity function. So\n", @@ -631,7 +631,7 @@ { "cell_type": "code", "execution_count": null, - "id": "be01f06b", + "id": "e67cae10", "metadata": { "tags": [ "raises-exception" @@ -644,7 +644,7 @@ }, { "cell_type": "markdown", - "id": "9c18218c", + "id": "6d4de06e", "metadata": {}, "source": [ "That leads us to another, more mechanical, way to think about all of this in\n", @@ -657,7 +657,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1111d028", + "id": "a6d7f2c3", "metadata": {}, "outputs": [], "source": [ @@ -666,7 +666,7 @@ }, { "cell_type": "markdown", - "id": "1e8c051d", + "id": "9398d397", "metadata": {}, "source": [ "we are in fact instantiating the `'a` in the type of `id` with the type `int`.\n", @@ -693,7 +693,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d588a21e", + "id": "79c10258", "metadata": { "tags": [ "raises-exception" @@ -708,7 +708,7 @@ }, { "cell_type": "markdown", - "id": "c8720c9d", + "id": "17c33918", "metadata": {}, "source": [ "## Labeled and Optional Arguments\n", @@ -724,7 +724,7 @@ { "cell_type": "code", "execution_count": null, - "id": "dba02902", + "id": "1b1aaefe", "metadata": {}, "outputs": [], "source": [ @@ -733,7 +733,7 @@ }, { "cell_type": "markdown", - "id": "991e3a3f", + "id": "1d85892c", "metadata": {}, "source": [ "But it's not clear from the type how to use it—you're forced to consult\n", @@ -746,7 +746,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e3f80b22", + "id": "305eb564", "metadata": {}, "outputs": [], "source": [ @@ -755,7 +755,7 @@ }, { "cell_type": "markdown", - "id": "8eae1808", + "id": "30211aaa", "metadata": {}, "source": [ "This function can be called by passing the labeled arguments in either order:\n", @@ -790,7 +790,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0f69f2d9", + "id": "51686066", "metadata": {}, "outputs": [], "source": [ @@ -799,7 +799,7 @@ }, { "cell_type": "markdown", - "id": "4cda57aa", + "id": "4508c2ec", "metadata": {}, "source": [ "You can then call a function with or without the argument:" @@ -808,7 +808,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a250b813", + "id": "cecdfa75", "metadata": {}, "outputs": [], "source": [ @@ -818,7 +818,7 @@ { "cell_type": "code", "execution_count": null, - "id": "153fe118", + "id": "5d3c1549", "metadata": {}, "outputs": [], "source": [ @@ -827,7 +827,7 @@ }, { "cell_type": "markdown", - "id": "1fec280c", + "id": "4ae1680e", "metadata": {}, "source": [ "## Partial Application\n", @@ -840,7 +840,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4e43bdfa", + "id": "ee409b79", "metadata": {}, "outputs": [], "source": [ @@ -849,7 +849,7 @@ }, { "cell_type": "markdown", - "id": "210a8598", + "id": "f060a2b7", "metadata": {}, "source": [ "Here's a rather similar function:" @@ -858,7 +858,7 @@ { "cell_type": "code", "execution_count": null, - "id": "650a905a", + "id": "0d8f4f63", "metadata": {}, "outputs": [], "source": [ @@ -867,7 +867,7 @@ }, { "cell_type": "markdown", - "id": "124d51d5", + "id": "775a9663", "metadata": {}, "source": [ "Function `addx` takes an integer `x` as input and returns a *function* of type\n", @@ -882,7 +882,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4f56aadf", + "id": "5843c4a9", "metadata": {}, "outputs": [], "source": [ @@ -892,7 +892,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ddea8047", + "id": "4405ea14", "metadata": {}, "outputs": [], "source": [ @@ -901,7 +901,7 @@ }, { "cell_type": "markdown", - "id": "1ce50b6e", + "id": "75cf06d5", "metadata": {}, "source": [ "It turns out the same can be done with `add`:" @@ -910,7 +910,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b7727312", + "id": "b45975b2", "metadata": {}, "outputs": [], "source": [ @@ -920,7 +920,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a60ddc3c", + "id": "ad041830", "metadata": {}, "outputs": [], "source": [ @@ -929,7 +929,7 @@ }, { "cell_type": "markdown", - "id": "c0e4a174", + "id": "4467dce4", "metadata": {}, "source": [ "What we just did is called *partial application*: we partially applied the\n", @@ -1020,7 +1020,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7c8283cd", + "id": "b7a03d3c", "metadata": {}, "outputs": [], "source": [ @@ -1030,7 +1030,7 @@ { "cell_type": "code", "execution_count": null, - "id": "87e8856a", + "id": "c8fe408d", "metadata": {}, "outputs": [], "source": [ @@ -1040,7 +1040,7 @@ { "cell_type": "code", "execution_count": null, - "id": "67831d21", + "id": "19315840", "metadata": {}, "outputs": [], "source": [ @@ -1050,7 +1050,7 @@ { "cell_type": "code", "execution_count": null, - "id": "90649e27", + "id": "2733f6a8", "metadata": {}, "outputs": [], "source": [ @@ -1059,7 +1059,7 @@ }, { "cell_type": "markdown", - "id": "1c85b416", + "id": "5863511e", "metadata": {}, "source": [ "The same technique works for any built-in operator.\n", @@ -1087,7 +1087,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b45d704b", + "id": "f7d99062", "metadata": {}, "outputs": [], "source": [ @@ -1099,7 +1099,7 @@ }, { "cell_type": "markdown", - "id": "5d0a7ea6", + "id": "07a99720", "metadata": {}, "source": [ "Counting to 10 is no problem:" @@ -1108,7 +1108,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ac7d6aff", + "id": "2a1222d4", "metadata": {}, "outputs": [], "source": [ @@ -1117,7 +1117,7 @@ }, { "cell_type": "markdown", - "id": "90caf06f", + "id": "b3d8e822", "metadata": {}, "source": [ "Counting to 100,000 is no problem either:" @@ -1126,7 +1126,7 @@ { "cell_type": "code", "execution_count": null, - "id": "02a9f3b1", + "id": "31286d77", "metadata": {}, "outputs": [], "source": [ @@ -1135,7 +1135,7 @@ }, { "cell_type": "markdown", - "id": "b132b28a", + "id": "e38f59fa", "metadata": {}, "source": [ "But try counting to 1,000,000 and you'll get the following error:\n", @@ -1167,7 +1167,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f5b23c60", + "id": "90a11dc4", "metadata": {}, "outputs": [], "source": [ @@ -1176,7 +1176,7 @@ }, { "cell_type": "markdown", - "id": "52d37c99", + "id": "751b2f01", "metadata": {}, "source": [ "So the operating system for safety's sake limits the call stack size. That means\n", @@ -1201,7 +1201,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bde68557", + "id": "5ab9b2e9", "metadata": {}, "outputs": [], "source": [ @@ -1211,7 +1211,7 @@ }, { "cell_type": "markdown", - "id": "e1b9c646", + "id": "018d2b29", "metadata": {}, "source": [ "Rather, after the recursive call `count (n - 1)`, there is computation\n", @@ -1225,7 +1225,7 @@ { "cell_type": "code", "execution_count": null, - "id": "eeb50d92", + "id": "48886e7a", "metadata": {}, "outputs": [], "source": [ @@ -1237,7 +1237,7 @@ }, { "cell_type": "markdown", - "id": "890d5ac1", + "id": "800b1707", "metadata": {}, "source": [ "Function `count_aux` is almost the same as our original `count`, but it adds an\n", @@ -1269,7 +1269,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1d42f36d", + "id": "128e2efe", "metadata": { "tags": [ "remove-output" @@ -1286,7 +1286,7 @@ }, { "cell_type": "markdown", - "id": "d85fe72f", + "id": "8e90891e", "metadata": {}, "source": [ "Here's why tail position matters: **A recursive call in tail position does not\n", @@ -1310,7 +1310,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fb82104d", + "id": "72ae5602", "metadata": {}, "outputs": [], "source": [ @@ -1319,7 +1319,7 @@ }, { "cell_type": "markdown", - "id": "6c4eace4", + "id": "91b76540", "metadata": {}, "source": [ "Finally, why did we name this function `count_tr`? The \"tr\" stands for *tail\n", @@ -1361,7 +1361,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2cf78659", + "id": "3f478bc7", "metadata": {}, "outputs": [], "source": [ @@ -1372,7 +1372,7 @@ }, { "cell_type": "markdown", - "id": "b26a3dfb", + "id": "926bf41b", "metadata": {}, "source": [ "First, we change its name and add an accumulator argument:\n", @@ -1402,7 +1402,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9aaa22e5", + "id": "f5af3447", "metadata": {}, "outputs": [], "source": [ @@ -1414,7 +1414,7 @@ }, { "cell_type": "markdown", - "id": "44e7826e", + "id": "e05bd21d", "metadata": {}, "source": [ "It was a nice exercise, but maybe not worthwhile. Even before we exhaust the\n", @@ -1424,7 +1424,7 @@ { "cell_type": "code", "execution_count": null, - "id": "309ab121", + "id": "1132a1a1", "metadata": {}, "outputs": [], "source": [ @@ -1433,7 +1433,7 @@ }, { "cell_type": "markdown", - "id": "16e6a3a6", + "id": "6ae328bd", "metadata": {}, "source": [ "To solve that problem, we turn to OCaml's big integer library,\n", @@ -1448,7 +1448,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c1cdd432", + "id": "a817c4f1", "metadata": { "tags": [ "remove-cell" @@ -1462,7 +1462,7 @@ { "cell_type": "code", "execution_count": null, - "id": "318f0dcb", + "id": "8da7fcfe", "metadata": { "tags": [ "remove-output" @@ -1476,7 +1476,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8052f309", + "id": "529b30b7", "metadata": {}, "outputs": [], "source": [ @@ -1490,7 +1490,7 @@ }, { "cell_type": "markdown", - "id": "e4a18648", + "id": "9934b9cb", "metadata": {}, "source": [ "If you want you can use that code to compute `zfact_tr 1_000_000` without stack\n", diff --git a/_sources/chapters/basics/printing.ipynb b/_sources/chapters/basics/printing.ipynb index 15eb44e..2cac0f1 100644 --- a/_sources/chapters/basics/printing.ipynb +++ b/_sources/chapters/basics/printing.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "73c77085", + "id": "9ff645f6", "metadata": {}, "source": [ "# Printing\n", @@ -16,7 +16,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8cfb69e0", + "id": "c4abd0aa", "metadata": {}, "outputs": [], "source": [ @@ -25,7 +25,7 @@ }, { "cell_type": "markdown", - "id": "2ddd7712", + "id": "b4e8e8cc", "metadata": {}, "source": [ "## Unit\n", @@ -36,7 +36,7 @@ { "cell_type": "code", "execution_count": null, - "id": "68c48cf2", + "id": "83aa75b3", "metadata": {}, "outputs": [], "source": [ @@ -46,7 +46,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4154135a", + "id": "70c4ba9a", "metadata": {}, "outputs": [], "source": [ @@ -55,7 +55,7 @@ }, { "cell_type": "markdown", - "id": "9326e4ab", + "id": "75f96b68", "metadata": {}, "source": [ "They both take a string as input and return a value of type `unit`, which we\n", @@ -78,7 +78,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bbd34166", + "id": "01ccd905", "metadata": {}, "outputs": [], "source": [ @@ -89,7 +89,7 @@ }, { "cell_type": "markdown", - "id": "7e10438d", + "id": "a1c000cb", "metadata": {}, "source": [ "The `let _ = e` syntax above is a way of evaluating `e` but not binding\n", @@ -102,7 +102,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3b37aa46", + "id": "591b441a", "metadata": {}, "outputs": [], "source": [ @@ -113,7 +113,7 @@ }, { "cell_type": "markdown", - "id": "c24d3a96", + "id": "b85ad327", "metadata": {}, "source": [ "But either way the boilerplate of all the `let..in` is annoying to have to\n", @@ -126,7 +126,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b0df2a47", + "id": "8d7f524f", "metadata": {}, "outputs": [], "source": [ @@ -137,7 +137,7 @@ }, { "cell_type": "markdown", - "id": "0495dce5", + "id": "fdf9bfb0", "metadata": {}, "source": [ "That is more idiomatic OCaml code, and it also looks more natural to imperative\n", @@ -162,7 +162,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b1ad8806", + "id": "679e7a2b", "metadata": {}, "outputs": [], "source": [ @@ -171,7 +171,7 @@ }, { "cell_type": "markdown", - "id": "78f079a9", + "id": "49053fb0", "metadata": {}, "source": [ "Actually `ignore` is easy to implement yourself:" @@ -180,7 +180,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f79217b2", + "id": "84257f97", "metadata": {}, "outputs": [], "source": [ @@ -189,7 +189,7 @@ }, { "cell_type": "markdown", - "id": "badde613", + "id": "3a910b35", "metadata": {}, "source": [ "Or you can even write underscore to indicate the function takes in a value but\n", @@ -200,7 +200,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1f5cd82c", + "id": "0d17a4e2", "metadata": {}, "outputs": [], "source": [ @@ -209,7 +209,7 @@ }, { "cell_type": "markdown", - "id": "cf45d8f7", + "id": "0678d077", "metadata": {}, "source": [ "## Printf\n", @@ -222,7 +222,7 @@ { "cell_type": "code", "execution_count": null, - "id": "49073c74", + "id": "c0e97915", "metadata": {}, "outputs": [], "source": [ @@ -237,7 +237,7 @@ { "cell_type": "code", "execution_count": null, - "id": "69e7fe33", + "id": "6bba4dd4", "metadata": {}, "outputs": [], "source": [ @@ -246,7 +246,7 @@ }, { "cell_type": "markdown", - "id": "874a18bb", + "id": "08aadffa", "metadata": {}, "source": [ "How could we shorten `print_stat`? In Java you might use the overloaded `+`\n", @@ -275,7 +275,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1dd96432", + "id": "2c455312", "metadata": {}, "outputs": [], "source": [ @@ -286,7 +286,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8275af1e", + "id": "fefaf56f", "metadata": {}, "outputs": [], "source": [ @@ -295,7 +295,7 @@ }, { "cell_type": "markdown", - "id": "ecb6f762", + "id": "da77cf54", "metadata": {}, "source": [ "The first argument to function `Printf.printf` is the format specifier. It\n", @@ -341,7 +341,7 @@ { "cell_type": "code", "execution_count": null, - "id": "667e746f", + "id": "23777b0d", "metadata": { "tags": [ "raises-exception" @@ -355,7 +355,7 @@ }, { "cell_type": "markdown", - "id": "265d30ca", + "id": "f0020921", "metadata": {}, "source": [ "To fix that, we can change to the conversion specifier for `int`, which is `%i`:" @@ -364,7 +364,7 @@ { "cell_type": "code", "execution_count": null, - "id": "19e46728", + "id": "51cf4015", "metadata": {}, "outputs": [], "source": [ @@ -374,7 +374,7 @@ }, { "cell_type": "markdown", - "id": "f8c2a0db", + "id": "6d61e000", "metadata": {}, "source": [ "Another very useful variant of `printf` is `sprintf`, which collects the output\n", @@ -384,7 +384,7 @@ { "cell_type": "code", "execution_count": null, - "id": "97f44eda", + "id": "f97a970b", "metadata": {}, "outputs": [], "source": [ @@ -395,7 +395,7 @@ { "cell_type": "code", "execution_count": null, - "id": "537040f4", + "id": "61cf2d1b", "metadata": {}, "outputs": [], "source": [ diff --git a/_sources/chapters/basics/toplevel.ipynb b/_sources/chapters/basics/toplevel.ipynb index 2ff6647..f9ea51d 100644 --- a/_sources/chapters/basics/toplevel.ipynb +++ b/_sources/chapters/basics/toplevel.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "4f81d161", + "id": "7be83836", "metadata": {}, "source": [ "# The OCaml Toplevel\n", @@ -50,7 +50,7 @@ { "cell_type": "code", "execution_count": null, - "id": "de43b32f", + "id": "a9bfea7e", "metadata": {}, "outputs": [], "source": [ @@ -59,7 +59,7 @@ }, { "cell_type": "markdown", - "id": "923998fe", + "id": "7ef85c71", "metadata": {}, "source": [ "The first code block with the `42` in it is the code we asked OCaml to run. If\n", @@ -89,7 +89,7 @@ { "cell_type": "code", "execution_count": null, - "id": "22102774", + "id": "3243ccb3", "metadata": {}, "outputs": [], "source": [ @@ -98,7 +98,7 @@ }, { "cell_type": "markdown", - "id": "939d1721", + "id": "b9d94cad", "metadata": {}, "source": [ "Again, let's dissect that response, this time reading left to right:\n", @@ -118,7 +118,7 @@ { "cell_type": "code", "execution_count": null, - "id": "969c0718", + "id": "e7d8fea4", "metadata": {}, "outputs": [], "source": [ @@ -127,7 +127,7 @@ }, { "cell_type": "markdown", - "id": "7d9f2b6d", + "id": "0bbe26bf", "metadata": {}, "source": [ "Let's dissect that response:\n", @@ -152,7 +152,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0184e41b", + "id": "f9fa4125", "metadata": {}, "outputs": [], "source": [ @@ -162,7 +162,7 @@ { "cell_type": "code", "execution_count": null, - "id": "91b391aa", + "id": "f95bcb22", "metadata": {}, "outputs": [], "source": [ @@ -172,7 +172,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a178b26f", + "id": "2df2c127", "metadata": {}, "outputs": [], "source": [ @@ -181,7 +181,7 @@ }, { "cell_type": "markdown", - "id": "e86fc8e0", + "id": "a5d1dccc", "metadata": {}, "source": [ "But in OCaml the usual vocabulary is that we \"apply\" the function rather than\n", @@ -216,7 +216,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5043cd01", + "id": "4f09d3fb", "metadata": { "tags": [ "raises-exception" @@ -229,7 +229,7 @@ }, { "cell_type": "markdown", - "id": "baf14003", + "id": "80f6b0d8", "metadata": {}, "source": [ "The error occurs because the toplevel does not yet know anything about a\n", @@ -250,7 +250,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ccf31ce5", + "id": "c9f55f5d", "metadata": { "tags": [ "remove-cell" @@ -264,7 +264,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a801aa03", + "id": "831f1bfe", "metadata": {}, "outputs": [], "source": [ @@ -273,7 +273,7 @@ }, { "cell_type": "markdown", - "id": "5a2c1b1c", + "id": "0bb8f0d5", "metadata": {}, "source": [ "## Workflow in the toplevel\n", diff --git a/_sources/chapters/correctness/black_glass_box.ipynb b/_sources/chapters/correctness/black_glass_box.ipynb index b1af16e..7e1579f 100644 --- a/_sources/chapters/correctness/black_glass_box.ipynb +++ b/_sources/chapters/correctness/black_glass_box.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "bc92acc2", + "id": "63e6d7d8", "metadata": {}, "source": [ "# Black-box and Glass-box Testing\n", @@ -19,7 +19,7 @@ { "cell_type": "code", "execution_count": null, - "id": "45ff0730", + "id": "5144350a", "metadata": { "tags": [ "hide-output" @@ -54,7 +54,7 @@ }, { "cell_type": "markdown", - "id": "7061a8c5", + "id": "c1878c51", "metadata": {}, "source": [ "What would it take to exhaustively test just this one function? We'd want to try\n", @@ -218,7 +218,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7e05c6fb", + "id": "71643f61", "metadata": { "tags": [ "hide-output" @@ -250,7 +250,7 @@ }, { "cell_type": "markdown", - "id": "adfcfc8d", + "id": "a17c4fb0", "metadata": {}, "source": [ "The `empty` and `add` functions are producers; and the `size`, `add` and `mem`\n", @@ -302,7 +302,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a92c04f7", + "id": "e85daf93", "metadata": {}, "outputs": [], "source": [ @@ -315,7 +315,7 @@ }, { "cell_type": "markdown", - "id": "f3424232", + "id": "259cd203", "metadata": {}, "source": [ "Black-box testing might lead us to invent many tests, but looking at the\n", diff --git a/_sources/chapters/correctness/eq_spec.ipynb b/_sources/chapters/correctness/eq_spec.ipynb index 7010f6a..1a3fdc0 100644 --- a/_sources/chapters/correctness/eq_spec.ipynb +++ b/_sources/chapters/correctness/eq_spec.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "1f9bb183", + "id": "c0161eb4", "metadata": {}, "source": [ "# Equational Specification\n", @@ -67,7 +67,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4582c8f0", + "id": "1deb6c79", "metadata": { "tags": [ "hide-output" @@ -87,7 +87,7 @@ }, { "cell_type": "markdown", - "id": "e2b74f17", + "id": "3951e6e6", "metadata": {}, "source": [ "As usual, there is a design choice to be made with `peek` etc. about what to do\n", @@ -148,7 +148,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e07a5771", + "id": "c6c9e5e4", "metadata": { "tags": [ "hide-output" @@ -168,7 +168,7 @@ }, { "cell_type": "markdown", - "id": "a58fcfb1", + "id": "fa2cd247", "metadata": {}, "source": [ "Next we could *prove* that each equation holds of the implementation. All these\n", @@ -193,7 +193,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ba10b7fb", + "id": "66cbdaa1", "metadata": { "tags": [ "hide-output" @@ -213,7 +213,7 @@ }, { "cell_type": "markdown", - "id": "53f75678", + "id": "e185a8c1", "metadata": {}, "source": [ "```text\n", @@ -273,7 +273,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e1311443", + "id": "34d5485b", "metadata": {}, "outputs": [], "source": [ @@ -289,7 +289,7 @@ }, { "cell_type": "markdown", - "id": "1d63754f", + "id": "d2a7b903", "metadata": {}, "source": [ "For example, 4a can be verified as follows:\n", @@ -349,7 +349,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3e12b687", + "id": "edee7999", "metadata": { "tags": [ "hide-output" @@ -379,7 +379,7 @@ }, { "cell_type": "markdown", - "id": "13c40b2e", + "id": "2014030f", "metadata": {}, "source": [ "This implementation is superficially different from the earlier implementation\n", @@ -683,7 +683,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ffe4fae7", + "id": "4f8bb23d", "metadata": { "tags": [ "hide-output" @@ -703,7 +703,7 @@ }, { "cell_type": "markdown", - "id": "386b0b64", + "id": "09738b05", "metadata": {}, "source": [ "The generators are `empty` and `add`. The only manipulator is `remove`. Finally,\n", diff --git a/_sources/chapters/correctness/function_docs.ipynb b/_sources/chapters/correctness/function_docs.ipynb index 25b0cb0..43cdfa4 100644 --- a/_sources/chapters/correctness/function_docs.ipynb +++ b/_sources/chapters/correctness/function_docs.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "f993ebc2", + "id": "638dbf6b", "metadata": {}, "source": [ "# Function Documentation\n", @@ -257,7 +257,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d501eb26", + "id": "db075ae7", "metadata": {}, "outputs": [], "source": [ @@ -268,7 +268,7 @@ }, { "cell_type": "markdown", - "id": "7096bfd4", + "id": "55735b39", "metadata": {}, "source": [ "Code using such long names is verbose and hard to read. Instead of trying to\n", @@ -280,7 +280,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0473c615", + "id": "015a5888", "metadata": {}, "outputs": [], "source": [ @@ -291,7 +291,7 @@ }, { "cell_type": "markdown", - "id": "17a4982d", + "id": "d0f1b75e", "metadata": {}, "source": [ "A similarly bad practice is to encode the type of the variable in its name,\n", diff --git a/_sources/chapters/correctness/module_docs.ipynb b/_sources/chapters/correctness/module_docs.ipynb index 3daaf98..96adbcd 100644 --- a/_sources/chapters/correctness/module_docs.ipynb +++ b/_sources/chapters/correctness/module_docs.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "62b247b4", + "id": "4c089292", "metadata": {}, "source": [ "# Module Documentation\n", @@ -42,7 +42,7 @@ { "cell_type": "code", "execution_count": null, - "id": "acb6e999", + "id": "d03449f0", "metadata": { "tags": [ "hide-output" @@ -85,7 +85,7 @@ }, { "cell_type": "markdown", - "id": "6b1c807f", + "id": "4a45bc15", "metadata": {}, "source": [ "In a real signature for sets, we'd want operations such as `map` and `fold` as\n", @@ -100,7 +100,7 @@ { "cell_type": "code", "execution_count": null, - "id": "23899409", + "id": "abebdc87", "metadata": {}, "outputs": [], "source": [ @@ -119,7 +119,7 @@ }, { "cell_type": "markdown", - "id": "aae11fa5", + "id": "05662fa8", "metadata": {}, "source": [ "This implementation has the advantage of simplicity. For small sets that tend\n", @@ -144,7 +144,7 @@ { "cell_type": "code", "execution_count": null, - "id": "00400bcc", + "id": "559ab6fe", "metadata": {}, "outputs": [], "source": [ @@ -163,7 +163,7 @@ }, { "cell_type": "markdown", - "id": "fd6a1561", + "id": "7d4337c1", "metadata": {}, "source": [ "An important reason why we introduced the writing of function specifications was\n", @@ -433,7 +433,7 @@ { "cell_type": "code", "execution_count": null, - "id": "206c7e8c", + "id": "b2602b73", "metadata": {}, "outputs": [], "source": [ @@ -471,7 +471,7 @@ }, { "cell_type": "markdown", - "id": "8ca52819", + "id": "25d34c82", "metadata": {}, "source": [ "Calling `rep_ok` on every argument can be too expensive for the production\n", diff --git a/_sources/chapters/correctness/proving_correctness.ipynb b/_sources/chapters/correctness/proving_correctness.ipynb index 9189a84..e53ec31 100644 --- a/_sources/chapters/correctness/proving_correctness.ipynb +++ b/_sources/chapters/correctness/proving_correctness.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "853c4330", + "id": "c680102e", "metadata": {}, "source": [ "# Proving Correctness\n", @@ -104,7 +104,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ba3a4023", + "id": "f5572eb5", "metadata": {}, "outputs": [], "source": [ @@ -114,7 +114,7 @@ }, { "cell_type": "markdown", - "id": "6f13c9ae", + "id": "eef213a8", "metadata": {}, "source": [ "We know from the rules of OCaml evaluation that `twice h x = h (h x)`, and\n", @@ -189,7 +189,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b22b5362", + "id": "99dd6a3c", "metadata": {}, "outputs": [], "source": [ @@ -199,7 +199,7 @@ }, { "cell_type": "markdown", - "id": "4fd34a1c", + "id": "6c55dbfd", "metadata": {}, "source": [ "You might recall that the same summation can be expressed in closed form as\n", @@ -264,7 +264,7 @@ { "cell_type": "code", "execution_count": null, - "id": "caf19fe8", + "id": "dc25ac2d", "metadata": {}, "outputs": [], "source": [ @@ -273,7 +273,7 @@ }, { "cell_type": "markdown", - "id": "d2d4a8c5", + "id": "b9993e9c", "metadata": {}, "source": [ "Then as a corollary to our previous claim, by extensionality we can conclude\n", @@ -307,7 +307,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f9fd90d6", + "id": "c1a751c6", "metadata": {}, "outputs": [], "source": [ @@ -317,7 +317,7 @@ }, { "cell_type": "markdown", - "id": "d44ca236", + "id": "d0b4a7a7", "metadata": {}, "source": [ "A tail-recursive implementation would be more efficient about stack space:" @@ -326,7 +326,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b0bfda3a", + "id": "a3b14d1a", "metadata": {}, "outputs": [], "source": [ @@ -338,7 +338,7 @@ }, { "cell_type": "markdown", - "id": "88a35a77", + "id": "1e23602e", "metadata": {}, "source": [ "The `i` in the name `facti` stands for *iterative*. We call this an iterative\n", @@ -599,7 +599,7 @@ { "cell_type": "code", "execution_count": null, - "id": "dc4aa260", + "id": "9578539f", "metadata": {}, "outputs": [], "source": [ @@ -609,7 +609,7 @@ }, { "cell_type": "markdown", - "id": "cb17ca86", + "id": "98a38995", "metadata": {}, "source": [ "Here, the operator is addition, which is associative; and the base case is zero,\n", @@ -620,7 +620,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f49fbe43", + "id": "1e514d39", "metadata": {}, "outputs": [], "source": [ @@ -632,7 +632,7 @@ }, { "cell_type": "markdown", - "id": "c374cde9", + "id": "23f00016", "metadata": {}, "source": [ "We already know that `sumto_tr` is correct, thanks to our theorem.\n", @@ -669,7 +669,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0fc58131", + "id": "05e311a9", "metadata": {}, "outputs": [], "source": [ @@ -680,7 +680,7 @@ }, { "cell_type": "markdown", - "id": "c277cc50", + "id": "790eb3b3", "metadata": {}, "source": [ "The base case, `1`, obviously terminates. The recursive call is on `n - 1`,\n", @@ -715,7 +715,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2643739b", + "id": "6b081607", "metadata": {}, "outputs": [], "source": [ @@ -727,7 +727,7 @@ }, { "cell_type": "markdown", - "id": "f339f2ec", + "id": "beef04ea", "metadata": {}, "source": [ "This is known as *Ackermann's function*. It grows faster than any exponential\n", diff --git a/_sources/chapters/correctness/randomized.ipynb b/_sources/chapters/correctness/randomized.ipynb index c20e184..20a424c 100644 --- a/_sources/chapters/correctness/randomized.ipynb +++ b/_sources/chapters/correctness/randomized.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "f784f330", + "id": "9a403b04", "metadata": {}, "source": [ "# Randomized Testing with QCheck\n", @@ -75,7 +75,7 @@ { "cell_type": "code", "execution_count": null, - "id": "06ade2c4", + "id": "562e4c7f", "metadata": {}, "outputs": [], "source": [ @@ -86,7 +86,7 @@ }, { "cell_type": "markdown", - "id": "5774f31c", + "id": "24d55643", "metadata": {}, "source": [ "Not exactly unpredictable, eh?\n", @@ -136,7 +136,7 @@ { "cell_type": "code", "execution_count": null, - "id": "73e0b06e", + "id": "71c04c1d", "metadata": {}, "outputs": [], "source": [ @@ -148,7 +148,7 @@ }, { "cell_type": "markdown", - "id": "98315bf7", + "id": "2fb7dc60", "metadata": {}, "source": [ "## QCheck Abstractions\n", @@ -161,7 +161,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7bfdde22", + "id": "a4dd743b", "metadata": { "tags": [ "remove-cell" @@ -175,7 +175,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cbeb0068", + "id": "a3c9ac96", "metadata": { "tags": [ "remove-output" @@ -188,7 +188,7 @@ }, { "cell_type": "markdown", - "id": "416347da", + "id": "ddf1bbb2", "metadata": {}, "source": [ "**Generators.** One of the key pieces of functionality provided by QCheck is the\n", @@ -258,7 +258,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4c9dd96b", + "id": "3f6d2902", "metadata": {}, "outputs": [], "source": [ @@ -272,7 +272,7 @@ }, { "cell_type": "markdown", - "id": "70c1eac1", + "id": "f34064a7", "metadata": {}, "source": [ "**Arbitraries.** The way we present to QCheck the outputs to be checked is with\n", @@ -291,7 +291,7 @@ { "cell_type": "code", "execution_count": null, - "id": "113107d4", + "id": "bd7be15d", "metadata": { "tags": [ "hide-output" @@ -304,7 +304,7 @@ }, { "cell_type": "markdown", - "id": "e78b8916", + "id": "4ec3bc6f", "metadata": {}, "source": [ "## Testing Properties\n", @@ -325,7 +325,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1c57d144", + "id": "2a2ea15a", "metadata": {}, "outputs": [], "source": [ @@ -334,7 +334,7 @@ }, { "cell_type": "markdown", - "id": "99c23332", + "id": "f279a214", "metadata": {}, "source": [ "If we want to change the number of arbitraries that are checked, we can\n", @@ -350,7 +350,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ce106129", + "id": "ff158019", "metadata": {}, "outputs": [], "source": [ @@ -359,7 +359,7 @@ }, { "cell_type": "markdown", - "id": "50e75b11", + "id": "ed3e65f4", "metadata": {}, "source": [ "Unfortunately, that output isn't very informative; it doesn't tell us what\n", @@ -391,7 +391,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f1f4ae5e", + "id": "9f7a35ab", "metadata": {}, "outputs": [], "source": [ @@ -400,7 +400,7 @@ }, { "cell_type": "markdown", - "id": "2dcac85e", + "id": "2b5d70a6", "metadata": {}, "source": [ "## Informative Output from QCheck\n", @@ -418,7 +418,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e9270608", + "id": "82184069", "metadata": {}, "outputs": [], "source": [ @@ -427,7 +427,7 @@ }, { "cell_type": "markdown", - "id": "d715f354", + "id": "e8ecf16d", "metadata": {}, "source": [ "In addition to the generator field `gen`, there is a field containing an\n", @@ -457,7 +457,7 @@ { "cell_type": "code", "execution_count": null, - "id": "be95f5fe", + "id": "94ac4297", "metadata": {}, "outputs": [], "source": [ @@ -467,7 +467,7 @@ }, { "cell_type": "markdown", - "id": "b13b0f82", + "id": "8dab6685", "metadata": {}, "source": [ "The output tells us the `my_test` failed, and shows us the input that\n", @@ -483,7 +483,7 @@ { "cell_type": "code", "execution_count": null, - "id": "874e1bb5", + "id": "99f09efc", "metadata": {}, "outputs": [], "source": [ @@ -495,7 +495,7 @@ }, { "cell_type": "markdown", - "id": "6951d29a", + "id": "b3eb5c6c", "metadata": {}, "source": [ "Above, `double` is the function we are testing. The property we're testing\n", @@ -512,7 +512,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f5858ae5", + "id": "60f3b423", "metadata": {}, "outputs": [], "source": [ @@ -523,7 +523,7 @@ }, { "cell_type": "markdown", - "id": "01bd245f", + "id": "4a8c911a", "metadata": {}, "source": [ "Indeed, running 1000 random tests reveals that none of them fails. The `int`\n", @@ -545,7 +545,7 @@ { "cell_type": "code", "execution_count": null, - "id": "958d1be2", + "id": "c83b4c41", "metadata": {}, "outputs": [], "source": [ @@ -556,7 +556,7 @@ }, { "cell_type": "markdown", - "id": "ba42bf22", + "id": "1afe3287", "metadata": {}, "source": [ "The output shows an example of a list that is not sorted, hence violates the\n", diff --git a/_sources/chapters/correctness/structural_induction.ipynb b/_sources/chapters/correctness/structural_induction.ipynb index ad5ccd4..1a9f216 100644 --- a/_sources/chapters/correctness/structural_induction.ipynb +++ b/_sources/chapters/correctness/structural_induction.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "22a3eddf", + "id": "e4a56de1", "metadata": {}, "source": [ "# Structural Induction\n", @@ -31,7 +31,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ae8bb090", + "id": "9936d0e4", "metadata": {}, "outputs": [], "source": [ @@ -40,7 +40,7 @@ }, { "cell_type": "markdown", - "id": "ac614697", + "id": "3750d6a4", "metadata": {}, "source": [ "The constructor `Z` represents zero; and the constructor `S` represents the\n", @@ -61,7 +61,7 @@ { "cell_type": "code", "execution_count": null, - "id": "edb4655f", + "id": "e3931802", "metadata": {}, "outputs": [], "source": [ @@ -73,7 +73,7 @@ }, { "cell_type": "markdown", - "id": "5685945c", + "id": "efe5fc01", "metadata": {}, "source": [ "Immediately we can prove the following rather trivial claim:\n", @@ -230,7 +230,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4c05ab7a", + "id": "423b5033", "metadata": {}, "outputs": [], "source": [ @@ -244,7 +244,7 @@ }, { "cell_type": "markdown", - "id": "32f87956", + "id": "b5fd7f34", "metadata": {}, "source": [ "We'll prove that append is associative.\n", @@ -320,7 +320,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fca3930e", + "id": "9352838c", "metadata": {}, "outputs": [], "source": [ @@ -337,7 +337,7 @@ }, { "cell_type": "markdown", - "id": "1fb38751", + "id": "8e6b10eb", "metadata": {}, "source": [ "Second, recall what it means for a function `f : 'a -> 'a` to be commutative and\n", @@ -505,7 +505,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9f51de6f", + "id": "5713a01b", "metadata": {}, "outputs": [], "source": [ @@ -515,7 +515,7 @@ }, { "cell_type": "markdown", - "id": "125cd44b", + "id": "89c5ceda", "metadata": {}, "source": [ "Both have a constructor that represents \"empty\", and both have a constructor\n", @@ -556,7 +556,7 @@ { "cell_type": "code", "execution_count": null, - "id": "13aa8bf2", + "id": "e18b3e62", "metadata": {}, "outputs": [], "source": [ @@ -567,7 +567,7 @@ }, { "cell_type": "markdown", - "id": "c8271858", + "id": "d5ca437b", "metadata": {}, "source": [ "For example, these two trees are reflections of each other:\n", @@ -655,7 +655,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2b20bfa6", + "id": "53752bac", "metadata": { "tags": [ "hide-output" @@ -680,7 +680,7 @@ }, { "cell_type": "markdown", - "id": "98e6dc28", + "id": "02175e61", "metadata": {}, "source": [ "For example, the expression `5 < 6` would be represented as\n", diff --git a/_sources/chapters/data/algebraic_data_types.ipynb b/_sources/chapters/data/algebraic_data_types.ipynb index 013975b..134553e 100644 --- a/_sources/chapters/data/algebraic_data_types.ipynb +++ b/_sources/chapters/data/algebraic_data_types.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "ff4b4cdb", + "id": "0a03016a", "metadata": {}, "source": [ "# Algebraic Data Types\n", @@ -29,7 +29,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2875e55e", + "id": "ddbed1ce", "metadata": {}, "outputs": [], "source": [ @@ -42,7 +42,7 @@ }, { "cell_type": "markdown", - "id": "675c36b0", + "id": "8676dcf5", "metadata": {}, "source": [ "This type, `shape`, represents a shape that is either a point, a circle, or a\n", @@ -62,7 +62,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fb7ed71f", + "id": "6f1ee6cf", "metadata": {}, "outputs": [], "source": [ @@ -82,7 +82,7 @@ }, { "cell_type": "markdown", - "id": "f511c2f2", + "id": "9bb2635b", "metadata": {}, "source": [ "The `shape` variant type is the same as those we've seen before in that it is\n", @@ -116,7 +116,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f08a8014", + "id": "cfa239b0", "metadata": {}, "outputs": [], "source": [ @@ -127,7 +127,7 @@ }, { "cell_type": "markdown", - "id": "e08e11f3", + "id": "cc2fad80", "metadata": {}, "source": [ "If we wanted to, we could use this type to code up lists (e.g.) that contain\n", @@ -137,7 +137,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d4b98d13", + "id": "67811faf", "metadata": {}, "outputs": [], "source": [ @@ -153,7 +153,7 @@ }, { "cell_type": "markdown", - "id": "237605dc", + "id": "3ef79e89", "metadata": {}, "source": [ "Variants thus provide a type-safe way of doing something that might before have\n", @@ -166,7 +166,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a805b091", + "id": "d8a67856", "metadata": {}, "outputs": [], "source": [ @@ -179,7 +179,7 @@ }, { "cell_type": "markdown", - "id": "dd673c3b", + "id": "cad5da7a", "metadata": {}, "source": [ "## Syntax and Semantics\n", @@ -238,7 +238,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e3ef3e50", + "id": "ba92317a", "metadata": {}, "outputs": [], "source": [ @@ -253,7 +253,7 @@ }, { "cell_type": "markdown", - "id": "3913cb16", + "id": "3eb5c398", "metadata": {}, "source": [ "Seems fine, right? But then one day you realize there are more colors\n", @@ -264,7 +264,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bdf7e7dc", + "id": "5eb5785c", "metadata": {}, "outputs": [], "source": [ @@ -279,7 +279,7 @@ }, { "cell_type": "markdown", - "id": "984cd6d1", + "id": "b5532dce", "metadata": {}, "source": [ "But because of the thousand lines of code in between, you forget that\n", @@ -290,7 +290,7 @@ { "cell_type": "code", "execution_count": null, - "id": "dcacc5ac", + "id": "18bb66da", "metadata": {}, "outputs": [], "source": [ @@ -299,7 +299,7 @@ }, { "cell_type": "markdown", - "id": "1f611e27", + "id": "88c1207c", "metadata": {}, "source": [ "The problem is the *catch-all* case in the pattern match inside\n", @@ -313,7 +313,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d470d5bf", + "id": "4a9f6ee2", "metadata": {}, "outputs": [], "source": [ @@ -324,7 +324,7 @@ }, { "cell_type": "markdown", - "id": "fc88f2c8", + "id": "1ef66350", "metadata": {}, "source": [ "The OCaml type checker now alerts you that you haven't yet updated\n", @@ -344,7 +344,7 @@ { "cell_type": "code", "execution_count": null, - "id": "77b5e88e", + "id": "535792f3", "metadata": {}, "outputs": [], "source": [ @@ -369,7 +369,7 @@ }, { "cell_type": "markdown", - "id": "824237cb", + "id": "8249b506", "metadata": {}, "source": [ "Notice that in the definition of `intlist`, we define the `Cons` constructor to\n", @@ -382,7 +382,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c5d110b9", + "id": "16555d20", "metadata": {}, "outputs": [], "source": [ @@ -392,7 +392,7 @@ }, { "cell_type": "markdown", - "id": "9787276b", + "id": "841c1283", "metadata": {}, "source": [ "Any such mutual recursion must involve at least one variant or record type\n", @@ -402,7 +402,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6942fae8", + "id": "4bbcb163", "metadata": { "tags": [ "raises-exception" @@ -415,7 +415,7 @@ }, { "cell_type": "markdown", - "id": "01e92536", + "id": "1ca1b4b0", "metadata": {}, "source": [ "But this is:" @@ -424,7 +424,7 @@ { "cell_type": "code", "execution_count": null, - "id": "33717243", + "id": "43fd4465", "metadata": {}, "outputs": [], "source": [ @@ -433,7 +433,7 @@ }, { "cell_type": "markdown", - "id": "c2153630", + "id": "779a949f", "metadata": {}, "source": [ "Record types may also be recursive:" @@ -442,7 +442,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e6cf7b3d", + "id": "4c78c814", "metadata": {}, "outputs": [], "source": [ @@ -451,7 +451,7 @@ }, { "cell_type": "markdown", - "id": "4054a5b4", + "id": "5193d71c", "metadata": {}, "source": [ "But plain old type synonyms may not be:" @@ -460,7 +460,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a1cf7c60", + "id": "7154a221", "metadata": { "tags": [ "raises-exception" @@ -473,7 +473,7 @@ }, { "cell_type": "markdown", - "id": "fe939c04", + "id": "9918a18d", "metadata": {}, "source": [ "Although `node` is a legal type definition, there is no way to construct a value\n", @@ -492,7 +492,7 @@ { "cell_type": "code", "execution_count": null, - "id": "40248403", + "id": "7f381a0e", "metadata": {}, "outputs": [], "source": [ @@ -504,7 +504,7 @@ }, { "cell_type": "markdown", - "id": "0ebe86d2", + "id": "6fbb92d5", "metadata": {}, "source": [ "Here, `mylist` is a *type constructor* but not a type: there is no way to write\n", @@ -519,7 +519,7 @@ { "cell_type": "code", "execution_count": null, - "id": "07eb3edb", + "id": "baf1a5d4", "metadata": {}, "outputs": [], "source": [ @@ -534,7 +534,7 @@ }, { "cell_type": "markdown", - "id": "ffb248d1", + "id": "62ace1e7", "metadata": {}, "source": [ "Notice that the body of each function is unchanged from its previous definition\n", @@ -545,7 +545,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ac7c7da1", + "id": "b284965c", "metadata": {}, "outputs": [], "source": [ @@ -560,7 +560,7 @@ }, { "cell_type": "markdown", - "id": "fd085b14", + "id": "fa993118", "metadata": {}, "source": [ "The functions we just wrote are an example of a language feature called\n", @@ -577,7 +577,7 @@ { "cell_type": "code", "execution_count": null, - "id": "541dd1dc", + "id": "e7c6f372", "metadata": {}, "outputs": [], "source": [ @@ -588,7 +588,7 @@ }, { "cell_type": "markdown", - "id": "8006ef9f", + "id": "ec5e00e2", "metadata": {}, "source": [ "The fact that we use the `( + )` operator with the head of the list constrains\n", @@ -602,7 +602,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a46704b1", + "id": "a35880e9", "metadata": {}, "outputs": [], "source": [ @@ -612,7 +612,7 @@ }, { "cell_type": "markdown", - "id": "72748322", + "id": "774e55d0", "metadata": {}, "source": [ "## Polymorphic Variants\n", @@ -624,7 +624,7 @@ { "cell_type": "code", "execution_count": null, - "id": "555ec521", + "id": "e244ef77", "metadata": {}, "outputs": [], "source": [ @@ -640,7 +640,7 @@ }, { "cell_type": "markdown", - "id": "310d9e3b", + "id": "8ee88f8b", "metadata": {}, "source": [ "Occasionally, you might need a variant type only for the return value of a\n", @@ -652,7 +652,7 @@ { "cell_type": "code", "execution_count": null, - "id": "43a8d4d7", + "id": "d07e5937", "metadata": {}, "outputs": [], "source": [ @@ -666,7 +666,7 @@ }, { "cell_type": "markdown", - "id": "a23de9e7", + "id": "831b6f83", "metadata": {}, "source": [ "The downside of this definition is that you were forced to define\n", @@ -688,7 +688,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6dc184ac", + "id": "72fbd690", "metadata": {}, "outputs": [], "source": [ @@ -700,7 +700,7 @@ }, { "cell_type": "markdown", - "id": "8d931652", + "id": "0fec04b1", "metadata": {}, "source": [ "This type says that `f` either returns `` `Finite n`` for some `n : int` or\n", @@ -713,7 +713,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4411a518", + "id": "398f3788", "metadata": {}, "outputs": [], "source": [ @@ -725,7 +725,7 @@ }, { "cell_type": "markdown", - "id": "81473b5d", + "id": "e26a1a39", "metadata": {}, "source": [ "It's perfectly fine for the pattern match to include constructors other than\n", @@ -746,7 +746,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9011638e", + "id": "e34b2a26", "metadata": { "tags": [ "remove-output" @@ -759,7 +759,7 @@ }, { "cell_type": "markdown", - "id": "c8720bec", + "id": "cc01a16a", "metadata": {}, "source": [ "So `list` is really just a type constructor, with (value) constructors\n", @@ -772,7 +772,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ec5c5ea2", + "id": "feb34819", "metadata": { "tags": [ "remove-output" @@ -785,7 +785,7 @@ }, { "cell_type": "markdown", - "id": "1fab7e04", + "id": "0466836b", "metadata": {}, "source": [ "So `option` is really just a type constructor, with (value) constructors\n", diff --git a/_sources/chapters/data/assoc_list.ipynb b/_sources/chapters/data/assoc_list.ipynb index 608f391..3d76e7d 100644 --- a/_sources/chapters/data/assoc_list.ipynb +++ b/_sources/chapters/data/assoc_list.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "a39dc5f7", + "id": "905d7150", "metadata": {}, "source": [ "# Association Lists\n", @@ -16,7 +16,7 @@ { "cell_type": "code", "execution_count": null, - "id": "51dc0e54", + "id": "a28b6024", "metadata": {}, "outputs": [], "source": [ @@ -25,7 +25,7 @@ }, { "cell_type": "markdown", - "id": "0371ae60", + "id": "76d086b9", "metadata": {}, "source": [ "Note that an association list isn't so much a built-in data type in OCaml as a\n", @@ -38,7 +38,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6e0153fd", + "id": "8b273d87", "metadata": {}, "outputs": [], "source": [ @@ -55,7 +55,7 @@ }, { "cell_type": "markdown", - "id": "294260d6", + "id": "1c50b351", "metadata": {}, "source": [ "The `insert` function simply adds a new map from a key to a value at the front\n", diff --git a/_sources/chapters/data/exceptions.ipynb b/_sources/chapters/data/exceptions.ipynb index 96475d1..311a6f3 100644 --- a/_sources/chapters/data/exceptions.ipynb +++ b/_sources/chapters/data/exceptions.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "fc62328c", + "id": "8adafa28", "metadata": {}, "source": [ "# Exceptions\n", @@ -22,7 +22,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8b64634d", + "id": "aa0fa513", "metadata": {}, "outputs": [], "source": [ @@ -34,7 +34,7 @@ }, { "cell_type": "markdown", - "id": "d841b4c7", + "id": "ae341672", "metadata": {}, "source": [ "To create an exception value, use the same syntax you would for creating a\n", @@ -45,7 +45,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5329d746", + "id": "08ebdfe7", "metadata": {}, "outputs": [], "source": [ @@ -54,7 +54,7 @@ }, { "cell_type": "markdown", - "id": "32d9b74f", + "id": "a7c764c3", "metadata": {}, "source": [ "This constructor is [pre-defined in the standard library][stdlib-exn] and is one of the more common exceptions that\n", @@ -133,7 +133,7 @@ { "cell_type": "code", "execution_count": null, - "id": "054a77ed", + "id": "d170fc89", "metadata": { "tags": [ "raises-exception" @@ -146,7 +146,7 @@ }, { "cell_type": "markdown", - "id": "3f663751", + "id": "9583382f", "metadata": {}, "source": [ "And with functions, OCaml does not officially specify the evaluation order of a function\n", @@ -159,7 +159,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9a9af757", + "id": "11877628", "metadata": { "tags": [ "raises-exception", @@ -173,7 +173,7 @@ }, { "cell_type": "markdown", - "id": "32edce3b", + "id": "4e5128ce", "metadata": {}, "source": [ "It makes sense that both those pieces of code would raise the same exception,\n", @@ -185,7 +185,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7b36e77a", + "id": "92264b8e", "metadata": { "tags": [ "raises-exception", @@ -199,7 +199,7 @@ }, { "cell_type": "markdown", - "id": "046cf06a", + "id": "dfc895d9", "metadata": {}, "source": [ "The answer is nuanced. The language specification does not stipulate what order\n", @@ -214,7 +214,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c03e56a9", + "id": "69c979fe", "metadata": { "tags": [ "raises-exception" @@ -229,7 +229,7 @@ }, { "cell_type": "markdown", - "id": "33aabf9f", + "id": "146066e0", "metadata": {}, "source": [ "That code is guaranteed to raise `A` rather than `B`.\n", @@ -241,7 +241,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9ce90c98", + "id": "add50507", "metadata": { "tags": [ "raises-exception" @@ -256,7 +256,7 @@ }, { "cell_type": "markdown", - "id": "b66de358", + "id": "cbb7f007", "metadata": {}, "source": [ "That code ends up raising `D`, because the first thing that has to happen is to\n", @@ -289,7 +289,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2990811a", + "id": "08075926", "metadata": {}, "outputs": [], "source": [ @@ -301,7 +301,7 @@ }, { "cell_type": "markdown", - "id": "68d517ee", + "id": "4953a007", "metadata": {}, "source": [ "Note that the code above is just a standard `match` expression, not a `try`\n", diff --git a/_sources/chapters/data/lists.ipynb b/_sources/chapters/data/lists.ipynb index af37ee6..68b6013 100644 --- a/_sources/chapters/data/lists.ipynb +++ b/_sources/chapters/data/lists.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "f3d6b9b8", + "id": "24b175fb", "metadata": {}, "source": [ "# Lists\n", @@ -117,7 +117,7 @@ { "cell_type": "code", "execution_count": null, - "id": "230e24c6", + "id": "7739555b", "metadata": {}, "outputs": [], "source": [ @@ -129,7 +129,7 @@ }, { "cell_type": "markdown", - "id": "c45edc76", + "id": "a480edc5", "metadata": {}, "source": [ "This function says to take the input `lst` and see whether it has the same shape\n", @@ -143,7 +143,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5baa68f8", + "id": "477dc6dd", "metadata": {}, "outputs": [], "source": [ @@ -155,7 +155,7 @@ }, { "cell_type": "markdown", - "id": "93a454fb", + "id": "33c93706", "metadata": {}, "source": [ "That is, the input list is a list of xs (pronounced EX-uhs), the head element is\n", @@ -168,7 +168,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bc0b6c24", + "id": "50ba3ad0", "metadata": {}, "outputs": [], "source": [ @@ -177,7 +177,7 @@ }, { "cell_type": "markdown", - "id": "29c638db", + "id": "34aadaa7", "metadata": {}, "source": [ "Or, noting that the first `|` after `with` is optional regardless of how many\n", @@ -187,7 +187,7 @@ { "cell_type": "code", "execution_count": null, - "id": "11669446", + "id": "5c85792b", "metadata": {}, "outputs": [], "source": [ @@ -196,7 +196,7 @@ }, { "cell_type": "markdown", - "id": "b04fe14f", + "id": "af792ae9", "metadata": {}, "source": [ "The multi-line format is what we'll usually use in this book, because it helps\n", @@ -211,7 +211,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b38d9fc9", + "id": "1b31209b", "metadata": {}, "outputs": [], "source": [ @@ -223,7 +223,7 @@ }, { "cell_type": "markdown", - "id": "cb102eea", + "id": "db9c80db", "metadata": {}, "source": [ "Note how we didn't actually need the variable `h` in the right-hand side of the\n", @@ -234,7 +234,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0832716e", + "id": "51988d5e", "metadata": {}, "outputs": [], "source": [ @@ -246,7 +246,7 @@ }, { "cell_type": "markdown", - "id": "a7a3441e", + "id": "94920321", "metadata": {}, "source": [ "That function is actually built-in as part of the OCaml standard library `List`\n", @@ -261,7 +261,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f7c6bc16", + "id": "4a69afd9", "metadata": {}, "outputs": [], "source": [ @@ -273,7 +273,7 @@ }, { "cell_type": "markdown", - "id": "be6986cf", + "id": "8d2dc861", "metadata": {}, "source": [ "For example, `append [1; 2] [3; 4]` is `[1; 2; 3; 4]`. That function is actually\n", @@ -289,7 +289,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ad2f4f8c", + "id": "ef2d4d86", "metadata": {}, "outputs": [], "source": [ @@ -301,7 +301,7 @@ }, { "cell_type": "markdown", - "id": "fb03fb87", + "id": "af82266f", "metadata": {}, "source": [ "But there is a much better way to write the same function without pattern matching:" @@ -310,7 +310,7 @@ { "cell_type": "code", "execution_count": null, - "id": "737a6fee", + "id": "2a3f0833", "metadata": {}, "outputs": [], "source": [ @@ -320,7 +320,7 @@ }, { "cell_type": "markdown", - "id": "1f7f209c", + "id": "44c65a00", "metadata": {}, "source": [ "Note how all the recursive functions above are similar to doing proofs by\n", @@ -420,7 +420,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4f46eacb", + "id": "dd5afbb0", "metadata": {}, "outputs": [], "source": [ @@ -431,7 +431,7 @@ }, { "cell_type": "markdown", - "id": "7919466e", + "id": "00919bf8", "metadata": {}, "source": [ "When evaluating the right-hand side of the second branch, `h` is bound to `1`\n", @@ -492,7 +492,7 @@ { "cell_type": "code", "execution_count": null, - "id": "25727a0f", + "id": "7090d7bb", "metadata": {}, "outputs": [], "source": [ @@ -503,7 +503,7 @@ }, { "cell_type": "markdown", - "id": "0d4fa1f5", + "id": "4bb88444", "metadata": {}, "source": [ "* `1 :: []` is already a value.\n", @@ -554,7 +554,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9583a461", + "id": "7362ad4c", "metadata": {}, "outputs": [], "source": [ @@ -563,7 +563,7 @@ }, { "cell_type": "markdown", - "id": "0a2cdc12", + "id": "98e1f201", "metadata": {}, "source": [ "By presenting that warning to the programmer, the compiler is helping the\n", @@ -587,7 +587,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9dd7c281", + "id": "79688962", "metadata": {}, "outputs": [], "source": [ @@ -600,7 +600,7 @@ }, { "cell_type": "markdown", - "id": "8fe8c8ab", + "id": "5ba9ba4c", "metadata": {}, "source": [ "The second branch is unused because the first branch will match anything the\n", @@ -618,7 +618,7 @@ { "cell_type": "code", "execution_count": null, - "id": "22171f90", + "id": "4a6a97df", "metadata": {}, "outputs": [], "source": [ @@ -630,7 +630,7 @@ }, { "cell_type": "markdown", - "id": "36003078", + "id": "05439fe8", "metadata": {}, "source": [ "The programmer was thinking that if the length of `lst` is equal to `n`, then\n", @@ -650,7 +650,7 @@ { "cell_type": "code", "execution_count": null, - "id": "670c3e55", + "id": "faf7d196", "metadata": {}, "outputs": [], "source": [ @@ -661,7 +661,7 @@ }, { "cell_type": "markdown", - "id": "421cd3f9", + "id": "418902b9", "metadata": {}, "source": [ "or better yet:" @@ -670,7 +670,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d8b737a1", + "id": "386eddac", "metadata": {}, "outputs": [], "source": [ @@ -680,7 +680,7 @@ }, { "cell_type": "markdown", - "id": "eb89d925", + "id": "e2a4a3a8", "metadata": {}, "source": [ "## Deep Pattern Matching\n", @@ -708,7 +708,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2d56568a", + "id": "6f50fc34", "metadata": {}, "outputs": [], "source": [ @@ -720,7 +720,7 @@ }, { "cell_type": "markdown", - "id": "0fbd550f", + "id": "b7af326b", "metadata": {}, "source": [ "you can write" @@ -729,7 +729,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0e75e1ed", + "id": "aca73555", "metadata": {}, "outputs": [], "source": [ @@ -740,7 +740,7 @@ }, { "cell_type": "markdown", - "id": "c07416a2", + "id": "f8802644", "metadata": {}, "source": [ "The word `function` is a keyword. Notice that we're able to leave out the line\n", @@ -814,7 +814,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4288d23a", + "id": "b03c0208", "metadata": {}, "outputs": [], "source": [ @@ -834,7 +834,7 @@ }, { "cell_type": "markdown", - "id": "a8a6973b", + "id": "8e9b3ffb", "metadata": {}, "source": [ "Observe the following difference between the `sum` and `sum_tr` functions above:\n", @@ -868,7 +868,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d808caa6", + "id": "2b8741e9", "metadata": {}, "outputs": [], "source": [ @@ -885,7 +885,7 @@ }, { "cell_type": "markdown", - "id": "0f7117c3", + "id": "ad93c8ad", "metadata": {}, "source": [ "It would be worthwhile to study the definition of `--` to convince yourself that\n", @@ -900,7 +900,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b2406bea", + "id": "d8c9d337", "metadata": {}, "outputs": [], "source": [ @@ -909,7 +909,7 @@ }, { "cell_type": "markdown", - "id": "5bbef127", + "id": "f7bffd69", "metadata": {}, "source": [ "Expression `List.init len f` creates the list `[f 0; f 1; ...; f (len - 1)]`,\n", diff --git a/_sources/chapters/data/nats.ipynb b/_sources/chapters/data/nats.ipynb index 4b03fc9..e58005a 100644 --- a/_sources/chapters/data/nats.ipynb +++ b/_sources/chapters/data/nats.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "d6fa0f18", + "id": "f9717e26", "metadata": {}, "source": [ "# Example: Natural Numbers\n", @@ -19,7 +19,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d39bd2a5", + "id": "8344f121", "metadata": {}, "outputs": [], "source": [ @@ -28,7 +28,7 @@ }, { "cell_type": "markdown", - "id": "ea3f6dd1", + "id": "938002d0", "metadata": {}, "source": [ "We have defined a new type `nat`, and `Zero` and `Succ` are constructors for\n", @@ -39,7 +39,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8421687e", + "id": "22e70ac0", "metadata": {}, "outputs": [], "source": [ @@ -52,7 +52,7 @@ }, { "cell_type": "markdown", - "id": "90643638", + "id": "fd136388", "metadata": {}, "source": [ "Now we can write functions to manipulate values of this type.\n", @@ -64,7 +64,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a61d03d4", + "id": "6212e3f1", "metadata": {}, "outputs": [], "source": [ @@ -79,7 +79,7 @@ }, { "cell_type": "markdown", - "id": "c2788e0d", + "id": "a933a802", "metadata": {}, "source": [ "Similarly, we can define a function to add two numbers:" @@ -88,7 +88,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5540c90f", + "id": "2113bd2c", "metadata": {}, "outputs": [], "source": [ @@ -100,7 +100,7 @@ }, { "cell_type": "markdown", - "id": "714c816a", + "id": "df67dc16", "metadata": {}, "source": [ "We can convert `nat` values to type `int` and vice-versa:" @@ -109,7 +109,7 @@ { "cell_type": "code", "execution_count": null, - "id": "00a70bf8", + "id": "a2836ec5", "metadata": {}, "outputs": [], "source": [ @@ -125,7 +125,7 @@ }, { "cell_type": "markdown", - "id": "2adf0af5", + "id": "26a7fefd", "metadata": {}, "source": [ "To determine whether a natural number is even or odd, we can write a\n", @@ -135,7 +135,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a576b885", + "id": "d025595b", "metadata": {}, "outputs": [], "source": [ diff --git a/_sources/chapters/data/options.ipynb b/_sources/chapters/data/options.ipynb index c112b46..e6ac5ba 100644 --- a/_sources/chapters/data/options.ipynb +++ b/_sources/chapters/data/options.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "d9492300", + "id": "16907395", "metadata": {}, "source": [ "# Options\n", @@ -58,7 +58,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f9a1f447", + "id": "d862443d", "metadata": {}, "outputs": [], "source": [ @@ -67,7 +67,7 @@ }, { "cell_type": "markdown", - "id": "e4c04763", + "id": "5f6301c4", "metadata": {}, "source": [ "And here's how we create an option that is like an empty box:" @@ -76,7 +76,7 @@ { "cell_type": "code", "execution_count": null, - "id": "56f922bf", + "id": "dd98bd01", "metadata": {}, "outputs": [], "source": [ @@ -85,7 +85,7 @@ }, { "cell_type": "markdown", - "id": "1ef1189a", + "id": "b0702afb", "metadata": {}, "source": [ "The `Some` means there's something inside the box, and it's `42`. The `None`\n", @@ -106,7 +106,7 @@ { "cell_type": "code", "execution_count": null, - "id": "56015844", + "id": "5d76ea90", "metadata": {}, "outputs": [], "source": [ @@ -118,7 +118,7 @@ }, { "cell_type": "markdown", - "id": "8c33bcdf", + "id": "c5c2f11c", "metadata": {}, "source": [ "And here are a couple of example usages of that function:" @@ -127,7 +127,7 @@ { "cell_type": "code", "execution_count": null, - "id": "63f6f242", + "id": "de18ba9a", "metadata": {}, "outputs": [], "source": [ @@ -137,7 +137,7 @@ }, { "cell_type": "markdown", - "id": "de5a2710", + "id": "6a4c8c3e", "metadata": {}, "source": [ "Here's how we can write `list_max` with options:" @@ -146,7 +146,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d3e2040e", + "id": "56c83eff", "metadata": {}, "outputs": [], "source": [ @@ -161,7 +161,7 @@ }, { "cell_type": "markdown", - "id": "5296de52", + "id": "c378e338", "metadata": {}, "source": [ "```{tip}\n", diff --git a/_sources/chapters/data/pattern_matching_advanced.ipynb b/_sources/chapters/data/pattern_matching_advanced.ipynb index e27c709..d0583da 100644 --- a/_sources/chapters/data/pattern_matching_advanced.ipynb +++ b/_sources/chapters/data/pattern_matching_advanced.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "a4bd78f0", + "id": "b531fc66", "metadata": {}, "source": [ "# Advanced Pattern Matching\n", @@ -125,7 +125,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8f904fdc", + "id": "69d4c305", "metadata": {}, "outputs": [], "source": [ @@ -153,7 +153,7 @@ }, { "cell_type": "markdown", - "id": "895ad37a", + "id": "8464dab2", "metadata": {}, "source": [ "Here's how to get the first and second components of a pair:" @@ -162,7 +162,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e193e97e", + "id": "8638f4ad", "metadata": {}, "outputs": [], "source": [ @@ -173,7 +173,7 @@ }, { "cell_type": "markdown", - "id": "c2793e9c", + "id": "bc7910bd", "metadata": {}, "source": [ "Both `fst` and `snd` are actually already defined for you in the standard\n", @@ -185,7 +185,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0457627e", + "id": "1fe53634", "metadata": {}, "outputs": [], "source": [ @@ -208,7 +208,7 @@ }, { "cell_type": "markdown", - "id": "9835005b", + "id": "5f0b458b", "metadata": {}, "source": [ "The standard library does not define any functions for triples, quadruples, etc." diff --git a/_sources/chapters/data/records_tuples.ipynb b/_sources/chapters/data/records_tuples.ipynb index ba7d24c..1a8307e 100644 --- a/_sources/chapters/data/records_tuples.ipynb +++ b/_sources/chapters/data/records_tuples.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "4b4a0d72", + "id": "5cb46659", "metadata": {}, "source": [ "# Records and Tuples\n", @@ -26,7 +26,7 @@ { "cell_type": "code", "execution_count": null, - "id": "85b6ee37", + "id": "88113fb6", "metadata": {}, "outputs": [], "source": [ @@ -36,7 +36,7 @@ }, { "cell_type": "markdown", - "id": "380ccf63", + "id": "1e4bd77c", "metadata": {}, "source": [ "This type defines a record with three *fields* named `name`, `hp` (hit points),\n", @@ -51,7 +51,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d5f052b7", + "id": "d9074921", "metadata": {}, "outputs": [], "source": [ @@ -60,7 +60,7 @@ }, { "cell_type": "markdown", - "id": "00150ac5", + "id": "52b25433", "metadata": {}, "source": [ "So in a type definition we write a colon between the name and the type of a\n", @@ -73,7 +73,7 @@ { "cell_type": "code", "execution_count": null, - "id": "59c1a5f9", + "id": "ee6e5e3c", "metadata": {}, "outputs": [], "source": [ @@ -83,7 +83,7 @@ }, { "cell_type": "markdown", - "id": "7f3f527b", + "id": "f2628d0b", "metadata": {}, "source": [ "It's also possible to use pattern matching to access record fields:" @@ -92,7 +92,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d3ffd647", + "id": "3ba030a3", "metadata": {}, "outputs": [], "source": [ @@ -101,7 +101,7 @@ }, { "cell_type": "markdown", - "id": "d42c2f35", + "id": "982b2cc1", "metadata": {}, "source": [ "The `n`, `h`, and `t` here are pattern variables. There is a syntactic sugar\n", @@ -112,7 +112,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1387aac5", + "id": "8f4d4109", "metadata": {}, "outputs": [], "source": [ @@ -121,7 +121,7 @@ }, { "cell_type": "markdown", - "id": "15f708b1", + "id": "c7665f31", "metadata": {}, "source": [ "Here, the pattern `{name; hp; ptype}` is sugar for\n", @@ -246,7 +246,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d8e2a777", + "id": "3824c8dc", "metadata": {}, "outputs": [], "source": [ @@ -255,7 +255,7 @@ }, { "cell_type": "markdown", - "id": "958bed37", + "id": "fdaa6058", "metadata": {}, "source": [ "{{ video_embed | replace(\"%%VID%%\", \"4QNzC2KZ5I4\")}}\n", diff --git a/_sources/chapters/data/trees.ipynb b/_sources/chapters/data/trees.ipynb index d0625ca..eb364ad 100644 --- a/_sources/chapters/data/trees.ipynb +++ b/_sources/chapters/data/trees.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "5c8ed167", + "id": "df82be1b", "metadata": {}, "source": [ "# Example: Trees\n", @@ -22,7 +22,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1c4c72b5", + "id": "04969a25", "metadata": {}, "outputs": [], "source": [ @@ -33,7 +33,7 @@ }, { "cell_type": "markdown", - "id": "b071f0c4", + "id": "6b1d196c", "metadata": {}, "source": [ "A node carries a data item of type `'a` and has a left and right subtree. A leaf\n", @@ -55,7 +55,7 @@ { "cell_type": "code", "execution_count": null, - "id": "915fc927", + "id": "a7194890", "metadata": {}, "outputs": [], "source": [ @@ -81,7 +81,7 @@ }, { "cell_type": "markdown", - "id": "426f3a5b", + "id": "844353f5", "metadata": {}, "source": [ "The *size* of a tree is the number of nodes in it (that is, `Node`s, not\n", @@ -103,7 +103,7 @@ { "cell_type": "code", "execution_count": null, - "id": "51050e48", + "id": "b3de9702", "metadata": {}, "outputs": [], "source": [ @@ -120,7 +120,7 @@ }, { "cell_type": "markdown", - "id": "ca0dff53", + "id": "c04e7fe6", "metadata": {}, "source": [ "Here's an example tree:" @@ -129,7 +129,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ece0a37e", + "id": "080675bb", "metadata": {}, "outputs": [], "source": [ @@ -147,7 +147,7 @@ }, { "cell_type": "markdown", - "id": "bca89c01", + "id": "dc5ba4d9", "metadata": {}, "source": [ "We can use pattern matching to write the usual algorithms for recursively\n", @@ -157,7 +157,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e4b24f4a", + "id": "a78f3d17", "metadata": {}, "outputs": [], "source": [ @@ -169,7 +169,7 @@ }, { "cell_type": "markdown", - "id": "94370406", + "id": "a0d64823", "metadata": {}, "source": [ "The function name `mem` is short for \"member\"; the standard library often uses a\n", @@ -184,7 +184,7 @@ { "cell_type": "code", "execution_count": null, - "id": "edfc3ca0", + "id": "defe7130", "metadata": {}, "outputs": [], "source": [ @@ -196,7 +196,7 @@ { "cell_type": "code", "execution_count": null, - "id": "32187c9d", + "id": "8882429d", "metadata": {}, "outputs": [], "source": [ @@ -205,7 +205,7 @@ }, { "cell_type": "markdown", - "id": "2d37e8b8", + "id": "e5219cdd", "metadata": {}, "source": [ "Although the algorithm is beautifully clear from the code above, it takes\n", @@ -217,7 +217,7 @@ { "cell_type": "code", "execution_count": null, - "id": "be47c26d", + "id": "202827ed", "metadata": {}, "outputs": [], "source": [ @@ -230,7 +230,7 @@ }, { "cell_type": "markdown", - "id": "b31d66c9", + "id": "2d50a034", "metadata": {}, "source": [ "The version above uses exactly one `::` operation per `Node` in the tree,\n", diff --git a/_sources/chapters/data/type_synonym.ipynb b/_sources/chapters/data/type_synonym.ipynb index f667fae..f3d6a5b 100644 --- a/_sources/chapters/data/type_synonym.ipynb +++ b/_sources/chapters/data/type_synonym.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "079e37e8", + "id": "0f69175d", "metadata": {}, "source": [ "# Type Synonyms\n", @@ -15,7 +15,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0b25ffcd", + "id": "65a99a5a", "metadata": {}, "outputs": [], "source": [ @@ -26,7 +26,7 @@ }, { "cell_type": "markdown", - "id": "414d18fd", + "id": "99a77098", "metadata": {}, "source": [ "Anywhere that a `float * float` is expected, you could use `point`, and\n", @@ -38,7 +38,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d19d30c5", + "id": "da93fa82", "metadata": {}, "outputs": [], "source": [ @@ -53,7 +53,7 @@ }, { "cell_type": "markdown", - "id": "dda3bb2a", + "id": "ddb7548a", "metadata": {}, "source": [ "Type synonyms are useful because they let us give descriptive names to complex\n", diff --git a/_sources/chapters/data/variants.ipynb b/_sources/chapters/data/variants.ipynb index 9f677ce..ac7ae6b 100644 --- a/_sources/chapters/data/variants.ipynb +++ b/_sources/chapters/data/variants.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "5ff3e4bd", + "id": "b9bf4bc2", "metadata": {}, "source": [ "# Variants\n", @@ -14,7 +14,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d2ce07d0", + "id": "18c60f1c", "metadata": {}, "outputs": [], "source": [ @@ -24,7 +24,7 @@ }, { "cell_type": "markdown", - "id": "3001036b", + "id": "46d22b4e", "metadata": {}, "source": [ "The individual names of the values of a variant are called *constructors* in\n", @@ -39,7 +39,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b11c5461", + "id": "a11914cf", "metadata": {}, "outputs": [], "source": [ @@ -56,7 +56,7 @@ }, { "cell_type": "markdown", - "id": "9b7ed6ab", + "id": "a38097fb", "metadata": {}, "source": [ "There isn't any kind of automatic way of mapping a constructor name to an `int`,\n", @@ -91,7 +91,7 @@ { "cell_type": "code", "execution_count": null, - "id": "62ab6a27", + "id": "c1b12a67", "metadata": {}, "outputs": [], "source": [ @@ -102,7 +102,7 @@ }, { "cell_type": "markdown", - "id": "faaefeb5", + "id": "a6c7d5fc", "metadata": {}, "source": [ "When `D` appears after these definitions, to which type does it refer? That is,\n", @@ -117,7 +117,7 @@ { "cell_type": "code", "execution_count": null, - "id": "abd4be01", + "id": "d784b5be", "metadata": {}, "outputs": [], "source": [ @@ -130,7 +130,7 @@ }, { "cell_type": "markdown", - "id": "2a60865b", + "id": "dba97335", "metadata": {}, "source": [ "Because \"Normal\" would naturally be a constructor name for both the type of a\n", diff --git a/_sources/chapters/ds/hash_tables.ipynb b/_sources/chapters/ds/hash_tables.ipynb index acf6642..f5d0ffe 100644 --- a/_sources/chapters/ds/hash_tables.ipynb +++ b/_sources/chapters/ds/hash_tables.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "4b1ed4be", + "id": "01f627c5", "metadata": {}, "source": [ "# Hash Tables\n", @@ -56,7 +56,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9b584aeb", + "id": "c5b9de9c", "metadata": { "tags": [ "hide-output" @@ -99,7 +99,7 @@ }, { "cell_type": "markdown", - "id": "e9a56821", + "id": "0076ff51", "metadata": {}, "source": [ "Next, we're going to examine three implementations of maps based on\n", @@ -129,7 +129,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0f6f9450", + "id": "7bd931ef", "metadata": { "tags": [ "hide-output" @@ -179,7 +179,7 @@ }, { "cell_type": "markdown", - "id": "75df3cfc", + "id": "2b000aeb", "metadata": {}, "source": [ "{{ video_embed | replace(\"%%VID%%\", \"yZkQhcIM0OA\")}}\n", @@ -221,7 +221,7 @@ { "cell_type": "code", "execution_count": null, - "id": "60777706", + "id": "69815b20", "metadata": { "tags": [ "hide-output" @@ -266,7 +266,7 @@ }, { "cell_type": "markdown", - "id": "c5a60fde", + "id": "55577083", "metadata": {}, "source": [ "{{ video_embed | replace(\"%%VID%%\", \"eDd9i-imDYo\")}}\n", @@ -277,7 +277,7 @@ { "cell_type": "code", "execution_count": null, - "id": "148763be", + "id": "a15c7883", "metadata": { "tags": [ "hide-output" @@ -327,7 +327,7 @@ }, { "cell_type": "markdown", - "id": "c151c099", + "id": "83002bac", "metadata": {}, "source": [ "Its efficiency is great! The `insert`, `find`, and `remove` operations are\n", @@ -361,7 +361,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0c9dc50f", + "id": "9efc6f0c", "metadata": {}, "outputs": [], "source": [ @@ -402,7 +402,7 @@ }, { "cell_type": "markdown", - "id": "873ac1c6", + "id": "c5eba627", "metadata": {}, "source": [ "One immediate problem with this idea is what to do if the output of the hash is\n", @@ -566,7 +566,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e3c94ee7", + "id": "28bf7047", "metadata": { "tags": [ "hide-output" @@ -691,7 +691,7 @@ }, { "cell_type": "markdown", - "id": "1423fdfe", + "id": "4f1e1530", "metadata": {}, "source": [ "{{ video_embed | replace(\"%%VID%%\", \"FN-YyNaSkz8\")}}\n", @@ -801,7 +801,7 @@ { "cell_type": "code", "execution_count": null, - "id": "69415095", + "id": "11af04d1", "metadata": {}, "outputs": [], "source": [ @@ -813,7 +813,7 @@ }, { "cell_type": "markdown", - "id": "a3819406", + "id": "e59656f5", "metadata": {}, "source": [ "The hash values stop changing after the list goes beyond 10 elements. That has\n", @@ -848,7 +848,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9968e72c", + "id": "426d0f0f", "metadata": {}, "outputs": [], "source": [ @@ -861,7 +861,7 @@ }, { "cell_type": "markdown", - "id": "a7e6e92a", + "id": "60c25cfb", "metadata": {}, "source": [ "We can query the hash table to find out how the bindings are distributed\n", @@ -871,7 +871,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b57c497f", + "id": "ccc43cf6", "metadata": {}, "outputs": [], "source": [ @@ -880,7 +880,7 @@ }, { "cell_type": "markdown", - "id": "57e077e8", + "id": "cff2fe31", "metadata": {}, "source": [ "The number of bindings and number of buckets are equal, so the load factor is 1.\n", @@ -892,7 +892,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f29a73a1", + "id": "fabd4b2c", "metadata": {}, "outputs": [], "source": [ @@ -904,7 +904,7 @@ }, { "cell_type": "markdown", - "id": "e9b096bb", + "id": "372b484d", "metadata": {}, "source": [ "Now adding one more binding will trigger a resize, which doubles the number of\n", @@ -914,7 +914,7 @@ { "cell_type": "code", "execution_count": null, - "id": "dcf4aaf9", + "id": "ea1346ad", "metadata": {}, "outputs": [], "source": [ @@ -924,7 +924,7 @@ }, { "cell_type": "markdown", - "id": "00564535", + "id": "58f96e8f", "metadata": {}, "source": [ "But `Hashtbl` does not implement resize on removal:" @@ -933,7 +933,7 @@ { "cell_type": "code", "execution_count": null, - "id": "51e12ac4", + "id": "01440023", "metadata": {}, "outputs": [], "source": [ @@ -945,7 +945,7 @@ }, { "cell_type": "markdown", - "id": "0369948e", + "id": "b6a070a2", "metadata": {}, "source": [ "The number of buckets is still 32, even though all bindings have been removed.\n", diff --git a/_sources/chapters/ds/memoization.ipynb b/_sources/chapters/ds/memoization.ipynb index c947408..53ba3ca 100644 --- a/_sources/chapters/ds/memoization.ipynb +++ b/_sources/chapters/ds/memoization.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "7be264b1", + "id": "5c184484", "metadata": {}, "source": [ "# Memoization\n", @@ -27,7 +27,7 @@ { "cell_type": "code", "execution_count": null, - "id": "81d0aebc", + "id": "d8929c13", "metadata": {}, "outputs": [], "source": [ @@ -36,7 +36,7 @@ }, { "cell_type": "markdown", - "id": "97c4f335", + "id": "62ba3ad6", "metadata": {}, "source": [ "```{note}\n", @@ -53,7 +53,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d62bbf7d", + "id": "6039e4f2", "metadata": {}, "outputs": [], "source": [ @@ -75,7 +75,7 @@ }, { "cell_type": "markdown", - "id": "68668851", + "id": "ab436d78", "metadata": {}, "source": [ "The function `f_mem` defined inside `fibm` contains the original recursive\n", @@ -121,7 +121,7 @@ { "cell_type": "code", "execution_count": null, - "id": "32a4ff78", + "id": "883732fd", "metadata": {}, "outputs": [], "source": [ @@ -137,7 +137,7 @@ }, { "cell_type": "markdown", - "id": "350ca3bc", + "id": "a76822fd", "metadata": {}, "source": [ "For recursive functions, however, the recursive call structure needs to be\n", @@ -148,7 +148,7 @@ { "cell_type": "code", "execution_count": null, - "id": "44dcf1de", + "id": "8c2814d5", "metadata": {}, "outputs": [], "source": [ @@ -166,7 +166,7 @@ }, { "cell_type": "markdown", - "id": "ab8c3ea3", + "id": "bc4f1ec4", "metadata": {}, "source": [ "Now we can slightly rewrite the original `fib` function above using this general\n", @@ -176,7 +176,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d29e144b", + "id": "bd54399f", "metadata": {}, "outputs": [], "source": [ @@ -189,7 +189,7 @@ }, { "cell_type": "markdown", - "id": "7b031a6c", + "id": "be4fb377", "metadata": {}, "source": [ "## Just for Fun: Party Optimization\n", @@ -226,7 +226,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3dfe1dd2", + "id": "f22b71d3", "metadata": {}, "outputs": [], "source": [ @@ -256,7 +256,7 @@ }, { "cell_type": "markdown", - "id": "3593a51f", + "id": "c797f304", "metadata": {}, "source": [ "This code has exponential running time. But notice that there are only $n$\n", @@ -269,7 +269,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c5323417", + "id": "719215e4", "metadata": {}, "outputs": [], "source": [ @@ -316,7 +316,7 @@ }, { "cell_type": "markdown", - "id": "48e164a6", + "id": "b115a8e7", "metadata": {}, "source": [ "Why was memoization so effective for solving this problem? As with the Fibonacci\n", diff --git a/_sources/chapters/ds/monads.ipynb b/_sources/chapters/ds/monads.ipynb index 612c68b..0b8ca12 100644 --- a/_sources/chapters/ds/monads.ipynb +++ b/_sources/chapters/ds/monads.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "9dc1cb14", + "id": "254af77d", "metadata": {}, "source": [ "# Monads\n", @@ -42,7 +42,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d82c88f2", + "id": "6bce6dd9", "metadata": { "tags": [ "hide-output" @@ -59,7 +59,7 @@ }, { "cell_type": "markdown", - "id": "42903a48", + "id": "164a2d9f", "metadata": {}, "source": [ "Second, a monad must obey what are called the *monad laws*. We will return to\n", @@ -102,7 +102,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4d3ce61e", + "id": "8d0b9ab9", "metadata": { "tags": [ "hide-output" @@ -119,7 +119,7 @@ }, { "cell_type": "markdown", - "id": "2424acb0", + "id": "fbf756cb", "metadata": {}, "source": [ "All of the above is likely to feel very abstract upon first reading. It will\n", @@ -162,7 +162,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8ed8bfbf", + "id": "a55ea4aa", "metadata": {}, "outputs": [], "source": [ @@ -173,7 +173,7 @@ { "cell_type": "code", "execution_count": null, - "id": "04d65385", + "id": "5151959c", "metadata": { "tags": [ "raises-exception" @@ -192,7 +192,7 @@ }, { "cell_type": "markdown", - "id": "882dcd8b", + "id": "9876f177", "metadata": {}, "source": [ "The problem is that we can't add an `int` to an `int option`: the addition\n", @@ -206,7 +206,7 @@ { "cell_type": "code", "execution_count": null, - "id": "12d7515b", + "id": "0a917bdd", "metadata": { "tags": [ "hide-output" @@ -247,7 +247,7 @@ { "cell_type": "code", "execution_count": null, - "id": "684b6f16", + "id": "d4dab0b0", "metadata": {}, "outputs": [], "source": [ @@ -257,7 +257,7 @@ }, { "cell_type": "markdown", - "id": "8db3b12a", + "id": "bbb13a5a", "metadata": {}, "source": [ "But that's a tremendous amount of code duplication. We ought to apply the\n", @@ -269,7 +269,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3de6a250", + "id": "1d8c8cde", "metadata": {}, "outputs": [], "source": [ @@ -285,7 +285,7 @@ }, { "cell_type": "markdown", - "id": "48f612df", + "id": "f09d588c", "metadata": {}, "source": [ "Unfortunately, division is harder to deduplicate. We can't just pass\n", @@ -301,7 +301,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b9a937c3", + "id": "0d0d944a", "metadata": {}, "outputs": [], "source": [ @@ -317,7 +317,7 @@ }, { "cell_type": "markdown", - "id": "1dd1adb3", + "id": "9ed89c4e", "metadata": {}, "source": [ "Implementing the other three operations requires a little more work, because\n", @@ -328,7 +328,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b58b3fe2", + "id": "1680f19a", "metadata": {}, "outputs": [], "source": [ @@ -342,7 +342,7 @@ }, { "cell_type": "markdown", - "id": "fd88f206", + "id": "605586c8", "metadata": {}, "source": [ "Finally, we could re-implement `div` to use `wrap_output`:" @@ -351,7 +351,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6ea27bfd", + "id": "6db9b50e", "metadata": {}, "outputs": [], "source": [ @@ -363,7 +363,7 @@ }, { "cell_type": "markdown", - "id": "30365fca", + "id": "b3554410", "metadata": {}, "source": [ "**Where's the Monad?** The work we just did was to take functions on integers\n", @@ -385,7 +385,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2a71bbb8", + "id": "5eb5dcee", "metadata": {}, "outputs": [], "source": [ @@ -394,7 +394,7 @@ }, { "cell_type": "markdown", - "id": "76938d2f", + "id": "5f1b326a", "metadata": {}, "source": [ "This function has the *trivial effect* of putting a value into the metaphorical\n", @@ -409,7 +409,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d9b09d53", + "id": "ff26e5ff", "metadata": {}, "outputs": [], "source": [ @@ -423,7 +423,7 @@ }, { "cell_type": "markdown", - "id": "75da5de4", + "id": "536dc1d3", "metadata": {}, "source": [ "The `bind` function can be understood as doing the core work of upgrading `op`\n", @@ -435,7 +435,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5f9c114e", + "id": "090a3796", "metadata": {}, "outputs": [], "source": [ @@ -445,7 +445,7 @@ }, { "cell_type": "markdown", - "id": "caec8f68", + "id": "c16812dc", "metadata": {}, "source": [ "All those type annotations are intended to help the reader understand\n", @@ -455,7 +455,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8781ae74", + "id": "9a3b95ed", "metadata": {}, "outputs": [], "source": [ @@ -464,7 +464,7 @@ }, { "cell_type": "markdown", - "id": "a2849be6", + "id": "568643a5", "metadata": {}, "source": [ "Using just the `return` and `>>=` functions, we could re-implement the\n", @@ -474,7 +474,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1922f6e8", + "id": "9681ff39", "metadata": {}, "outputs": [], "source": [ @@ -501,7 +501,7 @@ }, { "cell_type": "markdown", - "id": "255388ee", + "id": "b6a58176", "metadata": {}, "source": [ "Recall, from our discussion of the bind operator in Lwt, that the syntax above\n", @@ -518,7 +518,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f5168636", + "id": "07d81cfa", "metadata": {}, "outputs": [], "source": [ @@ -537,7 +537,7 @@ }, { "cell_type": "markdown", - "id": "f8a7c1d3", + "id": "dd4feb1b", "metadata": {}, "source": [ "**The Maybe Monad.** The monad we just discovered goes by several names: the\n", @@ -553,7 +553,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6d13f7a9", + "id": "7dc69e1a", "metadata": {}, "outputs": [], "source": [ @@ -571,7 +571,7 @@ }, { "cell_type": "markdown", - "id": "7b0027d4", + "id": "c7a80d1c", "metadata": {}, "source": [ "These are the same implementations of `return` and `>>=` as we invented above,\n", @@ -596,7 +596,7 @@ { "cell_type": "code", "execution_count": null, - "id": "349136fe", + "id": "f423511e", "metadata": {}, "outputs": [], "source": [ @@ -608,7 +608,7 @@ }, { "cell_type": "markdown", - "id": "c7873ab9", + "id": "d4adb0ae", "metadata": {}, "source": [ "## Example: The Writer Monad\n", @@ -624,7 +624,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ff08ca78", + "id": "101f831f", "metadata": {}, "outputs": [], "source": [ @@ -634,7 +634,7 @@ }, { "cell_type": "markdown", - "id": "30c87e37", + "id": "c4288cd8", "metadata": {}, "source": [ "(Ok, those are really simple functions; we probably don't need any help\n", @@ -649,7 +649,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1ef6b083", + "id": "889fafe2", "metadata": {}, "outputs": [], "source": [ @@ -659,7 +659,7 @@ }, { "cell_type": "markdown", - "id": "211b7055", + "id": "0a1ffe60", "metadata": {}, "source": [ "But that changes the return type of both functions, which makes it hard to\n", @@ -669,7 +669,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8ade3db3", + "id": "ad88781a", "metadata": {}, "outputs": [], "source": [ @@ -678,7 +678,7 @@ }, { "cell_type": "markdown", - "id": "4f000107", + "id": "87c65193", "metadata": {}, "source": [ "or even better" @@ -687,7 +687,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c32bf622", + "id": "0a9ec00c", "metadata": {}, "outputs": [], "source": [ @@ -696,7 +696,7 @@ }, { "cell_type": "markdown", - "id": "65d1a9ef", + "id": "e281170e", "metadata": {}, "source": [ "or even better still, using the *composition operator* `>>`," @@ -705,7 +705,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d3409e6b", + "id": "cc82583d", "metadata": {}, "outputs": [], "source": [ @@ -715,7 +715,7 @@ }, { "cell_type": "markdown", - "id": "fa00e0de", + "id": "18a9a56e", "metadata": {}, "source": [ "and that would have worked just fine. But trying to do the same thing with the\n", @@ -725,7 +725,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d410ef0d", + "id": "2e49fee0", "metadata": { "tags": [ "raises-exception" @@ -738,7 +738,7 @@ }, { "cell_type": "markdown", - "id": "63ef63fd", + "id": "1c122746", "metadata": {}, "source": [ "That's because `inc_log x` would be a pair, but `dec_log` expects simply an\n", @@ -751,7 +751,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4b576f1a", + "id": "290fa552", "metadata": {}, "outputs": [], "source": [ @@ -763,7 +763,7 @@ }, { "cell_type": "markdown", - "id": "5c2d9a76", + "id": "acf4cb61", "metadata": {}, "source": [ "That works fine, but we also will need to code up a similar upgraded version of\n", @@ -774,7 +774,7 @@ { "cell_type": "code", "execution_count": null, - "id": "67437d51", + "id": "a38c3bc7", "metadata": {}, "outputs": [], "source": [ @@ -786,7 +786,7 @@ }, { "cell_type": "markdown", - "id": "68718853", + "id": "d9660842", "metadata": {}, "source": [ "And at this point we've duplicated far too much code. The implementations of\n", @@ -802,7 +802,7 @@ { "cell_type": "code", "execution_count": null, - "id": "91aad485", + "id": "60e1cbd8", "metadata": {}, "outputs": [], "source": [ @@ -812,7 +812,7 @@ }, { "cell_type": "markdown", - "id": "bb56e470", + "id": "8b462bf0", "metadata": {}, "source": [ "The second helper produces a logging function of type\n", @@ -822,7 +822,7 @@ { "cell_type": "code", "execution_count": null, - "id": "20f40ed0", + "id": "e5b76f81", "metadata": {}, "outputs": [], "source": [ @@ -834,7 +834,7 @@ }, { "cell_type": "markdown", - "id": "61fc7b43", + "id": "44d272aa", "metadata": {}, "source": [ "Using those helpers, we can implement the logging versions of our functions\n", @@ -845,7 +845,7 @@ { "cell_type": "code", "execution_count": null, - "id": "84f8fe60", + "id": "e7c649bf", "metadata": {}, "outputs": [], "source": [ @@ -861,7 +861,7 @@ }, { "cell_type": "markdown", - "id": "5581969c", + "id": "6bb0c70e", "metadata": {}, "source": [ "Here's an example usage:" @@ -870,7 +870,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0c41ebd5", + "id": "73851d2a", "metadata": {}, "outputs": [], "source": [ @@ -879,7 +879,7 @@ }, { "cell_type": "markdown", - "id": "c7e9d943", + "id": "533124ea", "metadata": {}, "source": [ "Notice how it's inconvenient to call our loggable functions on integers, since\n", @@ -890,7 +890,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f478c02c", + "id": "18808d63", "metadata": {}, "outputs": [], "source": [ @@ -899,7 +899,7 @@ }, { "cell_type": "markdown", - "id": "21fbebe1", + "id": "4dd9948a", "metadata": {}, "source": [ "And now we can write `id' (e 5)` instead of `id' (5, \"\")`.\n", @@ -920,7 +920,7 @@ { "cell_type": "code", "execution_count": null, - "id": "70ba8276", + "id": "5607eafd", "metadata": {}, "outputs": [], "source": [ @@ -929,7 +929,7 @@ }, { "cell_type": "markdown", - "id": "0086ff79", + "id": "a6eaf738", "metadata": {}, "source": [ "This function has the *trivial effect* of putting a value into the metaphorical\n", @@ -942,7 +942,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b6e25ecb", + "id": "42919f72", "metadata": {}, "outputs": [], "source": [ @@ -954,7 +954,7 @@ }, { "cell_type": "markdown", - "id": "f2acda2e", + "id": "d2ff62e9", "metadata": {}, "source": [ "Using `>>=`, we can re-implement `loggable`, such that no pairs\n", @@ -964,7 +964,7 @@ { "cell_type": "code", "execution_count": null, - "id": "af8b49cb", + "id": "82970eb1", "metadata": {}, "outputs": [], "source": [ @@ -976,7 +976,7 @@ }, { "cell_type": "markdown", - "id": "c78a7bf1", + "id": "2120e6a4", "metadata": {}, "source": [ "**The Writer Monad.** The monad we just discovered is usually called the *writer\n", @@ -987,7 +987,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ea90f2c7", + "id": "fe682021", "metadata": {}, "outputs": [], "source": [ @@ -1005,7 +1005,7 @@ }, { "cell_type": "markdown", - "id": "24d98d00", + "id": "512151db", "metadata": {}, "source": [ "As we saw with the maybe monad, these are the same implementations of `return`\n", @@ -1130,7 +1130,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5e5cdc44", + "id": "d270c690", "metadata": {}, "outputs": [], "source": [ @@ -1143,7 +1143,7 @@ }, { "cell_type": "markdown", - "id": "c3ffc0ea", + "id": "6130e829", "metadata": {}, "source": [ "The three monad laws are as follows:\n", @@ -1210,7 +1210,7 @@ { "cell_type": "code", "execution_count": null, - "id": "545b0316", + "id": "c414e69a", "metadata": {}, "outputs": [], "source": [ @@ -1223,7 +1223,7 @@ }, { "cell_type": "markdown", - "id": "3445140d", + "id": "632b2443", "metadata": {}, "source": [ "As the last line suggests, `compose` can be expressed as infix operator written\n", @@ -1236,7 +1236,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f3494dc5", + "id": "5808734d", "metadata": {}, "outputs": [], "source": [ @@ -1250,7 +1250,7 @@ }, { "cell_type": "markdown", - "id": "b5d9b1df", + "id": "38b9bd98", "metadata": {}, "source": [ "The monadic compose operator would enable us to compose those two into\n", @@ -1260,7 +1260,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d9c621dd", + "id": "95225007", "metadata": {}, "outputs": [], "source": [ @@ -1273,7 +1273,7 @@ }, { "cell_type": "markdown", - "id": "ce08d929", + "id": "7c1e6274", "metadata": {}, "source": [ "Using the compose operator, there is a much cleaner formulation of the monad\n", diff --git a/_sources/chapters/ds/parrays.ipynb b/_sources/chapters/ds/parrays.ipynb index 53075be..3907e0f 100644 --- a/_sources/chapters/ds/parrays.ipynb +++ b/_sources/chapters/ds/parrays.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "a8aa3bad", + "id": "f681b418", "metadata": {}, "source": [ "# Persistent Arrays\n", @@ -15,7 +15,7 @@ { "cell_type": "code", "execution_count": null, - "id": "aff7a958", + "id": "1b9b92fd", "metadata": {}, "outputs": [], "source": [ @@ -47,7 +47,7 @@ }, { "cell_type": "markdown", - "id": "ba03d778", + "id": "cd41c087", "metadata": {}, "source": [ "That interface essentially the same as OCaml's `Array` module, but reduced to just four essential functions.\n", @@ -62,7 +62,7 @@ { "cell_type": "code", "execution_count": null, - "id": "dd17f85d", + "id": "fcfb487f", "metadata": {}, "outputs": [], "source": [ @@ -88,7 +88,7 @@ }, { "cell_type": "markdown", - "id": "455580fa", + "id": "5525a6bb", "metadata": {}, "source": [ "We pay a large price for `set` in this implementation: instead of $O(1)$ like `array`, it is $O(n)$. We'll improve on that in our next implementation.\n", @@ -131,7 +131,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b7c90a1f", + "id": "0251102a", "metadata": {}, "outputs": [], "source": [ @@ -142,7 +142,7 @@ }, { "cell_type": "markdown", - "id": "97cc159b", + "id": "2c7f579d", "metadata": {}, "source": [ "A `Base` node contains the base version of the array; in our example above, that would be `a0`. A `Diff` node records a difference that is created by a `set` operation. The version tree for our example above would look like this:\n", @@ -167,7 +167,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e2efc2cc", + "id": "f4fab889", "metadata": {}, "outputs": [], "source": [ @@ -176,7 +176,7 @@ }, { "cell_type": "markdown", - "id": "47a93bd3", + "id": "c580d757", "metadata": {}, "source": [ "The efficiency of that is merely $O(1)$, which is a great improvement over copy-on-set arrays.\n", @@ -187,7 +187,7 @@ { "cell_type": "code", "execution_count": null, - "id": "68b2689d", + "id": "a77f42e9", "metadata": {}, "outputs": [], "source": [ @@ -200,7 +200,7 @@ }, { "cell_type": "markdown", - "id": "648c41e5", + "id": "5312537b", "metadata": {}, "source": [ "The efficiency of that implementation is $O(k)$, where $k$ is the number of `set` operations that have been performed on the persistent array. In the worst case, all of those `set` operations were performed on a different index than we want to `get`, and they were all performed without creating any branches in the tree — for example, `make 2 0 |> set 0 1 |> set 0 2 |> ... |> set 0 k |> get 1`. Then the tree degenerates to a linked list, and `get` is forced to walk down the entire list to the `Base` node to find the original value.\n", @@ -213,7 +213,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2237103e", + "id": "c9054417", "metadata": {}, "outputs": [], "source": [ @@ -250,7 +250,7 @@ }, { "cell_type": "markdown", - "id": "0030a2d8", + "id": "7da3f681", "metadata": {}, "source": [ "## Rebasing Version-Tree Arrays\n", @@ -265,7 +265,7 @@ { "cell_type": "code", "execution_count": null, - "id": "31c2b757", + "id": "f6066190", "metadata": {}, "outputs": [], "source": [ @@ -277,7 +277,7 @@ }, { "cell_type": "markdown", - "id": "ca011778", + "id": "6a6808fe", "metadata": {}, "source": [ "**Make and set.** The `make` and `set` operations require just the insertion of a call to `ref` to adapt to the new representation type:" @@ -286,7 +286,7 @@ { "cell_type": "code", "execution_count": null, - "id": "096bc530", + "id": "2f1dd325", "metadata": {}, "outputs": [], "source": [ @@ -296,7 +296,7 @@ }, { "cell_type": "markdown", - "id": "8d84225e", + "id": "39422259", "metadata": {}, "source": [ "Their efficiency is unchanged: $O(n)$ for `make`, and $O(1)$ for `set`.\n", @@ -327,7 +327,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2ea25d2e", + "id": "ead8f4b1", "metadata": {}, "outputs": [], "source": [ @@ -345,7 +345,7 @@ }, { "cell_type": "markdown", - "id": "7fc684d0", + "id": "9c63c276", "metadata": {}, "source": [ "The efficiency of `rebase` is $O(k)$, because there could be up to $k$ `Diff` nodes between `t` and its original `Base`. Immediately after calling `rebase t`, any further calls to `rebase t` will be only $O(1)$, because `t` is now primary. \n", @@ -356,7 +356,7 @@ { "cell_type": "code", "execution_count": null, - "id": "67b5ede3", + "id": "a2829c9c", "metadata": {}, "outputs": [], "source": [ @@ -366,7 +366,7 @@ }, { "cell_type": "markdown", - "id": "9cba042b", + "id": "703292ec", "metadata": {}, "source": [ "The efficiency of these is the same as `rebase`: $O(k)$ on the first call, then $O(1)$ on future calls as long as no other version of the array has been accessed in the mean time.\n", @@ -377,7 +377,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b5593b6c", + "id": "288e1027", "metadata": {}, "outputs": [], "source": [ @@ -421,7 +421,7 @@ }, { "cell_type": "markdown", - "id": "2290ec6a", + "id": "e3d2f7dc", "metadata": {}, "source": [ "With rebasing we now have $O(1)$ `get` and `set` operations on the primary (most recently accessed version) of the array. We pay an $O(k)$ price to change to a new primary version, but after that, access to it remains $O(1)$ until another rebase occurs.\n", diff --git a/_sources/chapters/ds/promises.ipynb b/_sources/chapters/ds/promises.ipynb index e8f3cb3..4f99483 100644 --- a/_sources/chapters/ds/promises.ipynb +++ b/_sources/chapters/ds/promises.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "90606115", + "id": "db4bfb06", "metadata": {}, "source": [ "# Promises\n", @@ -188,7 +188,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ec3d9c57", + "id": "fe603f37", "metadata": {}, "outputs": [], "source": [ @@ -227,7 +227,7 @@ }, { "cell_type": "markdown", - "id": "cd413c97", + "id": "700e0838", "metadata": {}, "source": [ "To implement that interface, we can make the representation type of\n", @@ -237,7 +237,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c5fd8dee", + "id": "44cf8207", "metadata": {}, "outputs": [], "source": [ @@ -247,7 +247,7 @@ }, { "cell_type": "markdown", - "id": "9cd9e9a6", + "id": "f48fdfb2", "metadata": {}, "source": [ "That way it's possible to mutate the contents of the promise.\n", @@ -259,7 +259,7 @@ { "cell_type": "code", "execution_count": null, - "id": "88eddaa9", + "id": "3df70d8a", "metadata": {}, "outputs": [], "source": [ @@ -268,7 +268,7 @@ }, { "cell_type": "markdown", - "id": "68de2983", + "id": "c2035857", "metadata": {}, "source": [ "So internally, the two types are exactly the same. But externally no client of\n", @@ -286,7 +286,7 @@ { "cell_type": "code", "execution_count": null, - "id": "141a4105", + "id": "2f976d4a", "metadata": {}, "outputs": [], "source": [ @@ -301,7 +301,7 @@ }, { "cell_type": "markdown", - "id": "ceadf7d5", + "id": "f762e868", "metadata": {}, "source": [ "Using that helper, we can implement the `make` function:" @@ -310,7 +310,7 @@ { "cell_type": "code", "execution_count": null, - "id": "657a11ca", + "id": "68ceecd1", "metadata": {}, "outputs": [], "source": [ @@ -321,7 +321,7 @@ }, { "cell_type": "markdown", - "id": "2310fddb", + "id": "e9bb5639", "metadata": {}, "source": [ "The remaining functions in the interface are trivial to implement.\n", @@ -331,7 +331,7 @@ { "cell_type": "code", "execution_count": null, - "id": "55d3139e", + "id": "426a27d3", "metadata": {}, "outputs": [], "source": [ @@ -367,7 +367,7 @@ }, { "cell_type": "markdown", - "id": "9c72b8dc", + "id": "b0eb3832", "metadata": {}, "source": [ "## Lwt Promises\n", @@ -385,7 +385,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3e4eaeb6", + "id": "29019542", "metadata": {}, "outputs": [], "source": [ @@ -417,7 +417,7 @@ }, { "cell_type": "markdown", - "id": "5a6a54cf", + "id": "d79eb0d7", "metadata": {}, "source": [ "Lwt's implementation of that interface is much more complex than our own\n", @@ -431,7 +431,7 @@ { "cell_type": "code", "execution_count": null, - "id": "62993e67", + "id": "e0ccc50c", "metadata": { "tags": [ "remove-cell" @@ -445,7 +445,7 @@ { "cell_type": "code", "execution_count": null, - "id": "12f95c35", + "id": "589ac517", "metadata": { "tags": [ "remove-output" @@ -459,7 +459,7 @@ { "cell_type": "code", "execution_count": null, - "id": "37fd56ce", + "id": "96aa7b14", "metadata": {}, "outputs": [], "source": [ @@ -468,7 +468,7 @@ }, { "cell_type": "markdown", - "id": "6d5dddc1", + "id": "a03b6aa9", "metadata": {}, "source": [ "To avoid those weak type variables, we can provide a further hint to OCaml as to\n", @@ -480,7 +480,7 @@ { "cell_type": "code", "execution_count": null, - "id": "08ba5c38", + "id": "59e19f72", "metadata": {}, "outputs": [], "source": [ @@ -489,7 +489,7 @@ }, { "cell_type": "markdown", - "id": "0c979ee6", + "id": "177c4f72", "metadata": {}, "source": [ "Now we can resolve the promise:" @@ -498,7 +498,7 @@ { "cell_type": "code", "execution_count": null, - "id": "87cbfbc4", + "id": "2377485d", "metadata": {}, "outputs": [], "source": [ @@ -508,7 +508,7 @@ { "cell_type": "code", "execution_count": null, - "id": "add408b9", + "id": "b236eb81", "metadata": {}, "outputs": [], "source": [ @@ -518,7 +518,7 @@ { "cell_type": "code", "execution_count": null, - "id": "aa804163", + "id": "e3cd8929", "metadata": {}, "outputs": [], "source": [ @@ -528,7 +528,7 @@ { "cell_type": "code", "execution_count": null, - "id": "804293c9", + "id": "520a6f41", "metadata": { "tags": [ "raises-exception" @@ -541,7 +541,7 @@ }, { "cell_type": "markdown", - "id": "1529a60f", + "id": "668a5ddc", "metadata": {}, "source": [ "That last exception was raised because we attempted to resolve the promise a\n", @@ -553,7 +553,7 @@ { "cell_type": "code", "execution_count": null, - "id": "73d41a3a", + "id": "e683439c", "metadata": {}, "outputs": [], "source": [ @@ -564,7 +564,7 @@ }, { "cell_type": "markdown", - "id": "fc6859e8", + "id": "0b31085c", "metadata": {}, "source": [ "Note that nothing we have implemented so far does anything concurrently.\n", @@ -1229,7 +1229,7 @@ { "cell_type": "code", "execution_count": null, - "id": "367e31e4", + "id": "1c951f46", "metadata": {}, "outputs": [], "source": [ diff --git a/_sources/chapters/ds/rb.ipynb b/_sources/chapters/ds/rb.ipynb index 08be11d..919fc9a 100644 --- a/_sources/chapters/ds/rb.ipynb +++ b/_sources/chapters/ds/rb.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "ea85250f", + "id": "a7bb74ac", "metadata": {}, "source": [ "# Red-Black Trees\n", @@ -42,7 +42,7 @@ { "cell_type": "code", "execution_count": null, - "id": "deabef60", + "id": "2d13dcd5", "metadata": {}, "outputs": [], "source": [ @@ -67,7 +67,7 @@ }, { "cell_type": "markdown", - "id": "1feebaa3", + "id": "4e99c17f", "metadata": {}, "source": [ "What is the running time of those operations? Since `insert` is just a `mem`\n", @@ -129,7 +129,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bf0ed692", + "id": "418349ee", "metadata": {}, "outputs": [], "source": [ @@ -139,7 +139,7 @@ }, { "cell_type": "markdown", - "id": "f19ca760", + "id": "1661e5a1", "metadata": {}, "source": [ "Note that when we write \"node\" in this discussion we mean the `Node` constructor; **a `Leaf` is not a node.**\n", @@ -182,7 +182,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7a1fc145", + "id": "2a33e680", "metadata": {}, "outputs": [], "source": [ @@ -196,7 +196,7 @@ }, { "cell_type": "markdown", - "id": "04d0dd75", + "id": "e67cd2a5", "metadata": {}, "source": [ "What is the efficiency of `mem`?\n", @@ -335,7 +335,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4e297ada", + "id": "d8106514", "metadata": {}, "outputs": [], "source": [ @@ -350,7 +350,7 @@ }, { "cell_type": "markdown", - "id": "199c09e5", + "id": "37310fce", "metadata": {}, "source": [ "*Why does a rotation (i.e., the balance operation) preserve the BST Invariant?*\n", @@ -390,7 +390,7 @@ { "cell_type": "code", "execution_count": null, - "id": "24754544", + "id": "cdd101a7", "metadata": {}, "outputs": [], "source": [ @@ -410,7 +410,7 @@ }, { "cell_type": "markdown", - "id": "75f1aff8", + "id": "84839598", "metadata": {}, "source": [ "The amount of work done by `insert` is $O(\\log n)$. It recurses with `ins` down\n", diff --git a/_sources/chapters/ds/sequence.ipynb b/_sources/chapters/ds/sequence.ipynb index 79a97b3..ee6b1c2 100644 --- a/_sources/chapters/ds/sequence.ipynb +++ b/_sources/chapters/ds/sequence.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "ab0a3bb7", + "id": "46876b58", "metadata": {}, "source": [ "# Sequences\n", @@ -20,7 +20,7 @@ { "cell_type": "code", "execution_count": null, - "id": "95bc0d98", + "id": "2781663f", "metadata": {}, "outputs": [], "source": [ @@ -30,7 +30,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bfdf7e5a", + "id": "78bc18db", "metadata": {}, "outputs": [], "source": [ @@ -39,7 +39,7 @@ }, { "cell_type": "markdown", - "id": "774ef577", + "id": "5101bd50", "metadata": {}, "source": [ "The expressions above create *recursive values*. The list `ones` contains an\n", @@ -74,7 +74,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4217a4e5", + "id": "0c934902", "metadata": {}, "outputs": [], "source": [ @@ -84,7 +84,7 @@ }, { "cell_type": "markdown", - "id": "87a307ac", + "id": "e7c730eb", "metadata": {}, "source": [ "```ocaml\n", @@ -107,7 +107,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0f31f7ed", + "id": "ea03ac94", "metadata": { "tags": [ "raises-exception" @@ -120,7 +120,7 @@ }, { "cell_type": "markdown", - "id": "b82bc381", + "id": "d7a9f59c", "metadata": {}, "source": [ "That attempt doesn't work for a more subtle reason. In the definition of a\n", @@ -138,7 +138,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cfd3e909", + "id": "bf941d93", "metadata": {}, "outputs": [], "source": [ @@ -147,7 +147,7 @@ }, { "cell_type": "markdown", - "id": "5069ebb4", + "id": "9f215ae1", "metadata": {}, "source": [ "We could try to convert that into a definition for sequences:" @@ -156,7 +156,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bfb26662", + "id": "24d5f701", "metadata": {}, "outputs": [], "source": [ @@ -165,7 +165,7 @@ }, { "cell_type": "markdown", - "id": "807652e5", + "id": "e16241d5", "metadata": {}, "source": [ "Note that we got rid of the `Nil` constructor, because the empty list is finite,\n", @@ -178,7 +178,7 @@ { "cell_type": "code", "execution_count": null, - "id": "042728c3", + "id": "380a559b", "metadata": {}, "outputs": [], "source": [ @@ -187,7 +187,7 @@ }, { "cell_type": "markdown", - "id": "a98746a4", + "id": "34bdb8eb", "metadata": {}, "source": [ "```ocaml\n", @@ -211,7 +211,7 @@ { "cell_type": "code", "execution_count": null, - "id": "11bacd06", + "id": "0bb75e7f", "metadata": { "tags": [ "raises-exception" @@ -225,7 +225,7 @@ { "cell_type": "code", "execution_count": null, - "id": "eb36b6df", + "id": "d38fdb13", "metadata": {}, "outputs": [], "source": [ @@ -235,7 +235,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c9721886", + "id": "bbb3d61f", "metadata": { "tags": [ "raises-exception" @@ -248,7 +248,7 @@ }, { "cell_type": "markdown", - "id": "897e1b2b", + "id": "fbda3759", "metadata": {}, "source": [ "The definition of `f1` immediately raises an exception, whereas the definition\n", @@ -268,7 +268,7 @@ { "cell_type": "code", "execution_count": null, - "id": "873f3c47", + "id": "7ffae219", "metadata": {}, "outputs": [], "source": [ @@ -280,7 +280,7 @@ }, { "cell_type": "markdown", - "id": "efe4e809", + "id": "f4b63abf", "metadata": {}, "source": [ "This definition turns out to work quite well. We can define `nats`, at last:" @@ -289,7 +289,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6834a317", + "id": "7686d56a", "metadata": {}, "outputs": [], "source": [ @@ -299,7 +299,7 @@ }, { "cell_type": "markdown", - "id": "fcb426ec", + "id": "739d44c9", "metadata": {}, "source": [ "We do not get an infinite loop or a stack overflow. The evaluation of `nats` has\n", @@ -312,7 +312,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2eae0809", + "id": "f2c789c3", "metadata": {}, "outputs": [], "source": [ @@ -323,7 +323,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7004d581", + "id": "8c60cf04", "metadata": {}, "outputs": [], "source": [ @@ -333,7 +333,7 @@ }, { "cell_type": "markdown", - "id": "09ba96b1", + "id": "429e41c6", "metadata": {}, "source": [ "Note how, in the definition of `tl`, we must apply the function `t` to `()` to\n", @@ -347,7 +347,7 @@ { "cell_type": "code", "execution_count": null, - "id": "54f8d0b3", + "id": "5dbfb489", "metadata": {}, "outputs": [], "source": [ @@ -362,7 +362,7 @@ }, { "cell_type": "markdown", - "id": "3d00a090", + "id": "35fbe494", "metadata": {}, "source": [ "For example:" @@ -371,7 +371,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cd085c83", + "id": "0ec6a6f8", "metadata": {}, "outputs": [], "source": [ @@ -380,7 +380,7 @@ }, { "cell_type": "markdown", - "id": "597d36a7", + "id": "07d870ae", "metadata": {}, "source": [ "## Programming with Sequences\n", @@ -396,7 +396,7 @@ { "cell_type": "code", "execution_count": null, - "id": "26d3dff7", + "id": "73b52be3", "metadata": {}, "outputs": [], "source": [ @@ -412,7 +412,7 @@ }, { "cell_type": "markdown", - "id": "1d2c3730", + "id": "eef93fe4", "metadata": {}, "source": [ "Note how the basic template for defining both functions is the same:\n", @@ -437,7 +437,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e4efc7c8", + "id": "0d1a8182", "metadata": {}, "outputs": [], "source": [ @@ -456,7 +456,7 @@ }, { "cell_type": "markdown", - "id": "c996fe26", + "id": "ef257333", "metadata": {}, "source": [ "Now that we have a map function for sequences, we can successfully define `nats`\n", @@ -466,7 +466,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c3740f44", + "id": "167878dc", "metadata": {}, "outputs": [], "source": [ @@ -476,7 +476,7 @@ { "cell_type": "code", "execution_count": null, - "id": "19bd79c4", + "id": "5a7807cd", "metadata": {}, "outputs": [], "source": [ @@ -485,7 +485,7 @@ }, { "cell_type": "markdown", - "id": "f7219c41", + "id": "fba8f3fa", "metadata": {}, "source": [ "Why does this work? Intuitively, `nats` is `<0; 1; 2; 3; ...>`, so mapping the\n", @@ -506,7 +506,7 @@ { "cell_type": "code", "execution_count": null, - "id": "078cf2aa", + "id": "580bdb7c", "metadata": {}, "outputs": [], "source": [ @@ -518,7 +518,7 @@ }, { "cell_type": "markdown", - "id": "33800900", + "id": "41422ad5", "metadata": {}, "source": [ "And it works!" @@ -527,7 +527,7 @@ { "cell_type": "code", "execution_count": null, - "id": "afb23fc2", + "id": "fd85670c", "metadata": {}, "outputs": [], "source": [ @@ -536,7 +536,7 @@ }, { "cell_type": "markdown", - "id": "2976e3dd", + "id": "5d2e1f9e", "metadata": {}, "source": [ "Unfortunately, it's highly inefficient. Every time we force the computation of\n", @@ -610,7 +610,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5ff8a877", + "id": "cc00042e", "metadata": {}, "outputs": [], "source": [ @@ -622,7 +622,7 @@ }, { "cell_type": "markdown", - "id": "cfeb37b5", + "id": "0298f29a", "metadata": {}, "source": [ "```{tip}\n", @@ -636,7 +636,7 @@ { "cell_type": "code", "execution_count": null, - "id": "08d3f5e5", + "id": "93324150", "metadata": {}, "outputs": [], "source": [ @@ -645,7 +645,7 @@ }, { "cell_type": "markdown", - "id": "9f2a2753", + "id": "0e0597b8", "metadata": {}, "source": [ "But if we wrap evaluation of that with `lazy`, it will return immediately,\n", @@ -655,7 +655,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a90ea378", + "id": "40e89623", "metadata": {}, "outputs": [], "source": [ @@ -664,7 +664,7 @@ }, { "cell_type": "markdown", - "id": "c7e569fd", + "id": "7bf5658f", "metadata": {}, "source": [ "Later on we could force the evaluation of that lazy value, and that will take a\n", @@ -674,7 +674,7 @@ { "cell_type": "code", "execution_count": null, - "id": "41221857", + "id": "9f3ca8c1", "metadata": {}, "outputs": [], "source": [ @@ -683,7 +683,7 @@ }, { "cell_type": "markdown", - "id": "99c5f55f", + "id": "fd9c25bd", "metadata": {}, "source": [ "But if we ever try to recompute that same lazy value, it will return\n", @@ -693,7 +693,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c5b972df", + "id": "ac11092f", "metadata": {}, "outputs": [], "source": [ @@ -702,7 +702,7 @@ }, { "cell_type": "markdown", - "id": "6b8735cc", + "id": "169d9171", "metadata": {}, "source": [ "Nonetheless, we still haven't totally succeeded. That particular computation of\n", @@ -713,7 +713,7 @@ { "cell_type": "code", "execution_count": null, - "id": "da72409a", + "id": "71da53ff", "metadata": {}, "outputs": [], "source": [ @@ -722,7 +722,7 @@ }, { "cell_type": "markdown", - "id": "183f867a", + "id": "78d9fdf4", "metadata": {}, "source": [ "What we really want is to change the representation of sequences itself to make\n", @@ -736,7 +736,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ba09d6ef", + "id": "162de880", "metadata": {}, "outputs": [], "source": [ @@ -745,7 +745,7 @@ }, { "cell_type": "markdown", - "id": "1993de5c", + "id": "46128c72", "metadata": {}, "source": [ "We've gotten rid of the thunk, and instead are using a lazy value as the tail of\n", @@ -760,7 +760,7 @@ { "cell_type": "code", "execution_count": null, - "id": "44e6943e", + "id": "6a07898f", "metadata": {}, "outputs": [], "source": [ diff --git a/_sources/chapters/hop/beyond_lists.ipynb b/_sources/chapters/hop/beyond_lists.ipynb index dfedf6d..107b813 100644 --- a/_sources/chapters/hop/beyond_lists.ipynb +++ b/_sources/chapters/hop/beyond_lists.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "174cf3ba", + "id": "9e68c88b", "metadata": {}, "source": [ "# Beyond Lists\n", @@ -17,7 +17,7 @@ { "cell_type": "code", "execution_count": null, - "id": "117595bb", + "id": "18d230c5", "metadata": {}, "outputs": [], "source": [ @@ -28,7 +28,7 @@ }, { "cell_type": "markdown", - "id": "71fd2b56", + "id": "c97c5261", "metadata": {}, "source": [ "## Map on Trees\n", @@ -40,7 +40,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a7636fb1", + "id": "6c1bf24f", "metadata": {}, "outputs": [], "source": [ @@ -51,7 +51,7 @@ }, { "cell_type": "markdown", - "id": "e81a9ad3", + "id": "08e6983f", "metadata": {}, "source": [ "## Fold on Trees\n", @@ -69,7 +69,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ed141e16", + "id": "584f642d", "metadata": {}, "outputs": [], "source": [ @@ -84,7 +84,7 @@ }, { "cell_type": "markdown", - "id": "1eed3d0c", + "id": "5b9529e7", "metadata": {}, "source": [ "The algorithm is the same. All we've done is to change the definition of lists\n", @@ -104,7 +104,7 @@ { "cell_type": "code", "execution_count": null, - "id": "512fadb8", + "id": "2b393371", "metadata": {}, "outputs": [], "source": [ @@ -115,7 +115,7 @@ }, { "cell_type": "markdown", - "id": "f54278e7", + "id": "4ac143f4", "metadata": {}, "source": [ "If you compare that function to `fold_mylist`, you'll note it very nearly\n", @@ -130,7 +130,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3b1e099c", + "id": "5c8dddb0", "metadata": {}, "outputs": [], "source": [ @@ -141,7 +141,7 @@ }, { "cell_type": "markdown", - "id": "c8362f2b", + "id": "c6fb2724", "metadata": {}, "source": [ "Why did we pick `fold_right` and not `fold_left` for this development? Because\n", @@ -187,7 +187,7 @@ { "cell_type": "code", "execution_count": null, - "id": "59512ef5", + "id": "57ff773c", "metadata": {}, "outputs": [], "source": [ diff --git a/_sources/chapters/hop/currying.ipynb b/_sources/chapters/hop/currying.ipynb index 5785d6b..0872b3b 100644 --- a/_sources/chapters/hop/currying.ipynb +++ b/_sources/chapters/hop/currying.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "99273f16", + "id": "2089bee6", "metadata": {}, "source": [ "# Currying\n", @@ -15,7 +15,7 @@ { "cell_type": "code", "execution_count": null, - "id": "de40de9e", + "id": "caa03b26", "metadata": {}, "outputs": [], "source": [ @@ -24,7 +24,7 @@ }, { "cell_type": "markdown", - "id": "bb99dfdf", + "id": "c9102360", "metadata": {}, "source": [ "Another way to define a function that takes two arguments is to write a function\n", @@ -34,7 +34,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5f1f8862", + "id": "437fa420", "metadata": {}, "outputs": [], "source": [ @@ -43,7 +43,7 @@ }, { "cell_type": "markdown", - "id": "6bdf5f3e", + "id": "ad0712d2", "metadata": {}, "source": [ "Instead of using `fst` and `snd`, we could use a tuple pattern in the\n", @@ -53,7 +53,7 @@ { "cell_type": "code", "execution_count": null, - "id": "75c18e6d", + "id": "514199c1", "metadata": {}, "outputs": [], "source": [ @@ -62,7 +62,7 @@ }, { "cell_type": "markdown", - "id": "1308dcb3", + "id": "a1a8670d", "metadata": {}, "source": [ "Functions written using the first style (with type `t1 -> t2 -> t3`) are called\n", @@ -88,7 +88,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8be390a4", + "id": "177b1856", "metadata": {}, "outputs": [], "source": [ @@ -99,7 +99,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6e070ce6", + "id": "933ba06d", "metadata": {}, "outputs": [], "source": [ diff --git a/_sources/chapters/hop/filter.ipynb b/_sources/chapters/hop/filter.ipynb index 1276e29..4994507 100644 --- a/_sources/chapters/hop/filter.ipynb +++ b/_sources/chapters/hop/filter.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "2b4e1b15", + "id": "c3162093", "metadata": {}, "source": [ "# Filter\n", @@ -16,7 +16,7 @@ { "cell_type": "code", "execution_count": null, - "id": "226a99fb", + "id": "c6fb4811", "metadata": {}, "outputs": [], "source": [ @@ -35,7 +35,7 @@ { "cell_type": "code", "execution_count": null, - "id": "448f5095", + "id": "9ccfd1ee", "metadata": {}, "outputs": [], "source": [ @@ -53,7 +53,7 @@ }, { "cell_type": "markdown", - "id": "908f7dc1", + "id": "a20a2885", "metadata": {}, "source": [ "Functions `evens` and `odds` are nearly the same code: the only essential\n", @@ -66,7 +66,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e5582497", + "id": "11dd2a97", "metadata": {}, "outputs": [], "source": [ @@ -77,7 +77,7 @@ }, { "cell_type": "markdown", - "id": "5425c111", + "id": "78fd1c23", "metadata": {}, "source": [ "And now we can reimplement our original two functions:" @@ -86,7 +86,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1e5879ae", + "id": "c7e65657", "metadata": {}, "outputs": [], "source": [ @@ -96,7 +96,7 @@ }, { "cell_type": "markdown", - "id": "5b0bf66e", + "id": "9936976f", "metadata": {}, "source": [ "How simple these are! How clear! (At least to the reader who is familiar with\n", @@ -110,7 +110,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7e0a46e3", + "id": "a61cb3b8", "metadata": {}, "outputs": [], "source": [ @@ -125,7 +125,7 @@ }, { "cell_type": "markdown", - "id": "91b57d8d", + "id": "0c341aa3", "metadata": {}, "source": [ "And again we discover the output is backwards. Here, the standard library makes\n", @@ -136,7 +136,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d38e23ce", + "id": "63bd977f", "metadata": {}, "outputs": [], "source": [ @@ -149,7 +149,7 @@ }, { "cell_type": "markdown", - "id": "dac5b991", + "id": "dc319a71", "metadata": {}, "source": [ "Why does the standard library treat `map` and `filter` differently on this\n", diff --git a/_sources/chapters/hop/fold.ipynb b/_sources/chapters/hop/fold.ipynb index ae7b936..abd45f8 100644 --- a/_sources/chapters/hop/fold.ipynb +++ b/_sources/chapters/hop/fold.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "14c84fa7", + "id": "e82e4f54", "metadata": {}, "source": [ "# Fold\n", @@ -26,7 +26,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8c0240ad", + "id": "ef0c60bb", "metadata": {}, "outputs": [], "source": [ @@ -41,7 +41,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e52752ce", + "id": "bcb4aefd", "metadata": {}, "outputs": [], "source": [ @@ -55,7 +55,7 @@ }, { "cell_type": "markdown", - "id": "54d2d767", + "id": "bbd38e71", "metadata": {}, "source": [ "As when we went through similar exercises with map and filter, the functions\n", @@ -75,7 +75,7 @@ { "cell_type": "code", "execution_count": null, - "id": "90859461", + "id": "f9e08811", "metadata": {}, "outputs": [], "source": [ @@ -94,7 +94,7 @@ }, { "cell_type": "markdown", - "id": "44bdc40a", + "id": "d3c031ad", "metadata": {}, "source": [ "Now the only real difference left between `sum'` and `concat'` is the operator\n", @@ -105,7 +105,7 @@ { "cell_type": "code", "execution_count": null, - "id": "01fed426", + "id": "9b1ef4d7", "metadata": {}, "outputs": [], "source": [ @@ -119,7 +119,7 @@ }, { "cell_type": "markdown", - "id": "45ebac26", + "id": "58b52867", "metadata": {}, "source": [ "One way to think of `combine` would be that:\n", @@ -152,7 +152,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ec9a6c7a", + "id": "a9a47021", "metadata": {}, "outputs": [], "source": [ @@ -163,7 +163,7 @@ }, { "cell_type": "markdown", - "id": "d44a0f5f", + "id": "98813823", "metadata": {}, "source": [ "Second, let's make an admittedly less well-motivated change. We'll swap the\n", @@ -173,7 +173,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d4c073ea", + "id": "2ea4c73c", "metadata": {}, "outputs": [], "source": [ @@ -187,7 +187,7 @@ }, { "cell_type": "markdown", - "id": "0f8ec66b", + "id": "faf5c5e8", "metadata": {}, "source": [ "It's a little less convenient to code the function this way, because we no\n", @@ -202,7 +202,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6de0cd71", + "id": "8ad45d93", "metadata": {}, "outputs": [], "source": [ @@ -213,7 +213,7 @@ }, { "cell_type": "markdown", - "id": "04e79d5c", + "id": "3512a831", "metadata": {}, "source": [ "Why is this function called \"fold right\"? The intuition is that the way it works\n", @@ -240,7 +240,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bf3d6337", + "id": "82bff2ca", "metadata": {}, "outputs": [], "source": [ @@ -251,7 +251,7 @@ }, { "cell_type": "markdown", - "id": "ceb44dfc", + "id": "f989c8f3", "metadata": {}, "source": [ "(Careful readers will notice that the type of `combine_tr` is different than the\n", @@ -266,7 +266,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0701f549", + "id": "a73a6874", "metadata": {}, "outputs": [], "source": [ @@ -285,7 +285,7 @@ }, { "cell_type": "markdown", - "id": "b9ef0704", + "id": "385cdb76", "metadata": {}, "source": [ "Pay close attention to the definition of `acc'`, the new accumulator, in each\n", @@ -310,7 +310,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c3344fa4", + "id": "f99aa011", "metadata": {}, "outputs": [], "source": [ @@ -320,7 +320,7 @@ }, { "cell_type": "markdown", - "id": "5eb8959b", + "id": "cf2a0294", "metadata": {}, "source": [ "But something possibly surprising happens with subtraction:" @@ -329,7 +329,7 @@ { "cell_type": "code", "execution_count": null, - "id": "56c72ee0", + "id": "f50cc4c7", "metadata": {}, "outputs": [], "source": [ @@ -342,7 +342,7 @@ }, { "cell_type": "markdown", - "id": "7be04259", + "id": "10f0ad36", "metadata": {}, "source": [ "The two results are different!\n", @@ -372,7 +372,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1c52f3d9", + "id": "36768372", "metadata": {}, "outputs": [], "source": [ @@ -386,7 +386,7 @@ }, { "cell_type": "markdown", - "id": "ce138498", + "id": "7f5b3f19", "metadata": {}, "source": [ "We have once more succeeded in applying the Abstraction Principle.\n", @@ -414,7 +414,7 @@ { "cell_type": "code", "execution_count": null, - "id": "92eba1fc", + "id": "f785240c", "metadata": {}, "outputs": [], "source": [ @@ -424,7 +424,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4b5b8c4f", + "id": "abd87240", "metadata": {}, "outputs": [], "source": [ @@ -433,7 +433,7 @@ }, { "cell_type": "markdown", - "id": "ad090b1c", + "id": "0beb9991", "metadata": {}, "source": [ "Notice how in the two applications of fold above, we are able to write the\n", @@ -453,7 +453,7 @@ { "cell_type": "code", "execution_count": null, - "id": "04b7b68a", + "id": "c7162910", "metadata": {}, "outputs": [], "source": [ @@ -470,7 +470,7 @@ }, { "cell_type": "markdown", - "id": "742d04af", + "id": "0b4e7827", "metadata": {}, "source": [ "But those functions aren't as useful as they might seem:" @@ -479,7 +479,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bb388ce3", + "id": "64daec7d", "metadata": { "tags": [ "raises-exception" @@ -492,7 +492,7 @@ }, { "cell_type": "markdown", - "id": "8abf784c", + "id": "a8628b4f", "metadata": {}, "source": [ "The problem is that the built-in `+` operator doesn't have labeled arguments,\n", @@ -517,7 +517,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ea764579", + "id": "69c6cc32", "metadata": {}, "outputs": [], "source": [ @@ -536,7 +536,7 @@ }, { "cell_type": "markdown", - "id": "f145be05", + "id": "ab2c1912", "metadata": {}, "source": [ "At this point it begins to become debatable whether it's better to express the\n", @@ -576,7 +576,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7c701ac6", + "id": "cd3d441a", "metadata": {}, "outputs": [], "source": [ @@ -593,7 +593,7 @@ }, { "cell_type": "markdown", - "id": "43ba1cb1", + "id": "b1d23a3b", "metadata": {}, "source": [ "The worst-case running time of all three functions is linear in the length of\n", diff --git a/_sources/chapters/hop/higher_order.ipynb b/_sources/chapters/hop/higher_order.ipynb index d59fcba..cf3c451 100644 --- a/_sources/chapters/hop/higher_order.ipynb +++ b/_sources/chapters/hop/higher_order.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "598244e8", + "id": "e48597cc", "metadata": {}, "source": [ "# Higher-Order Functions\n", @@ -13,7 +13,7 @@ { "cell_type": "code", "execution_count": null, - "id": "095b3324", + "id": "ef50f35e", "metadata": {}, "outputs": [], "source": [ @@ -23,7 +23,7 @@ }, { "cell_type": "markdown", - "id": "658bf4dc", + "id": "efb8c155", "metadata": {}, "source": [ "Let's use these functions to write other functions that quadruple and raise a\n", @@ -33,7 +33,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8c6f62ff", + "id": "572b87f9", "metadata": {}, "outputs": [], "source": [ @@ -43,7 +43,7 @@ }, { "cell_type": "markdown", - "id": "83c68369", + "id": "6011bd22", "metadata": {}, "source": [ "There is an obvious similarity between these two functions: what they do is\n", @@ -54,7 +54,7 @@ { "cell_type": "code", "execution_count": null, - "id": "065abf81", + "id": "cd5cb0ab", "metadata": {}, "outputs": [], "source": [ @@ -63,7 +63,7 @@ }, { "cell_type": "markdown", - "id": "fc949dcb", + "id": "554c4afb", "metadata": {}, "source": [ "The function `twice` is higher-order: its input `f` is a function.\n", @@ -77,7 +77,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b1c4acdf", + "id": "e777aaa4", "metadata": {}, "outputs": [], "source": [ @@ -87,7 +87,7 @@ }, { "cell_type": "markdown", - "id": "2d6f28ee", + "id": "96ef0ab7", "metadata": {}, "source": [ "## The Abstraction Principle\n", @@ -118,7 +118,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9721b44a", + "id": "6b25ba33", "metadata": {}, "outputs": [], "source": [ @@ -127,7 +127,7 @@ }, { "cell_type": "markdown", - "id": "90a3c4fe", + "id": "ec449f87", "metadata": {}, "source": [ "Of course, writing `apply f` is a lot more work than just writing `f`.\n", @@ -139,7 +139,7 @@ { "cell_type": "code", "execution_count": null, - "id": "02d0755d", + "id": "6de19d35", "metadata": {}, "outputs": [], "source": [ @@ -150,7 +150,7 @@ }, { "cell_type": "markdown", - "id": "95d989b7", + "id": "73f8289d", "metadata": {}, "source": [ "**Compose.** We can write a function that composes two other functions:" @@ -159,7 +159,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ab6f95ce", + "id": "ad089794", "metadata": {}, "outputs": [], "source": [ @@ -168,7 +168,7 @@ }, { "cell_type": "markdown", - "id": "55914f80", + "id": "81b22573", "metadata": {}, "source": [ "This function would let us create a new function that can be applied\n", @@ -178,7 +178,7 @@ { "cell_type": "code", "execution_count": null, - "id": "74a621a0", + "id": "fa8013bf", "metadata": {}, "outputs": [], "source": [ @@ -189,7 +189,7 @@ }, { "cell_type": "markdown", - "id": "8fac7316", + "id": "9f13150c", "metadata": {}, "source": [ "**Both.** We can write a function that applies two functions to the same\n", @@ -199,7 +199,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7d91342a", + "id": "674e9ffc", "metadata": {}, "outputs": [], "source": [ @@ -210,7 +210,7 @@ }, { "cell_type": "markdown", - "id": "59d8d910", + "id": "05482378", "metadata": {}, "source": [ "**Cond.** We can write a function that conditionally chooses which of two\n", @@ -220,7 +220,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f3aed3ed", + "id": "c9931680", "metadata": {}, "outputs": [], "source": [ @@ -230,7 +230,7 @@ }, { "cell_type": "markdown", - "id": "2262e8d6", + "id": "849f1ddb", "metadata": {}, "source": [ "## The Meaning of \"Higher Order\"\n", diff --git a/_sources/chapters/hop/map.ipynb b/_sources/chapters/hop/map.ipynb index f52535f..09d4c74 100644 --- a/_sources/chapters/hop/map.ipynb +++ b/_sources/chapters/hop/map.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "bd5f9bc7", + "id": "df9e78fd", "metadata": {}, "source": [ "# Map\n", @@ -15,7 +15,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8e4856da", + "id": "d3861866", "metadata": {}, "outputs": [], "source": [ @@ -30,7 +30,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5b776048", + "id": "ed168db3", "metadata": {}, "outputs": [], "source": [ @@ -44,7 +44,7 @@ }, { "cell_type": "markdown", - "id": "8dc1cd5c", + "id": "70b6415e", "metadata": {}, "source": [ "There's a lot of similarity between those two functions:\n", @@ -61,7 +61,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2d8ec89a", + "id": "bdad9ee3", "metadata": {}, "outputs": [], "source": [ @@ -82,7 +82,7 @@ }, { "cell_type": "markdown", - "id": "c4fcb13b", + "id": "2fd6d1b5", "metadata": {}, "source": [ "Now the only difference between the two functions (again, other than their\n", @@ -94,7 +94,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b722fb60", + "id": "c6622b76", "metadata": {}, "outputs": [], "source": [ @@ -115,7 +115,7 @@ }, { "cell_type": "markdown", - "id": "24eb24e3", + "id": "da381026", "metadata": {}, "source": [ "But now there really is no difference at all between `add1'` and `concat_bang'`\n", @@ -129,7 +129,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e15f51af", + "id": "b5eb5bec", "metadata": {}, "outputs": [], "source": [ @@ -146,7 +146,7 @@ }, { "cell_type": "markdown", - "id": "279bc109", + "id": "a121f720", "metadata": {}, "source": [ "````{note}\n", @@ -174,7 +174,7 @@ { "cell_type": "code", "execution_count": null, - "id": "46920a70", + "id": "66ce1486", "metadata": {}, "outputs": [], "source": [ @@ -191,7 +191,7 @@ }, { "cell_type": "markdown", - "id": "bb538c0d", + "id": "0c48a401", "metadata": {}, "source": [ "We have now successfully applied the Abstraction Principle: the common structure\n", @@ -218,7 +218,7 @@ { "cell_type": "code", "execution_count": null, - "id": "54d86050", + "id": "f1d28a0f", "metadata": {}, "outputs": [], "source": [ @@ -229,7 +229,7 @@ }, { "cell_type": "markdown", - "id": "880d71e2", + "id": "0d1ca4f8", "metadata": {}, "source": [ "Here's why:\n", @@ -251,7 +251,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0fcef1ba", + "id": "3819a2fd", "metadata": {}, "outputs": [], "source": [ @@ -264,7 +264,7 @@ }, { "cell_type": "markdown", - "id": "8e4b0542", + "id": "965b63e3", "metadata": {}, "source": [ "Here's why that works:\n", @@ -295,7 +295,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b8970421", + "id": "ffb6843c", "metadata": {}, "outputs": [], "source": [ @@ -310,7 +310,7 @@ }, { "cell_type": "markdown", - "id": "f1d79464", + "id": "cf952bb9", "metadata": {}, "source": [ "To some extent that works: the output is correct, and `map_tr_aux` is tail\n", @@ -329,7 +329,7 @@ { "cell_type": "code", "execution_count": null, - "id": "aaa5a1eb", + "id": "87d01067", "metadata": {}, "outputs": [], "source": [ @@ -344,7 +344,7 @@ }, { "cell_type": "markdown", - "id": "39eec933", + "id": "1180da1c", "metadata": {}, "source": [ "And to some extent that works: it's tail recursive and linear time. The\n", @@ -382,7 +382,7 @@ { "cell_type": "code", "execution_count": null, - "id": "44e52330", + "id": "95b341d9", "metadata": {}, "outputs": [], "source": [ @@ -397,7 +397,7 @@ }, { "cell_type": "markdown", - "id": "2b9ff6d5", + "id": "60065629", "metadata": {}, "source": [ "If you want the output in the \"right\" order, that's easy: just apply `List.rev`\n", @@ -407,7 +407,7 @@ { "cell_type": "code", "execution_count": null, - "id": "862900a2", + "id": "74fcfb36", "metadata": {}, "outputs": [], "source": [ @@ -416,7 +416,7 @@ }, { "cell_type": "markdown", - "id": "ffcb407d", + "id": "888152fd", "metadata": {}, "source": [ "Since `List.rev` is both linear time and tail recursive, that yields a complete\n", diff --git a/_sources/chapters/hop/pipelining.ipynb b/_sources/chapters/hop/pipelining.ipynb index 7331120..0f16e16 100644 --- a/_sources/chapters/hop/pipelining.ipynb +++ b/_sources/chapters/hop/pipelining.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "1f100e21", + "id": "ecc08708", "metadata": {}, "source": [ "# Pipelining\n", @@ -33,7 +33,7 @@ { "cell_type": "code", "execution_count": null, - "id": "aa94e51f", + "id": "f1649d19", "metadata": {}, "outputs": [], "source": [ @@ -46,7 +46,7 @@ }, { "cell_type": "markdown", - "id": "9ff6adbc", + "id": "d8f468a6", "metadata": {}, "source": [ "Another, clearer way of producing the same result in OCaml uses higher-order\n", @@ -56,7 +56,7 @@ { "cell_type": "code", "execution_count": null, - "id": "44a6a9b7", + "id": "cafc3c27", "metadata": {}, "outputs": [], "source": [ @@ -72,7 +72,7 @@ }, { "cell_type": "markdown", - "id": "4d25e9ea", + "id": "66ece829", "metadata": {}, "source": [ "The function `sum_sq` first constructs a list containing all the numbers `0..n`.\n", @@ -86,7 +86,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ca030763", + "id": "19d26e1b", "metadata": {}, "outputs": [], "source": [ @@ -105,7 +105,7 @@ }, { "cell_type": "markdown", - "id": "e713c61a", + "id": "16e799de", "metadata": {}, "source": [ "The downside of all of these compared to the original tail recursive version is\n", diff --git a/_sources/chapters/modules/encapsulation.ipynb b/_sources/chapters/modules/encapsulation.ipynb index 3b18c8c..058fd44 100644 --- a/_sources/chapters/modules/encapsulation.ipynb +++ b/_sources/chapters/modules/encapsulation.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "5dfff2a5", + "id": "9c13dab6", "metadata": {}, "source": [ "# Encapsulation\n", @@ -23,7 +23,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b9a80a32", + "id": "ee492b86", "metadata": {}, "outputs": [], "source": [ @@ -39,7 +39,7 @@ }, { "cell_type": "markdown", - "id": "b6738b9e", + "id": "b5b1bc3f", "metadata": {}, "source": [ "You'd like to make `fact` usable by clients of `Math`, but you'd also like to\n", @@ -51,7 +51,7 @@ { "cell_type": "code", "execution_count": null, - "id": "071d930e", + "id": "92d457b8", "metadata": {}, "outputs": [], "source": [ @@ -68,7 +68,7 @@ }, { "cell_type": "markdown", - "id": "49a79a52", + "id": "f59c5960", "metadata": {}, "source": [ "Look at the signature, and notice how `fact_aux` is gone. But, that nesting\n", @@ -85,7 +85,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e3b21db4", + "id": "282f2f50", "metadata": {}, "outputs": [], "source": [ @@ -105,7 +105,7 @@ }, { "cell_type": "markdown", - "id": "b7984d94", + "id": "04bd40ed", "metadata": {}, "source": [ "Now since `MATH` does not mention `fact_aux`, the module type annotation\n", @@ -115,7 +115,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f5549e42", + "id": "18a65a6d", "metadata": { "tags": [ "raises-exception" @@ -128,7 +128,7 @@ }, { "cell_type": "markdown", - "id": "9fbe0a15", + "id": "df740ea5", "metadata": {}, "source": [ "In that sense, module type annotations are *opaque*: they can prevent visibility\n", @@ -147,7 +147,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9d0792d8", + "id": "aeee5239", "metadata": {}, "outputs": [], "source": [ @@ -169,7 +169,7 @@ }, { "cell_type": "markdown", - "id": "1a017174", + "id": "30c1ec13", "metadata": {}, "source": [ "Now `Math.fact_aux` is visible, but `MathCheck.fact_aux` is not:" @@ -178,7 +178,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6d0a66d4", + "id": "1f24b29c", "metadata": {}, "outputs": [], "source": [ @@ -188,7 +188,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b528c2e8", + "id": "cd2f397f", "metadata": { "tags": [ "raises-exception" @@ -201,7 +201,7 @@ }, { "cell_type": "markdown", - "id": "466a299d", + "id": "a073e9c4", "metadata": {}, "source": [ "You wouldn't even have to give the \"check\" module a name since you probably\n", @@ -211,7 +211,7 @@ { "cell_type": "code", "execution_count": null, - "id": "85543050", + "id": "a191f684", "metadata": {}, "outputs": [], "source": [ @@ -220,7 +220,7 @@ }, { "cell_type": "markdown", - "id": "9d7020ea", + "id": "fcaa6d56", "metadata": {}, "source": [ "**A Comparison to Visibility Modifiers.** The use of sealing in OCaml is thus\n", @@ -242,7 +242,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1713e9c5", + "id": "1068cba3", "metadata": {}, "outputs": [], "source": [ @@ -260,7 +260,7 @@ }, { "cell_type": "markdown", - "id": "a7454353", + "id": "b9f6c851", "metadata": {}, "source": [ "With those definitions, any code that uses `C` will have access only to the\n", @@ -283,7 +283,7 @@ { "cell_type": "code", "execution_count": null, - "id": "db0fe147", + "id": "657221ca", "metadata": { "tags": [ "hide-output" @@ -326,7 +326,7 @@ }, { "cell_type": "markdown", - "id": "1c3084a6", + "id": "4a5cf0dc", "metadata": {}, "source": [ "What if we wanted to modify that data structure to add an operation for\n", @@ -356,7 +356,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fa73ebc5", + "id": "1a5eb2f6", "metadata": { "tags": [ "hide-output" @@ -378,7 +378,7 @@ }, { "cell_type": "markdown", - "id": "c25255b2", + "id": "58659413", "metadata": {}, "source": [ "We have a big problem. `ListStackCachedSize` does not implement the\n", @@ -389,7 +389,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f6f36d6a", + "id": "5386e70e", "metadata": { "tags": [ "raises-exception" @@ -402,7 +402,7 @@ }, { "cell_type": "markdown", - "id": "23990425", + "id": "2f1c22f5", "metadata": {}, "source": [ "Moreover, any code we previously wrote using `ListStack` now has to be modified\n", @@ -440,7 +440,7 @@ { "cell_type": "code", "execution_count": null, - "id": "28c72cb1", + "id": "d3f7bfc0", "metadata": {}, "outputs": [], "source": [ @@ -449,7 +449,7 @@ }, { "cell_type": "markdown", - "id": "cd0aee58", + "id": "b01e56b1", "metadata": {}, "source": [ "A module type annotation could hide one of the values defined in\n", @@ -466,7 +466,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f1c8e891", + "id": "ae3dc3a2", "metadata": { "tags": [ "hide-output" @@ -488,7 +488,7 @@ }, { "cell_type": "markdown", - "id": "05bce9df", + "id": "808eaa7c", "metadata": {}, "source": [ "Note how `'a stack` is not actually defined in that signature. We haven't said\n", @@ -504,7 +504,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b49f3dd3", + "id": "56fca43d", "metadata": {}, "outputs": [], "source": [ @@ -524,7 +524,7 @@ }, { "cell_type": "markdown", - "id": "48203e72", + "id": "dfdcfd6e", "metadata": {}, "source": [ "Take a careful look at the output: nowhere does `'a list` show up in it. In\n", @@ -540,7 +540,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3ecf0739", + "id": "a3996466", "metadata": {}, "outputs": [], "source": [ @@ -558,7 +558,7 @@ }, { "cell_type": "markdown", - "id": "4311c694", + "id": "ed3b5f33", "metadata": {}, "source": [ "Note that omitting that added line would result in an error, just as if\n", @@ -569,7 +569,7 @@ { "cell_type": "code", "execution_count": null, - "id": "41161e9f", + "id": "9726c61f", "metadata": { "tags": [ "raises-exception" @@ -591,7 +591,7 @@ }, { "cell_type": "markdown", - "id": "0ac94363", + "id": "a85f5fb0", "metadata": {}, "source": [ "Here is a third, custom implementation of `LIST_STACK`. This one is deliberately\n", @@ -602,7 +602,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ec624c9a", + "id": "72cb4f86", "metadata": {}, "outputs": [], "source": [ @@ -621,7 +621,7 @@ }, { "cell_type": "markdown", - "id": "361c58a4", + "id": "9af8c8c7", "metadata": {}, "source": [ "Is that really a \"list\" stack? It satisfies the module type `LIST_STACK`. But\n", @@ -636,7 +636,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4078705b", + "id": "05ed5172", "metadata": { "tags": [ "hide-output" @@ -669,7 +669,7 @@ }, { "cell_type": "markdown", - "id": "124334f1", + "id": "ac50830a", "metadata": {}, "source": [ "There's one further naming improvement we could make. Notice the type of\n", @@ -680,7 +680,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ef303c4f", + "id": "80fb7592", "metadata": {}, "outputs": [], "source": [ @@ -689,7 +689,7 @@ }, { "cell_type": "markdown", - "id": "fb8637db", + "id": "fd688d5c", "metadata": {}, "source": [ "That type, `'a ListStack.stack`, is rather unwieldy, because it conveys the word\n", @@ -702,7 +702,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9add8c21", + "id": "c493b168", "metadata": { "tags": [ "hide-output" @@ -747,7 +747,7 @@ }, { "cell_type": "markdown", - "id": "04721dfc", + "id": "44867c34", "metadata": {}, "source": [ "Now the type of stacks is simpler:" @@ -756,7 +756,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3ec92f9b", + "id": "29c86f46", "metadata": {}, "outputs": [], "source": [ @@ -766,7 +766,7 @@ }, { "cell_type": "markdown", - "id": "637a50f2", + "id": "e8fcd2b0", "metadata": {}, "source": [ "That idiom is fairly common when there's a single representation type exposed by\n", @@ -784,7 +784,7 @@ { "cell_type": "code", "execution_count": null, - "id": "060d1245", + "id": "9da8e6c1", "metadata": {}, "outputs": [], "source": [ @@ -803,7 +803,7 @@ }, { "cell_type": "markdown", - "id": "61eda83f", + "id": "fa10a860", "metadata": {}, "source": [ "Note how we're able to use `M.x` at its type of `int`. That works because\n", @@ -814,7 +814,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a761c6bc", + "id": "188b235e", "metadata": { "tags": [ "raises-exception" @@ -837,7 +837,7 @@ }, { "cell_type": "markdown", - "id": "f02f9888", + "id": "a984f27d", "metadata": {}, "source": [ "We're not allowed to use `M.x` at type `int` outside of `M`, because its type\n", @@ -853,7 +853,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4be05d60", + "id": "480c4618", "metadata": {}, "outputs": [], "source": [ @@ -863,7 +863,7 @@ }, { "cell_type": "markdown", - "id": "d76c5caf", + "id": "59272b3a", "metadata": {}, "source": [ "Recall that the toplevel uses this angle-bracket convention to indicate an\n", @@ -873,7 +873,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b5d3b564", + "id": "359310d6", "metadata": {}, "outputs": [], "source": [ @@ -882,7 +882,7 @@ }, { "cell_type": "markdown", - "id": "a9acbf33", + "id": "5a620d7b", "metadata": {}, "source": [ "On the one hand, it's reasonable for the toplevel to behave this way. Once a\n", @@ -919,7 +919,7 @@ { "cell_type": "code", "execution_count": null, - "id": "56913227", + "id": "e7d63f75", "metadata": {}, "outputs": [], "source": [ @@ -928,7 +928,7 @@ }, { "cell_type": "markdown", - "id": "afa8d412", + "id": "6c3c2d68", "metadata": {}, "source": [ "Each inner list contains `n` copies of the number `n`. Note how the indentation\n", @@ -950,7 +950,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2312a160", + "id": "1cd3626d", "metadata": {}, "outputs": [], "source": [ @@ -960,7 +960,7 @@ }, { "cell_type": "markdown", - "id": "1fe96f7b", + "id": "a581827c", "metadata": {}, "source": [ "Now you can see that the toplevel adds \" kupo\" to each string while printing it,\n", @@ -970,7 +970,7 @@ { "cell_type": "code", "execution_count": null, - "id": "97cc4b19", + "id": "64b78d29", "metadata": {}, "outputs": [], "source": [ @@ -980,7 +980,7 @@ }, { "cell_type": "markdown", - "id": "94df9b1c", + "id": "60748917", "metadata": {}, "source": [ "To keep ourselves from getting confused about strings in the rest of this\n", @@ -990,7 +990,7 @@ { "cell_type": "code", "execution_count": null, - "id": "477adbb7", + "id": "f0b638cc", "metadata": {}, "outputs": [], "source": [ @@ -999,7 +999,7 @@ }, { "cell_type": "markdown", - "id": "74c58bee", + "id": "d29e5cb8", "metadata": {}, "source": [ "As a bigger example, let's add pretty printing to `ListStack`:" @@ -1008,7 +1008,7 @@ { "cell_type": "code", "execution_count": null, - "id": "68dff473", + "id": "72726955", "metadata": { "tags": [ "hide-output" @@ -1032,7 +1032,7 @@ }, { "cell_type": "markdown", - "id": "8d02e603", + "id": "77de7243", "metadata": {}, "source": [ "First, notice that we have to expose `pp` as part of the module type.\n", @@ -1046,7 +1046,7 @@ { "cell_type": "code", "execution_count": null, - "id": "87f42980", + "id": "0dc3fa43", "metadata": { "tags": [ "hide-output" @@ -1075,7 +1075,7 @@ }, { "cell_type": "markdown", - "id": "6c90223a", + "id": "760908ba", "metadata": {}, "source": [ "In `ListStack.pp`, we use some of the advanced features of the `Format` module.\n", @@ -1087,7 +1087,7 @@ { "cell_type": "code", "execution_count": null, - "id": "570870cc", + "id": "826fff22", "metadata": {}, "outputs": [], "source": [ @@ -1097,7 +1097,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6bbf8bb4", + "id": "6b3ebb7c", "metadata": {}, "outputs": [], "source": [ @@ -1107,7 +1107,7 @@ { "cell_type": "code", "execution_count": null, - "id": "10108ccd", + "id": "930af530", "metadata": {}, "outputs": [], "source": [ @@ -1116,7 +1116,7 @@ }, { "cell_type": "markdown", - "id": "9f071d89", + "id": "421c4088", "metadata": {}, "source": [ "For more information, see the [toplevel manual][toplevel] (search for\n", diff --git a/_sources/chapters/modules/functional_data_structures.ipynb b/_sources/chapters/modules/functional_data_structures.ipynb index 1a32b82..dc765b3 100644 --- a/_sources/chapters/modules/functional_data_structures.ipynb +++ b/_sources/chapters/modules/functional_data_structures.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "6295f363", + "id": "9d6a8128", "metadata": {}, "source": [ "# Functional Data Structures\n", @@ -37,7 +37,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4e728d01", + "id": "d5ae64bd", "metadata": {}, "outputs": [], "source": [ @@ -48,7 +48,7 @@ }, { "cell_type": "markdown", - "id": "2fc0a71f", + "id": "c7190d4a", "metadata": {}, "source": [ "Taking the tail of `lst` does not change the list. Both `lst` and `lst'`\n", @@ -66,7 +66,7 @@ { "cell_type": "code", "execution_count": null, - "id": "14ca6bee", + "id": "c6a32616", "metadata": { "tags": [ "hide-output" @@ -101,7 +101,7 @@ }, { "cell_type": "markdown", - "id": "245fc4f2", + "id": "ae2c2abc", "metadata": {}, "source": [ "That implementation is functional, as can be seen above, and also persistent:" @@ -110,7 +110,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7ed8d917", + "id": "f05642c7", "metadata": {}, "outputs": [], "source": [ @@ -123,7 +123,7 @@ }, { "cell_type": "markdown", - "id": "82c5791b", + "id": "9961d61b", "metadata": {}, "source": [ "The value `s` is unchanged by the `pop` operation that creates `s'`. Both\n", @@ -155,7 +155,7 @@ { "cell_type": "code", "execution_count": null, - "id": "959344ca", + "id": "0630e419", "metadata": { "tags": [ "hide-output" @@ -189,7 +189,7 @@ }, { "cell_type": "markdown", - "id": "817bc479", + "id": "e214c48a", "metadata": {}, "source": [ "But that makes it harder to pipeline:" @@ -198,7 +198,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0ea155b6", + "id": "3e5365a6", "metadata": { "tags": [ "raises-exception" @@ -211,7 +211,7 @@ }, { "cell_type": "markdown", - "id": "c38adade", + "id": "4a89d205", "metadata": {}, "source": [ "The types break down for the pipeline right after the `pop`, because that\n", @@ -226,7 +226,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f0c02326", + "id": "2ca3245b", "metadata": {}, "outputs": [], "source": [ @@ -245,7 +245,7 @@ }, { "cell_type": "markdown", - "id": "be442bbc", + "id": "5fdc20d6", "metadata": {}, "source": [ "We can use those as needed for pipelining:" @@ -254,7 +254,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cbcba507", + "id": "1fc48a29", "metadata": {}, "outputs": [], "source": [ @@ -263,7 +263,7 @@ }, { "cell_type": "markdown", - "id": "c9d9cfff", + "id": "f10163ce", "metadata": {}, "source": [ "But it's not so pleasant to figure out which of the three operators to use\n", @@ -290,7 +290,7 @@ { "cell_type": "code", "execution_count": null, - "id": "91003045", + "id": "774d656f", "metadata": { "tags": [ "hide-output" @@ -329,7 +329,7 @@ }, { "cell_type": "markdown", - "id": "d633afb1", + "id": "00a44d1a", "metadata": {}, "source": [ "One nice thing about this implementation is that it is efficient. All the\n", @@ -349,7 +349,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b80413b0", + "id": "4ff3eaaa", "metadata": { "tags": [ "hide-output" @@ -392,7 +392,7 @@ }, { "cell_type": "markdown", - "id": "5e1e55e2", + "id": "786b893c", "metadata": {}, "source": [ "```{important}\n", @@ -408,7 +408,7 @@ { "cell_type": "code", "execution_count": null, - "id": "88ad0f26", + "id": "f2a8b57d", "metadata": {}, "outputs": [], "source": [ @@ -429,7 +429,7 @@ }, { "cell_type": "markdown", - "id": "c89e8c1b", + "id": "639a78e9", "metadata": {}, "source": [ "But despite being as easy, this implementation is not as efficient as our\n", @@ -508,7 +508,7 @@ { "cell_type": "code", "execution_count": null, - "id": "078a8bf8", + "id": "87f7606a", "metadata": {}, "outputs": [], "source": [ @@ -550,7 +550,7 @@ }, { "cell_type": "markdown", - "id": "73685432", + "id": "1e7e4896", "metadata": {}, "source": [ "The efficiency of batched queues comes at a price in readability. If we compare\n", @@ -569,7 +569,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bbafd340", + "id": "b051a02c", "metadata": {}, "outputs": [], "source": [ @@ -598,7 +598,7 @@ }, { "cell_type": "markdown", - "id": "187b0146", + "id": "71284661", "metadata": {}, "source": [ "Note how `Map.t` is parameterized on two types, `'k` and `'v`, which are written\n", @@ -620,7 +620,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0a562144", + "id": "2a9ab7a8", "metadata": {}, "outputs": [], "source": [ @@ -639,7 +639,7 @@ }, { "cell_type": "markdown", - "id": "826d91cc", + "id": "f3c594ff", "metadata": {}, "source": [ "This implementation of maps is persistent. For example, adding a new\n", @@ -649,7 +649,7 @@ { "cell_type": "code", "execution_count": null, - "id": "badb9005", + "id": "e5ccf200", "metadata": {}, "outputs": [], "source": [ @@ -662,7 +662,7 @@ }, { "cell_type": "markdown", - "id": "1a462582", + "id": "c483c05b", "metadata": {}, "source": [ "The `insert` operation is constant time, which is great. But the `lookup`\n", @@ -702,7 +702,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3d807702", + "id": "14cbb72f", "metadata": {}, "outputs": [], "source": [ @@ -719,7 +719,7 @@ }, { "cell_type": "markdown", - "id": "5df8433a", + "id": "8541759e", "metadata": {}, "source": [ "That implementation removes any duplicate binding of `k` before inserting\n", @@ -734,7 +734,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ed808073", + "id": "1c4b0160", "metadata": {}, "outputs": [], "source": [ @@ -760,7 +760,7 @@ }, { "cell_type": "markdown", - "id": "f3c58a38", + "id": "afda93e2", "metadata": {}, "source": [ "Here's an implementation of that interface using a list to represent the set.\n", @@ -771,7 +771,7 @@ { "cell_type": "code", "execution_count": null, - "id": "74540e0b", + "id": "bea36532", "metadata": {}, "outputs": [], "source": [ @@ -786,7 +786,7 @@ }, { "cell_type": "markdown", - "id": "1993737f", + "id": "b5d30808", "metadata": {}, "source": [ "Note how `add` ensures that the representation never contains any duplicates, so\n", @@ -799,7 +799,7 @@ { "cell_type": "code", "execution_count": null, - "id": "730edd6b", + "id": "168e0b4d", "metadata": {}, "outputs": [], "source": [ @@ -814,7 +814,7 @@ }, { "cell_type": "markdown", - "id": "4a0ad472", + "id": "41bed676", "metadata": {}, "source": [ "In that implementation, the `add` operation is now constant time, and the\n", diff --git a/_sources/chapters/modules/functors.ipynb b/_sources/chapters/modules/functors.ipynb index d249e2b..a621bfb 100644 --- a/_sources/chapters/modules/functors.ipynb +++ b/_sources/chapters/modules/functors.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "2ceed159", + "id": "2c57dc30", "metadata": {}, "source": [ "# Functors\n", @@ -37,7 +37,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f2504629", + "id": "fce73898", "metadata": {}, "outputs": [], "source": [ @@ -52,7 +52,7 @@ }, { "cell_type": "markdown", - "id": "c46f504c", + "id": "576403d4", "metadata": {}, "source": [ "The functor's name is `IncX`. It's essentially a function from modules to\n", @@ -72,7 +72,7 @@ { "cell_type": "code", "execution_count": null, - "id": "53dc3ce4", + "id": "d857375e", "metadata": {}, "outputs": [], "source": [ @@ -82,7 +82,7 @@ { "cell_type": "code", "execution_count": null, - "id": "50a7db99", + "id": "57e83125", "metadata": {}, "outputs": [], "source": [ @@ -92,7 +92,7 @@ { "cell_type": "code", "execution_count": null, - "id": "35d25179", + "id": "5c957ee1", "metadata": {}, "outputs": [], "source": [ @@ -102,7 +102,7 @@ { "cell_type": "code", "execution_count": null, - "id": "08856dbb", + "id": "c7d6a489", "metadata": {}, "outputs": [], "source": [ @@ -112,7 +112,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c0d361eb", + "id": "81edb9f3", "metadata": {}, "outputs": [], "source": [ @@ -122,7 +122,7 @@ { "cell_type": "code", "execution_count": null, - "id": "35299471", + "id": "b2ca4808", "metadata": {}, "outputs": [], "source": [ @@ -131,7 +131,7 @@ }, { "cell_type": "markdown", - "id": "80c572aa", + "id": "e6d87eaf", "metadata": {}, "source": [ "Each time, we pass `IncX` a module. When we pass it the module bound to the name\n", @@ -148,7 +148,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a08cbcef", + "id": "3ad509fc", "metadata": {}, "outputs": [], "source": [ @@ -159,7 +159,7 @@ }, { "cell_type": "markdown", - "id": "669c451d", + "id": "1a6465b1", "metadata": {}, "source": [ "Let's apply that functor to a module. The module doesn't even have to\n", @@ -169,7 +169,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ec434ade", + "id": "7789791e", "metadata": {}, "outputs": [], "source": [ @@ -179,7 +179,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d513df31", + "id": "682ef933", "metadata": {}, "outputs": [], "source": [ @@ -188,7 +188,7 @@ }, { "cell_type": "markdown", - "id": "743a7b88", + "id": "dc9eab94", "metadata": {}, "source": [ "Note that the input module to `AddX` contains a value named `x`, but the output\n", @@ -198,7 +198,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a3716dd9", + "id": "f858f51f", "metadata": { "tags": [ "raises-exception" @@ -211,7 +211,7 @@ }, { "cell_type": "markdown", - "id": "26b442b7", + "id": "e4da99b1", "metadata": {}, "source": [ "```{warning}\n", @@ -297,7 +297,7 @@ { "cell_type": "code", "execution_count": null, - "id": "068cae23", + "id": "aa039b76", "metadata": {}, "outputs": [], "source": [ @@ -307,7 +307,7 @@ }, { "cell_type": "markdown", - "id": "66b57b78", + "id": "1f82a102", "metadata": {}, "source": [ "Functor type syntax becomes more complicated if the output module type is\n", @@ -318,7 +318,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8ff6b9df", + "id": "8d3211cd", "metadata": {}, "outputs": [], "source": [ @@ -334,7 +334,7 @@ }, { "cell_type": "markdown", - "id": "1e7fc92a", + "id": "9a2c0546", "metadata": {}, "source": [ "The type of `Pair1` turns out to be:\n", @@ -349,7 +349,7 @@ { "cell_type": "code", "execution_count": null, - "id": "10531ec6", + "id": "03ac3555", "metadata": {}, "outputs": [], "source": [ @@ -362,7 +362,7 @@ }, { "cell_type": "markdown", - "id": "d4333bbc", + "id": "d1c9ccb9", "metadata": {}, "source": [ "Module type `P1` is the type of a functor that takes an input module named `M`\n", @@ -377,7 +377,7 @@ { "cell_type": "code", "execution_count": null, - "id": "23a9cd24", + "id": "d65bfbe4", "metadata": {}, "outputs": [], "source": [ @@ -387,7 +387,7 @@ }, { "cell_type": "markdown", - "id": "7b19c00f", + "id": "45eafdc8", "metadata": {}, "source": [ "Note the difference between `int` and `char` in the resulting module types. It's\n", @@ -416,7 +416,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8d7eb106", + "id": "8ee34676", "metadata": {}, "outputs": [], "source": [ @@ -429,7 +429,7 @@ }, { "cell_type": "markdown", - "id": "e362475b", + "id": "f712758e", "metadata": {}, "source": [ "## The `Map` Module\n", @@ -454,7 +454,7 @@ { "cell_type": "code", "execution_count": null, - "id": "09fde6b7", + "id": "45702948", "metadata": {}, "outputs": [], "source": [ @@ -466,7 +466,7 @@ }, { "cell_type": "markdown", - "id": "e90f8b38", + "id": "4c809ade", "metadata": {}, "source": [ "The Map module needs ordering, because balanced binary trees need to be able to\n", @@ -520,7 +520,7 @@ { "cell_type": "code", "execution_count": null, - "id": "255c71ff", + "id": "2f8419ba", "metadata": { "tags": [ "hide-output" @@ -533,7 +533,7 @@ }, { "cell_type": "markdown", - "id": "58aa76fd", + "id": "9b4e0962", "metadata": {}, "source": [ "If you show that output, you'll see the long module type of `IntMap`. The `Int`\n", @@ -549,7 +549,7 @@ { "cell_type": "code", "execution_count": null, - "id": "99e3c706", + "id": "d2c4feaf", "metadata": {}, "outputs": [], "source": [ @@ -560,7 +560,7 @@ { "cell_type": "code", "execution_count": null, - "id": "35651a18", + "id": "7907dfa8", "metadata": {}, "outputs": [], "source": [ @@ -570,7 +570,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f51d6572", + "id": "49ba1af1", "metadata": {}, "outputs": [], "source": [ @@ -580,7 +580,7 @@ { "cell_type": "code", "execution_count": null, - "id": "58856e4a", + "id": "9da52812", "metadata": { "tags": [ "raises-exception" @@ -594,7 +594,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8ea75d8a", + "id": "741afd1a", "metadata": {}, "outputs": [], "source": [ @@ -603,7 +603,7 @@ }, { "cell_type": "markdown", - "id": "7ffd2d94", + "id": "2005a605", "metadata": {}, "source": [ "The same `IntMap` module allows us to map an `int` to a `float`:" @@ -612,7 +612,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a51c2795", + "id": "14a7ed50", "metadata": {}, "outputs": [], "source": [ @@ -622,7 +622,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d50cec67", + "id": "4729c736", "metadata": {}, "outputs": [], "source": [ @@ -631,7 +631,7 @@ }, { "cell_type": "markdown", - "id": "a1bbc65a", + "id": "56cc8183", "metadata": {}, "source": [ "But the keys must be `int`, not any other type:" @@ -640,7 +640,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ddb89778", + "id": "5f84851e", "metadata": { "tags": [ "raises-exception" @@ -653,7 +653,7 @@ }, { "cell_type": "markdown", - "id": "98dd5559", + "id": "9b900a36", "metadata": {}, "source": [ "That's because the `IntMap` module was specifically created for keys that are\n", @@ -723,7 +723,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ca4f3893", + "id": "d2dda274", "metadata": {}, "outputs": [], "source": [ @@ -741,7 +741,7 @@ }, { "cell_type": "markdown", - "id": "d07abd00", + "id": "70090e7e", "metadata": {}, "source": [ "The `Name` module can be used as input to `Map.Make` because it satisfies the\n", @@ -751,7 +751,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9994ff8b", + "id": "9855de27", "metadata": { "tags": [ "hide-output" @@ -764,7 +764,7 @@ }, { "cell_type": "markdown", - "id": "4f0364cb", + "id": "a80b0c40", "metadata": {}, "source": [ "Now we could use that map to associate names with birth years:" @@ -773,7 +773,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7c9d7b66", + "id": "8c8af982", "metadata": {}, "outputs": [], "source": [ @@ -789,7 +789,7 @@ }, { "cell_type": "markdown", - "id": "c7559dbd", + "id": "bd28aff5", "metadata": {}, "source": [ "Note how the order of keys in that list is not the same as the order in which we\n", @@ -839,7 +839,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0063dac2", + "id": "68cab0cf", "metadata": {}, "outputs": [], "source": [ @@ -848,7 +848,7 @@ }, { "cell_type": "markdown", - "id": "65426c61", + "id": "c61537aa", "metadata": {}, "source": [ "Now it's impossible to add a binding to the map:" @@ -857,7 +857,7 @@ { "cell_type": "code", "execution_count": null, - "id": "baf987b9", + "id": "6577ca3a", "metadata": { "tags": [ "raises-exception" @@ -870,7 +870,7 @@ }, { "cell_type": "markdown", - "id": "971163cb", + "id": "f9bee46f", "metadata": {}, "source": [ "This kind of use case is why module type constraints are quite important in\n", @@ -892,7 +892,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f6398685", + "id": "067b6e39", "metadata": { "tags": [ "hide-output" @@ -929,7 +929,7 @@ }, { "cell_type": "markdown", - "id": "803facd2", + "id": "371e1149", "metadata": {}, "source": [ "Suppose we wanted to write an OUnit test for `ListStack`:" @@ -938,7 +938,7 @@ { "cell_type": "code", "execution_count": null, - "id": "621b70d5", + "id": "6dff33ed", "metadata": { "tags": [ "remove-cell" @@ -954,7 +954,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4cfc1961", + "id": "70c34fee", "metadata": { "tags": [ "remove-output" @@ -968,7 +968,7 @@ }, { "cell_type": "markdown", - "id": "cdfdec21", + "id": "a6b1f794", "metadata": {}, "source": [ "Unfortunately, to test a `VariantStack`, we'd have to duplicate that code:" @@ -977,7 +977,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ac212602", + "id": "4f040f7e", "metadata": { "tags": [ "remove-output" @@ -991,7 +991,7 @@ }, { "cell_type": "markdown", - "id": "0a0c46c7", + "id": "05af6228", "metadata": {}, "source": [ "And if we had other stack implementations, we'd have to duplicate the test for\n", @@ -1007,7 +1007,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cf980909", + "id": "9ab5d126", "metadata": { "tags": [ "remove-output" @@ -1033,7 +1033,7 @@ }, { "cell_type": "markdown", - "id": "22c07fd8", + "id": "c9b5bc63", "metadata": {}, "source": [ "Now whenever we invent a new test we add it to `StackTester`, and it\n", @@ -1047,7 +1047,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a436f1fa", + "id": "6529d908", "metadata": { "tags": [ "remove-output" @@ -1069,7 +1069,7 @@ }, { "cell_type": "markdown", - "id": "ba67f420", + "id": "90055b54", "metadata": {}, "source": [ "Now it suffices just to add the newest stack implementation to the `stacks`\n", @@ -1089,7 +1089,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1b03539d", + "id": "ee6124a0", "metadata": { "tags": [ "remove-output" @@ -1112,7 +1112,7 @@ }, { "cell_type": "markdown", - "id": "c23cff8c", + "id": "c1644046", "metadata": {}, "source": [ "Notice how the functor, in its body, uses `S.add`. It takes the implementation\n", @@ -1126,7 +1126,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fd44e491", + "id": "b3c72b58", "metadata": { "tags": [ "remove-output" @@ -1155,7 +1155,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5a44d8e9", + "id": "3f918edf", "metadata": {}, "outputs": [], "source": [ @@ -1165,7 +1165,7 @@ }, { "cell_type": "markdown", - "id": "7be8a90c", + "id": "03d9d6be", "metadata": {}, "source": [ "The functor has enabled the code reuse we couldn't get before: we now can\n", @@ -1180,7 +1180,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9d972810", + "id": "258b79d8", "metadata": {}, "outputs": [], "source": [ @@ -1192,7 +1192,7 @@ }, { "cell_type": "markdown", - "id": "182216ae", + "id": "8bd8e1ba", "metadata": {}, "source": [ "That functor takes a set as input, and produces a module that contains\n", @@ -1205,7 +1205,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7117a737", + "id": "dac2a974", "metadata": {}, "outputs": [], "source": [ @@ -1215,7 +1215,7 @@ }, { "cell_type": "markdown", - "id": "fd976303", + "id": "4c9a5771", "metadata": {}, "source": [ "Notice how the output structure records the fact that its type `t` is the same\n", diff --git a/_sources/chapters/modules/includes.ipynb b/_sources/chapters/modules/includes.ipynb index 80572a6..42b7d07 100644 --- a/_sources/chapters/modules/includes.ipynb +++ b/_sources/chapters/modules/includes.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "02a78c5f", + "id": "c1d9f9cc", "metadata": {}, "source": [ "# Includes\n", @@ -26,7 +26,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bc02b989", + "id": "7338d6a1", "metadata": { "tags": [ "hide-output" @@ -53,7 +53,7 @@ }, { "cell_type": "markdown", - "id": "1609c145", + "id": "2ec30dc0", "metadata": {}, "source": [ "Suppose we wanted to add a function `of_list : 'a list -> 'a t` that could\n", @@ -86,7 +86,7 @@ { "cell_type": "code", "execution_count": null, - "id": "970308c7", + "id": "5589fde1", "metadata": {}, "outputs": [], "source": [ @@ -98,7 +98,7 @@ }, { "cell_type": "markdown", - "id": "9b3327ea", + "id": "b4b28057", "metadata": {}, "source": [ "This code says that `ListSetExtended` is a module that includes all the\n", @@ -124,7 +124,7 @@ { "cell_type": "code", "execution_count": null, - "id": "07bbc71d", + "id": "1584fd94", "metadata": {}, "outputs": [], "source": [ @@ -142,7 +142,7 @@ }, { "cell_type": "markdown", - "id": "8f1a6927", + "id": "a717dbd1", "metadata": {}, "source": [ "None of that is actually copying the source code of `ListSet`. Rather, the\n", @@ -157,7 +157,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3809f9c9", + "id": "13732bbe", "metadata": {}, "outputs": [], "source": [ @@ -169,7 +169,7 @@ }, { "cell_type": "markdown", - "id": "c16e9531", + "id": "bac6a858", "metadata": {}, "source": [ "Which would have an effect similar to writing the following:" @@ -178,7 +178,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1d69bdc7", + "id": "0521f57b", "metadata": {}, "outputs": [], "source": [ @@ -196,7 +196,7 @@ }, { "cell_type": "markdown", - "id": "169aad8e", + "id": "f20a158d", "metadata": {}, "source": [ "That module type would be suitable for `ListSetExtended`:" @@ -205,7 +205,7 @@ { "cell_type": "code", "execution_count": null, - "id": "aa48ce6a", + "id": "87aeb217", "metadata": {}, "outputs": [], "source": [ @@ -217,7 +217,7 @@ }, { "cell_type": "markdown", - "id": "2f62d1cd", + "id": "639241c4", "metadata": {}, "source": [ "## Encapsulation and Includes\n", @@ -229,7 +229,7 @@ { "cell_type": "code", "execution_count": null, - "id": "369049c3", + "id": "664e1d25", "metadata": { "tags": [ "raises-exception" @@ -245,7 +245,7 @@ }, { "cell_type": "markdown", - "id": "41b7d4b5", + "id": "b4163b83", "metadata": {}, "source": [ "Check out that error message. It looks like `of_list` doesn't have the right\n", @@ -255,7 +255,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6e0b03e0", + "id": "6ec34001", "metadata": { "tags": [ "raises-exception" @@ -271,7 +271,7 @@ }, { "cell_type": "markdown", - "id": "9a23e371", + "id": "15313ccc", "metadata": {}, "source": [ "Ah, now the problem is clearer: in the body of `of_list`, the equality of `'a t`\n", @@ -287,7 +287,7 @@ { "cell_type": "code", "execution_count": null, - "id": "96e6e62e", + "id": "1b154339", "metadata": {}, "outputs": [], "source": [ @@ -316,7 +316,7 @@ }, { "cell_type": "markdown", - "id": "36453247", + "id": "3de2a2ac", "metadata": {}, "source": [ "The important change is that `ListSetImpl` is not sealed, so its type `'a t` is\n", @@ -338,7 +338,7 @@ { "cell_type": "code", "execution_count": null, - "id": "52bde7cd", + "id": "0dc6ae6c", "metadata": {}, "outputs": [], "source": [ @@ -353,7 +353,7 @@ }, { "cell_type": "markdown", - "id": "814905a7", + "id": "306efeb0", "metadata": {}, "source": [ "But that's a bad idea. First, it's actually a quadratic implementation of\n", @@ -386,7 +386,7 @@ { "cell_type": "code", "execution_count": null, - "id": "72336590", + "id": "6aaeb7b9", "metadata": {}, "outputs": [], "source": [ @@ -407,7 +407,7 @@ }, { "cell_type": "markdown", - "id": "de47fbed", + "id": "62fd960d", "metadata": {}, "source": [ "Look closely at the values contained in each structure. `N` has both an `x` and\n", @@ -433,7 +433,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f9ed7d19", + "id": "c9fbe72f", "metadata": {}, "outputs": [], "source": [ @@ -449,7 +449,7 @@ }, { "cell_type": "markdown", - "id": "ab3c6bf1", + "id": "7a608d08", "metadata": {}, "source": [ "Suppose we wanted to add `of_list` to that module too. One possibility would be to\n", @@ -462,7 +462,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5816e2f8", + "id": "a13c94f2", "metadata": { "tags": [ "raises-exception" @@ -475,7 +475,7 @@ }, { "cell_type": "markdown", - "id": "b9e42877", + "id": "7e4944e2", "metadata": {}, "source": [ "The problem is we either need to choose which module's `add` and `empty` we\n", @@ -486,7 +486,7 @@ { "cell_type": "code", "execution_count": null, - "id": "12606a22", + "id": "df542542", "metadata": {}, "outputs": [], "source": [ @@ -495,7 +495,7 @@ }, { "cell_type": "markdown", - "id": "f23d95f9", + "id": "ed02acb5", "metadata": {}, "source": [ "We could make `add` and `empty` be parameters instead:" @@ -504,7 +504,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0069daf2", + "id": "8371dbb3", "metadata": {}, "outputs": [], "source": [ @@ -516,7 +516,7 @@ }, { "cell_type": "markdown", - "id": "1b090bf9", + "id": "a1429b12", "metadata": {}, "source": [ "But this is annoying in a couple of ways. First, we have to remember which\n", @@ -532,7 +532,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b73134ef", + "id": "30a15978", "metadata": {}, "outputs": [], "source": [ @@ -543,7 +543,7 @@ }, { "cell_type": "markdown", - "id": "ead4b106", + "id": "12449114", "metadata": {}, "source": [ "Then we include that module to get the helper function:" @@ -552,7 +552,7 @@ { "cell_type": "code", "execution_count": null, - "id": "27df776b", + "id": "15f182d9", "metadata": {}, "outputs": [], "source": [ @@ -571,7 +571,7 @@ }, { "cell_type": "markdown", - "id": "37dbb36a", + "id": "1096441c", "metadata": {}, "source": [ "That works, but we've only partially succeeded in achieving code reuse:\n", diff --git a/_sources/chapters/modules/module_type_constraints.ipynb b/_sources/chapters/modules/module_type_constraints.ipynb index 1aa7cb6..d6de844 100644 --- a/_sources/chapters/modules/module_type_constraints.ipynb +++ b/_sources/chapters/modules/module_type_constraints.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "3b1e1102", + "id": "f85e1669", "metadata": {}, "source": [ "# Module Type Constraints\n", @@ -19,7 +19,7 @@ { "cell_type": "code", "execution_count": null, - "id": "23a7cf36", + "id": "a6c67ee7", "metadata": {}, "outputs": [], "source": [ @@ -36,7 +36,7 @@ }, { "cell_type": "markdown", - "id": "fe39d1ba", + "id": "8624cf56", "metadata": {}, "source": [ "Recall that we must write `( * )` instead of `(*)` because the latter would be\n", @@ -53,7 +53,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6b1f6d7f", + "id": "b7ffe2d2", "metadata": {}, "outputs": [], "source": [ @@ -70,7 +70,7 @@ }, { "cell_type": "markdown", - "id": "371ee2ee", + "id": "bc3a27e0", "metadata": {}, "source": [ "Because `t` is abstract, the toplevel can't give us good output about what the\n", @@ -80,7 +80,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3f226002", + "id": "d9e800cb", "metadata": {}, "outputs": [], "source": [ @@ -89,7 +89,7 @@ }, { "cell_type": "markdown", - "id": "9d498e6a", + "id": "fb4d807d", "metadata": {}, "source": [ "But we could convert it to a string:" @@ -98,7 +98,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c177cf09", + "id": "02550622", "metadata": {}, "outputs": [], "source": [ @@ -107,7 +107,7 @@ }, { "cell_type": "markdown", - "id": "01a51b0c", + "id": "5338093f", "metadata": {}, "source": [ "We could even install a pretty printer to avoid having to manually call\n", @@ -117,7 +117,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cb9150a6", + "id": "f4aab100", "metadata": {}, "outputs": [], "source": [ @@ -131,7 +131,7 @@ }, { "cell_type": "markdown", - "id": "1035c336", + "id": "26da5055", "metadata": {}, "source": [ "We could implement other kinds of rings, too:" @@ -140,7 +140,7 @@ { "cell_type": "code", "execution_count": null, - "id": "71ff1c30", + "id": "7ecffa8a", "metadata": {}, "outputs": [], "source": [ @@ -157,7 +157,7 @@ }, { "cell_type": "markdown", - "id": "25ad03fa", + "id": "fa0757c8", "metadata": {}, "source": [ "Then we'd have to install a printer for it, too:" @@ -166,7 +166,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0fe75bde", + "id": "6aeb45e8", "metadata": {}, "outputs": [], "source": [ @@ -180,7 +180,7 @@ }, { "cell_type": "markdown", - "id": "d2ec15f0", + "id": "97d2bf9c", "metadata": {}, "source": [ "Was there really a need to make type `t` abstract in the ring examples above?\n", @@ -197,7 +197,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a04a061c", + "id": "a8ad421e", "metadata": { "tags": [ "hide-output" @@ -221,7 +221,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f054e2cb", + "id": "e786b808", "metadata": {}, "outputs": [], "source": [ @@ -230,7 +230,7 @@ }, { "cell_type": "markdown", - "id": "bc49b27a", + "id": "32445ee0", "metadata": {}, "source": [ "There's a more sophisticated way of accomplishing the same goal. We can\n", @@ -241,7 +241,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9b5aaba8", + "id": "ed445561", "metadata": {}, "outputs": [], "source": [ @@ -250,7 +250,7 @@ }, { "cell_type": "markdown", - "id": "34d0a4b6", + "id": "49bc1897", "metadata": {}, "source": [ "Note how the `INT_RING` module type now specifies that `t` and `int` are the\n", @@ -263,7 +263,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c43e4818", + "id": "7ce1c392", "metadata": {}, "outputs": [], "source": [ @@ -280,7 +280,7 @@ }, { "cell_type": "markdown", - "id": "092e5028", + "id": "f4c8070e", "metadata": {}, "source": [ "And since the equality of `t` and `int` is exposed, the toplevel can print\n", @@ -290,7 +290,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6549e5a7", + "id": "2212d3a2", "metadata": {}, "outputs": [], "source": [ @@ -299,7 +299,7 @@ }, { "cell_type": "markdown", - "id": "096cbff4", + "id": "45dd7fa2", "metadata": {}, "source": [ "Programmers can even mix and match built-in `int` values with those provided\n", @@ -309,7 +309,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b3be504a", + "id": "aea90c67", "metadata": {}, "outputs": [], "source": [ @@ -318,7 +318,7 @@ }, { "cell_type": "markdown", - "id": "cf548ba4", + "id": "6772c4ad", "metadata": {}, "source": [ "The same can be done for floats:" @@ -327,7 +327,7 @@ { "cell_type": "code", "execution_count": null, - "id": "098c9261", + "id": "b132bcd5", "metadata": {}, "outputs": [], "source": [ @@ -346,7 +346,7 @@ }, { "cell_type": "markdown", - "id": "3f8eb7c5", + "id": "e760aa7d", "metadata": {}, "source": [ "It turns out there's no need to separately define `INT_RING` and `FLOAT_RING`.\n", @@ -358,7 +358,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3122aa1e", + "id": "bdf10a92", "metadata": {}, "outputs": [], "source": [ @@ -375,7 +375,7 @@ }, { "cell_type": "markdown", - "id": "50d3d76f", + "id": "73fa01e6", "metadata": {}, "source": [ "## Constraints\n", @@ -407,7 +407,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a4c2730a", + "id": "43f82458", "metadata": {}, "outputs": [], "source": [ @@ -417,7 +417,7 @@ }, { "cell_type": "markdown", - "id": "b87100cc", + "id": "c5ebfce9", "metadata": {}, "source": [ "Likewise, `T with module M = N` is the same as `T`, except that the any\n", @@ -429,7 +429,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7bf88677", + "id": "a37d3804", "metadata": {}, "outputs": [], "source": [ @@ -460,7 +460,7 @@ }, { "cell_type": "markdown", - "id": "081de18f", + "id": "4a7f961b", "metadata": {}, "source": [ "Focus on the output for module type `U`. Notice that the types of `x` and `y` in\n", diff --git a/_sources/chapters/modules/modules.ipynb b/_sources/chapters/modules/modules.ipynb index a779d0b..c4cbbaf 100644 --- a/_sources/chapters/modules/modules.ipynb +++ b/_sources/chapters/modules/modules.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "91d42bae", + "id": "d7069f3c", "metadata": {}, "source": [ "# Modules\n", @@ -35,7 +35,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7ccf2313", + "id": "c49f466f", "metadata": {}, "outputs": [], "source": [ @@ -48,7 +48,7 @@ }, { "cell_type": "markdown", - "id": "a46b396c", + "id": "97afe6de", "metadata": {}, "source": [ "The output from OCaml has the form:\n", @@ -93,7 +93,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ca533732", + "id": "207b992a", "metadata": {}, "outputs": [], "source": [ @@ -127,7 +127,7 @@ }, { "cell_type": "markdown", - "id": "35bf9502", + "id": "c4d01d30", "metadata": {}, "source": [ "```{important}\n", @@ -142,7 +142,7 @@ { "cell_type": "code", "execution_count": null, - "id": "61c09db8", + "id": "1492d71d", "metadata": {}, "outputs": [], "source": [ @@ -151,7 +151,7 @@ }, { "cell_type": "markdown", - "id": "df7ed64b", + "id": "a02b5a0a", "metadata": {}, "source": [ "```{warning}\n", @@ -172,7 +172,7 @@ { "cell_type": "code", "execution_count": null, - "id": "90e63621", + "id": "6d4ea55b", "metadata": {}, "outputs": [], "source": [ @@ -181,7 +181,7 @@ }, { "cell_type": "markdown", - "id": "fcb3acf3", + "id": "5a96a742", "metadata": {}, "source": [ "By writing `ListStack.(e)`, all the names from `ListStack` become usable in `e`\n", @@ -192,7 +192,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0ff39335", + "id": "9669b71f", "metadata": {}, "outputs": [], "source": [ @@ -201,7 +201,7 @@ }, { "cell_type": "markdown", - "id": "f80848bf", + "id": "6aa78e14", "metadata": {}, "source": [ "Now we can read the code left-to-right without having to parse parentheses.\n", @@ -234,7 +234,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8a44c198", + "id": "768e6827", "metadata": {}, "outputs": [], "source": [ @@ -244,7 +244,7 @@ }, { "cell_type": "markdown", - "id": "a9563f98", + "id": "4c683e07", "metadata": {}, "source": [ "## Module Definitions\n", @@ -292,7 +292,7 @@ { "cell_type": "code", "execution_count": null, - "id": "89eeb102", + "id": "2ea80b67", "metadata": {}, "outputs": [], "source": [ @@ -304,7 +304,7 @@ }, { "cell_type": "markdown", - "id": "de131b56", + "id": "c4e4dace", "metadata": {}, "source": [ "Sometimes that can be useful to add temporarily if you are trying to diagnose\n", @@ -319,7 +319,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ae953889", + "id": "31422493", "metadata": {}, "outputs": [], "source": [ @@ -331,7 +331,7 @@ }, { "cell_type": "markdown", - "id": "0d8307df", + "id": "a02f9bf5", "metadata": {}, "source": [ "But that can be rewritten without `;;` as:" @@ -340,7 +340,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4b4d59bb", + "id": "0d89276d", "metadata": {}, "outputs": [], "source": [ @@ -352,7 +352,7 @@ }, { "cell_type": "markdown", - "id": "d23df5b2", + "id": "63fe8b4a", "metadata": {}, "source": [ "Structures can also be written on a single line, with optional `;;` between\n", @@ -362,7 +362,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2337a6df", + "id": "7dcc0b9e", "metadata": {}, "outputs": [], "source": [ @@ -372,7 +372,7 @@ }, { "cell_type": "markdown", - "id": "e014dcc9", + "id": "f7105388", "metadata": {}, "source": [ "An empty structure is permitted:" @@ -381,7 +381,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9b091dce", + "id": "8ab5c157", "metadata": {}, "outputs": [], "source": [ @@ -390,7 +390,7 @@ }, { "cell_type": "markdown", - "id": "4091c777", + "id": "de70055f", "metadata": {}, "source": [ "**Dynamic semantics.**\n", @@ -407,7 +407,7 @@ { "cell_type": "code", "execution_count": null, - "id": "88197a46", + "id": "40c0b40b", "metadata": {}, "outputs": [], "source": [ @@ -419,7 +419,7 @@ }, { "cell_type": "markdown", - "id": "83e47db1", + "id": "5759ba90", "metadata": {}, "source": [ "But this module is not, because at the time the `let` definition of `x` is\n", @@ -429,7 +429,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b6a50f61", + "id": "d045a87e", "metadata": { "tags": [ "raises-exception" @@ -445,7 +445,7 @@ }, { "cell_type": "markdown", - "id": "7b847e75", + "id": "46c73860", "metadata": {}, "source": [ "Of course, mutual recursion can be used if desired:" @@ -454,7 +454,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cdc9f1cd", + "id": "7e67d061", "metadata": {}, "outputs": [], "source": [ @@ -471,7 +471,7 @@ }, { "cell_type": "markdown", - "id": "ff8af836", + "id": "fffae3f7", "metadata": {}, "source": [ "**Static semantics.**\n", @@ -494,7 +494,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0d49b18c", + "id": "83842655", "metadata": {}, "outputs": [], "source": [ @@ -504,7 +504,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7685872f", + "id": "82e308bc", "metadata": {}, "outputs": [], "source": [ @@ -513,7 +513,7 @@ }, { "cell_type": "markdown", - "id": "fb7f8278", + "id": "d13e5926", "metadata": {}, "source": [ "Of course from outside the module the name `x` by itself is not meaningful:" @@ -522,7 +522,7 @@ { "cell_type": "code", "execution_count": null, - "id": "31ba2257", + "id": "30051e2f", "metadata": { "tags": [ "raises-exception" @@ -535,7 +535,7 @@ }, { "cell_type": "markdown", - "id": "63795aa2", + "id": "10a9539b", "metadata": {}, "source": [ "But you can bring all of the definitions of a module into the current scope\n", @@ -545,7 +545,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5fd04404", + "id": "5b83aea6", "metadata": {}, "outputs": [], "source": [ @@ -555,7 +555,7 @@ { "cell_type": "code", "execution_count": null, - "id": "586eb30b", + "id": "157a6745", "metadata": {}, "outputs": [], "source": [ @@ -564,7 +564,7 @@ }, { "cell_type": "markdown", - "id": "e6552ee5", + "id": "eae021fa", "metadata": {}, "source": [ "Opening a module is like writing a local definition for each name defined in the\n", @@ -601,7 +601,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3d207d0f", + "id": "0fe039f5", "metadata": {}, "outputs": [], "source": [ @@ -615,7 +615,7 @@ }, { "cell_type": "markdown", - "id": "9b548b12", + "id": "f2df976a", "metadata": {}, "source": [ "Since `List` is open, the name `map` from it is in scope. But what if we wanted\n", @@ -625,7 +625,7 @@ { "cell_type": "code", "execution_count": null, - "id": "06b658f9", + "id": "4135d8f1", "metadata": { "tags": [ "raises-exception" @@ -644,7 +644,7 @@ }, { "cell_type": "markdown", - "id": "91a2bbd1", + "id": "a059f5c9", "metadata": {}, "source": [ "Now we have a problem, because `String` also defines the name `map`, but with a\n", @@ -672,7 +672,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c7ebea0a", + "id": "81b044ab", "metadata": {}, "outputs": [], "source": [ @@ -684,7 +684,7 @@ }, { "cell_type": "markdown", - "id": "1e4204a3", + "id": "0ea34a1d", "metadata": {}, "source": [ "But what if you want to bring a module into scope for an entire function, or\n", @@ -696,7 +696,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fff1962e", + "id": "b05cbc9e", "metadata": {}, "outputs": [], "source": [ @@ -708,7 +708,7 @@ }, { "cell_type": "markdown", - "id": "6a5d9a3d", + "id": "5224929c", "metadata": {}, "source": [ "Going back to our `uppercase_all` example, it might be best to eschew any kind\n", @@ -718,7 +718,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d4d335d3", + "id": "c7f9ba85", "metadata": {}, "outputs": [], "source": [ @@ -730,7 +730,7 @@ }, { "cell_type": "markdown", - "id": "90e7470f", + "id": "e47622a6", "metadata": {}, "source": [ "## Module Type Definitions\n", @@ -745,7 +745,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c044f88a", + "id": "3f046752", "metadata": {}, "outputs": [], "source": [ @@ -761,7 +761,7 @@ }, { "cell_type": "markdown", - "id": "1e304d1c", + "id": "9a116370", "metadata": {}, "source": [ "Now that we have both a module and a module type for list-based stacks, we\n", @@ -774,7 +774,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d8758889", + "id": "580dec61", "metadata": { "tags": [ "hide-output" @@ -826,7 +826,7 @@ }, { "cell_type": "markdown", - "id": "9008f681", + "id": "662f087d", "metadata": {}, "source": [ "Nothing so far, however, tells OCaml that there is a relationship between\n", @@ -838,7 +838,7 @@ { "cell_type": "code", "execution_count": null, - "id": "193d0bdd", + "id": "6350c70f", "metadata": {}, "outputs": [], "source": [ @@ -863,7 +863,7 @@ }, { "cell_type": "markdown", - "id": "bdef1f8a", + "id": "3f0f5fab", "metadata": {}, "source": [ "The compiler agrees that the module `ListStack` does define all the items\n", @@ -874,7 +874,7 @@ { "cell_type": "code", "execution_count": null, - "id": "162af213", + "id": "7aeb345c", "metadata": { "tags": [ "raises-exception" @@ -901,7 +901,7 @@ }, { "cell_type": "markdown", - "id": "8d6c5a35", + "id": "41f3ff51", "metadata": {}, "source": [ "**Syntax.**\n", @@ -982,7 +982,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d9e102a0", + "id": "ec6c4add", "metadata": { "tags": [ "hide-output" @@ -1001,7 +1001,7 @@ }, { "cell_type": "markdown", - "id": "19f67b81", + "id": "c8c4c435", "metadata": {}, "source": [ "And, module types can include nested module specifications:" @@ -1010,7 +1010,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d0d3dab4", + "id": "b09d1ca5", "metadata": { "tags": [ "hide-output" @@ -1035,7 +1035,7 @@ }, { "cell_type": "markdown", - "id": "3d27dc86", + "id": "2f605389", "metadata": {}, "source": [ "In the example above, `T` specifies that there must be an inner module named\n", @@ -1128,7 +1128,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ef035fcf", + "id": "5cffc11a", "metadata": {}, "outputs": [], "source": [ @@ -1140,7 +1140,7 @@ }, { "cell_type": "markdown", - "id": "d2a48b6a", + "id": "c84cb3c9", "metadata": {}, "source": [ "Module `M` contains two definitions. You can see those in the signature for\n", @@ -1151,7 +1151,7 @@ { "cell_type": "code", "execution_count": null, - "id": "665b8995", + "id": "ac070e1f", "metadata": {}, "outputs": [], "source": [ @@ -1164,7 +1164,7 @@ }, { "cell_type": "markdown", - "id": "90f2112a", + "id": "7eb9136c", "metadata": {}, "source": [ "Module type `X` requires a module item named `x` with type `int`. Module `M`\n", @@ -1175,7 +1175,7 @@ { "cell_type": "code", "execution_count": null, - "id": "93edf534", + "id": "9b829868", "metadata": {}, "outputs": [], "source": [ @@ -1188,7 +1188,7 @@ }, { "cell_type": "markdown", - "id": "8ba67b40", + "id": "20b4c552", "metadata": {}, "source": [ "Or for both `x` and `z`:" @@ -1197,7 +1197,7 @@ { "cell_type": "code", "execution_count": null, - "id": "29b9da24", + "id": "5d89e001", "metadata": {}, "outputs": [], "source": [ @@ -1211,7 +1211,7 @@ }, { "cell_type": "markdown", - "id": "6f4ab62c", + "id": "11850526", "metadata": {}, "source": [ "But not for `y`, because `M` contains no such item:" @@ -1220,7 +1220,7 @@ { "cell_type": "code", "execution_count": null, - "id": "34b0842c", + "id": "fac0cbca", "metadata": { "tags": [ "raises-exception" @@ -1237,7 +1237,7 @@ }, { "cell_type": "markdown", - "id": "fbaf1c53", + "id": "fe254e7a", "metadata": {}, "source": [ "Take a close look at that error message. Learning to read such errors on small\n", @@ -1265,7 +1265,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5250b094", + "id": "0e2f0c7c", "metadata": { "tags": [ "raises-exception" @@ -1282,7 +1282,7 @@ }, { "cell_type": "markdown", - "id": "35634aa0", + "id": "e397a7be", "metadata": {}, "source": [ "This time the error is\n", @@ -1305,7 +1305,7 @@ { "cell_type": "code", "execution_count": null, - "id": "02a9a304", + "id": "7e47a34e", "metadata": { "tags": [ "raises-exception" @@ -1326,7 +1326,7 @@ }, { "cell_type": "markdown", - "id": "2df0ff4e", + "id": "0c2941b0", "metadata": {}, "source": [ "So far all these examples were just a matter of comparing the definitions\n", @@ -1337,7 +1337,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e97b60c8", + "id": "c8df7c88", "metadata": { "tags": [ "raises-exception" @@ -1350,7 +1350,7 @@ }, { "cell_type": "markdown", - "id": "a2ef38b2", + "id": "529fd140", "metadata": {}, "source": [ "Why does OCaml complain that `z` is required but not provided? We know from the\n", @@ -1385,7 +1385,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b88815f3", + "id": "544f6bff", "metadata": {}, "outputs": [], "source": [ @@ -1415,7 +1415,7 @@ }, { "cell_type": "markdown", - "id": "64fbc1e1", + "id": "e624b76e", "metadata": {}, "source": [ "Module type `S` provides a *super*set of the definitions in `T`, because it adds\n", diff --git a/_sources/chapters/modules/toplevel.ipynb b/_sources/chapters/modules/toplevel.ipynb index 237b629..b3b9416 100644 --- a/_sources/chapters/modules/toplevel.ipynb +++ b/_sources/chapters/modules/toplevel.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "cc2b4470", + "id": "48d96cf2", "metadata": {}, "source": [ "# Modules and the Toplevel\n", @@ -58,7 +58,7 @@ { "cell_type": "code", "execution_count": null, - "id": "677bee1c", + "id": "faabcf1a", "metadata": {}, "outputs": [], "source": [ @@ -73,7 +73,7 @@ }, { "cell_type": "markdown", - "id": "e19c3a08", + "id": "f0c7f5d7", "metadata": {}, "source": [ "Both of these expressions will therefore evaluate successfully:" @@ -82,7 +82,7 @@ { "cell_type": "code", "execution_count": null, - "id": "eb5d33c2", + "id": "67891bf4", "metadata": {}, "outputs": [], "source": [ @@ -92,7 +92,7 @@ }, { "cell_type": "markdown", - "id": "9de80e0a", + "id": "489907f5", "metadata": {}, "source": [ "But this will fail:" @@ -101,7 +101,7 @@ { "cell_type": "code", "execution_count": null, - "id": "76bf9bb9", + "id": "f4a0dfea", "metadata": { "tags": [ "raises-exception" @@ -114,7 +114,7 @@ }, { "cell_type": "markdown", - "id": "f4da9c06", + "id": "db005a46", "metadata": {}, "source": [ "It fails because `inc` is in the namespace of `Mods`." @@ -123,7 +123,7 @@ { "cell_type": "code", "execution_count": null, - "id": "27dc7caf", + "id": "d6e84d43", "metadata": {}, "outputs": [], "source": [ @@ -132,7 +132,7 @@ }, { "cell_type": "markdown", - "id": "c86dd643", + "id": "826cc7f3", "metadata": {}, "source": [ "Of course, if you open the module, you can directly name `inc`:" @@ -141,7 +141,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a39a9460", + "id": "34fb4401", "metadata": {}, "outputs": [], "source": [ @@ -151,7 +151,7 @@ }, { "cell_type": "markdown", - "id": "4047727d", + "id": "0b35c832", "metadata": {}, "source": [ "## Dune\n", @@ -179,7 +179,7 @@ { "cell_type": "code", "execution_count": null, - "id": "03cb34f1", + "id": "fa8bcb7a", "metadata": {}, "outputs": [], "source": [ @@ -188,7 +188,7 @@ }, { "cell_type": "markdown", - "id": "947b8d3f", + "id": "6fda0bd4", "metadata": {}, "source": [ "The `dune utop` command accepts a directory name as an argument if you want to\n", @@ -223,7 +223,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5d8632b4", + "id": "5e3be8d4", "metadata": {}, "outputs": [], "source": [ @@ -233,7 +233,7 @@ }, { "cell_type": "markdown", - "id": "9c4c056e", + "id": "1d3af1ff", "metadata": {}, "source": [ "## Requiring Libraries\n", @@ -245,7 +245,7 @@ { "cell_type": "code", "execution_count": null, - "id": "caa2759f", + "id": "686e8921", "metadata": { "tags": [ "raises-exception" @@ -258,7 +258,7 @@ }, { "cell_type": "markdown", - "id": "13c23e06", + "id": "5c612fa9", "metadata": {}, "source": [ "The problem is that the OUnit library hasn't been loaded into utop yet. It can\n", @@ -268,7 +268,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3bf62bce", + "id": "b0e79985", "metadata": { "tags": [ "remove-cell" @@ -282,7 +282,7 @@ { "cell_type": "code", "execution_count": null, - "id": "aa29847c", + "id": "78cbb9ec", "metadata": { "tags": [ "remove-output" @@ -295,7 +295,7 @@ }, { "cell_type": "markdown", - "id": "a2bde757", + "id": "865f6614", "metadata": {}, "source": [ "Now you can successfully load your own module without getting an error.\n", diff --git a/_sources/chapters/mut/arrays.ipynb b/_sources/chapters/mut/arrays.ipynb index fbd47a0..225d61b 100644 --- a/_sources/chapters/mut/arrays.ipynb +++ b/_sources/chapters/mut/arrays.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "67b3bd30", + "id": "8aaf5555", "metadata": {}, "source": [ "# Arrays and Loops\n", @@ -20,7 +20,7 @@ { "cell_type": "code", "execution_count": null, - "id": "75c1561f", + "id": "a173f0f6", "metadata": {}, "outputs": [], "source": [ @@ -29,7 +29,7 @@ }, { "cell_type": "markdown", - "id": "b7e3f526", + "id": "c65560cd", "metadata": {}, "source": [ "That code creates an array whose length is fixed to be 2 and whose contents are\n", @@ -42,7 +42,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8d69b601", + "id": "25d90b6b", "metadata": {}, "outputs": [], "source": [ @@ -52,7 +52,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c4c8e096", + "id": "650ab922", "metadata": {}, "outputs": [], "source": [ @@ -61,7 +61,7 @@ }, { "cell_type": "markdown", - "id": "3721c436", + "id": "22572341", "metadata": {}, "source": [ "As you can see in that example, indexing into an array uses the syntax\n", diff --git a/_sources/chapters/mut/mutable_fields.ipynb b/_sources/chapters/mut/mutable_fields.ipynb index 7f45462..b8688c1 100644 --- a/_sources/chapters/mut/mutable_fields.ipynb +++ b/_sources/chapters/mut/mutable_fields.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "2fb38788", + "id": "a0be2a25", "metadata": {}, "source": [ "# Mutable Fields\n", @@ -17,7 +17,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1141f1e8", + "id": "0285d25e", "metadata": {}, "outputs": [], "source": [ @@ -26,7 +26,7 @@ }, { "cell_type": "markdown", - "id": "5eb5ab88", + "id": "48a7b910", "metadata": {}, "source": [ "Note that `mutable` is a property of the field, rather than the type of the\n", @@ -40,7 +40,7 @@ { "cell_type": "code", "execution_count": null, - "id": "06fa1143", + "id": "3db84773", "metadata": {}, "outputs": [], "source": [ @@ -50,7 +50,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a01815ee", + "id": "fbb7ac4d", "metadata": {}, "outputs": [], "source": [ @@ -60,7 +60,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7683ce46", + "id": "120149ac", "metadata": {}, "outputs": [], "source": [ @@ -69,7 +69,7 @@ }, { "cell_type": "markdown", - "id": "53999185", + "id": "6f0a9c36", "metadata": {}, "source": [ "Non-mutable fields cannot be updated that way:" @@ -78,7 +78,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ad2ce416", + "id": "68de5269", "metadata": { "tags": [ "raises-exception" @@ -91,7 +91,7 @@ }, { "cell_type": "markdown", - "id": "0be089db", + "id": "9d51e05c", "metadata": {}, "source": [ "* **Syntax:** `e1.f <- e2`\n", @@ -119,7 +119,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ef270183", + "id": "f2e3c93c", "metadata": {}, "outputs": [], "source": [ @@ -128,7 +128,7 @@ }, { "cell_type": "markdown", - "id": "024a646c", + "id": "ce3e9b89", "metadata": {}, "source": [ "The other syntax we've seen for refs is in fact equivalent to simple OCaml\n", @@ -138,7 +138,7 @@ { "cell_type": "code", "execution_count": null, - "id": "dfad75ae", + "id": "11fd35a5", "metadata": {}, "outputs": [], "source": [ @@ -148,7 +148,7 @@ { "cell_type": "code", "execution_count": null, - "id": "95a68530", + "id": "0c1b1341", "metadata": {}, "outputs": [], "source": [ @@ -158,7 +158,7 @@ { "cell_type": "code", "execution_count": null, - "id": "33863ddb", + "id": "c83d9d5f", "metadata": {}, "outputs": [], "source": [ @@ -167,7 +167,7 @@ }, { "cell_type": "markdown", - "id": "f95bd57c", + "id": "e6786f4c", "metadata": {}, "source": [ "The reason we say \"equivalent\" is that those functions are actually implemented\n", @@ -187,7 +187,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1401642a", + "id": "cf961c54", "metadata": {}, "outputs": [], "source": [ @@ -207,7 +207,7 @@ }, { "cell_type": "markdown", - "id": "42220571", + "id": "91c146d9", "metadata": {}, "source": [ "{{ video_embed | replace(\"%%VID%%\", \"EEXa3bY4ZwI\")}}\n", @@ -220,7 +220,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cfcca4bb", + "id": "78cba076", "metadata": {}, "outputs": [], "source": [ @@ -246,7 +246,7 @@ }, { "cell_type": "markdown", - "id": "053749f7", + "id": "595e08d8", "metadata": {}, "source": [ "## Example: Mutable Stacks\n", @@ -259,7 +259,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f80aebc7", + "id": "e723cc66", "metadata": {}, "outputs": [], "source": [ @@ -292,7 +292,7 @@ }, { "cell_type": "markdown", - "id": "0fdc3c85", + "id": "149d82b1", "metadata": {}, "source": [ "Now let's implement the mutable stack with a mutable linked list." @@ -301,7 +301,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ed6d18a4", + "id": "0970235e", "metadata": {}, "outputs": [], "source": [ diff --git a/_sources/chapters/mut/refs.ipynb b/_sources/chapters/mut/refs.ipynb index 7602f96..2d406fb 100644 --- a/_sources/chapters/mut/refs.ipynb +++ b/_sources/chapters/mut/refs.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "07a974bd", + "id": "5b2c5a37", "metadata": {}, "source": [ "# Refs\n", @@ -20,7 +20,7 @@ { "cell_type": "code", "execution_count": null, - "id": "66fa5eb9", + "id": "193afa2d", "metadata": {}, "outputs": [], "source": [ @@ -30,7 +30,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9a750dde", + "id": "5cc7967f", "metadata": {}, "outputs": [], "source": [ @@ -40,7 +40,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fe2da687", + "id": "cb7486c8", "metadata": {}, "outputs": [], "source": [ @@ -50,7 +50,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fcf9a88e", + "id": "3b39f9b0", "metadata": {}, "outputs": [], "source": [ @@ -59,7 +59,7 @@ }, { "cell_type": "markdown", - "id": "94a0262b", + "id": "085de0b2", "metadata": {}, "source": [ "The first phrase, `let x = ref 0`, creates a reference using the `ref` keyword.\n", @@ -104,7 +104,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ca298bce", + "id": "63c04389", "metadata": {}, "outputs": [], "source": [ @@ -117,7 +117,7 @@ }, { "cell_type": "markdown", - "id": "aa231ea2", + "id": "0d58461b", "metadata": {}, "source": [ "The result of executing that code is that `w` is bound to `85`, because\n", @@ -240,7 +240,7 @@ { "cell_type": "code", "execution_count": null, - "id": "04f91a62", + "id": "56cd9991", "metadata": {}, "outputs": [], "source": [ @@ -255,7 +255,7 @@ { "cell_type": "code", "execution_count": null, - "id": "40f9d622", + "id": "b3f6cb37", "metadata": {}, "outputs": [], "source": [ @@ -265,7 +265,7 @@ { "cell_type": "code", "execution_count": null, - "id": "28dc57d1", + "id": "fa7a5290", "metadata": {}, "outputs": [], "source": [ @@ -275,7 +275,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5347cf48", + "id": "76bfddc6", "metadata": {}, "outputs": [], "source": [ @@ -284,7 +284,7 @@ }, { "cell_type": "markdown", - "id": "75f0dd54", + "id": "c393f7c5", "metadata": {}, "source": [ "In the implementation of `next_val`, there are two expressions separated by\n", @@ -317,7 +317,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7f6ac5da", + "id": "d142fbf3", "metadata": {}, "outputs": [], "source": [ @@ -330,7 +330,7 @@ }, { "cell_type": "markdown", - "id": "8d02288c", + "id": "8030c961", "metadata": {}, "source": [ "Now `counter` is in scope inside of `next_val`, but not accessible outside that\n", @@ -360,7 +360,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a2652017", + "id": "1f6024df", "metadata": {}, "outputs": [], "source": [ @@ -372,7 +372,7 @@ }, { "cell_type": "markdown", - "id": "3b240ed8", + "id": "adf5cf85", "metadata": {}, "source": [ "It's only a little different: the binding of `counter` occurs after\n", @@ -382,7 +382,7 @@ { "cell_type": "code", "execution_count": null, - "id": "da199edf", + "id": "8f76870b", "metadata": {}, "outputs": [], "source": [ @@ -393,7 +393,7 @@ }, { "cell_type": "markdown", - "id": "38897e0c", + "id": "453f7144", "metadata": {}, "source": [ "Every time we call `next_val_broken`, it returns `1`: we no longer have a\n", @@ -417,7 +417,7 @@ { "cell_type": "code", "execution_count": null, - "id": "52a1dd23", + "id": "24855128", "metadata": {}, "outputs": [], "source": [ @@ -426,7 +426,7 @@ }, { "cell_type": "markdown", - "id": "d2180393", + "id": "636d7d75", "metadata": {}, "source": [ "As usual, read that type right to left. The `option` part of it encodes the fact\n", @@ -436,7 +436,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1efe09e2", + "id": "d00566c3", "metadata": {}, "outputs": [], "source": [ @@ -445,7 +445,7 @@ }, { "cell_type": "markdown", - "id": "a2bfa828", + "id": "3401a266", "metadata": {}, "source": [ "The `ref` part of the type encodes the fact that the contents are mutable. We\n", @@ -456,7 +456,7 @@ { "cell_type": "code", "execution_count": null, - "id": "394c1393", + "id": "1342f85a", "metadata": {}, "outputs": [], "source": [ @@ -465,7 +465,7 @@ }, { "cell_type": "markdown", - "id": "1f90a9a2", + "id": "9205d7b0", "metadata": {}, "source": [ "Now we could create a pointer to any value we like:" @@ -474,7 +474,7 @@ { "cell_type": "code", "execution_count": null, - "id": "86c2abae", + "id": "704a3aa2", "metadata": {}, "outputs": [], "source": [ @@ -483,7 +483,7 @@ }, { "cell_type": "markdown", - "id": "67cbad2b", + "id": "268b0654", "metadata": {}, "source": [ "*Dereferencing* a pointer is the `*` prefix operator in C. It returns the\n", @@ -493,7 +493,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a76f753f", + "id": "72cb9044", "metadata": {}, "outputs": [], "source": [ @@ -506,7 +506,7 @@ { "cell_type": "code", "execution_count": null, - "id": "37288fd2", + "id": "3cc85f31", "metadata": {}, "outputs": [], "source": [ @@ -516,7 +516,7 @@ { "cell_type": "code", "execution_count": null, - "id": "33bcb39b", + "id": "493b44e2", "metadata": { "tags": [ "raises-exception" @@ -529,7 +529,7 @@ }, { "cell_type": "markdown", - "id": "19896442", + "id": "d30642ee", "metadata": {}, "source": [ "We could even introduce our own OCaml operator for dereference. We have to put\n", @@ -539,7 +539,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9aaa0619", + "id": "9f5de12f", "metadata": {}, "outputs": [], "source": [ @@ -549,7 +549,7 @@ }, { "cell_type": "markdown", - "id": "c0018680", + "id": "9c4bbdc5", "metadata": {}, "source": [ "In C, an assignment through a pointer is written `*p = x`. That changes\n", @@ -560,7 +560,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e36d59ed", + "id": "56e5281c", "metadata": {}, "outputs": [], "source": [ @@ -571,7 +571,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2fa9164d", + "id": "3b0a0122", "metadata": {}, "outputs": [], "source": [ @@ -582,7 +582,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2788c340", + "id": "ae6c20aa", "metadata": { "tags": [ "raises-exception" @@ -595,7 +595,7 @@ }, { "cell_type": "markdown", - "id": "98169c52", + "id": "fe17c666", "metadata": {}, "source": [ "Again, we could introduce our own OCaml operator for that, though it's hard to\n", @@ -606,7 +606,7 @@ { "cell_type": "code", "execution_count": null, - "id": "36b7eae3", + "id": "346ac575", "metadata": {}, "outputs": [], "source": [ @@ -617,7 +617,7 @@ }, { "cell_type": "markdown", - "id": "a289faa7", + "id": "d0714781", "metadata": {}, "source": [ "The one thing we can't do is treat a pointer as an integer. C allows that,\n", @@ -658,7 +658,7 @@ { "cell_type": "code", "execution_count": null, - "id": "273b2e51", + "id": "80e42292", "metadata": {}, "outputs": [], "source": [ @@ -667,7 +667,7 @@ }, { "cell_type": "markdown", - "id": "df513e66", + "id": "1ea079da", "metadata": {}, "source": [ "We want to define that function without using `rec`. We can begin by\n", @@ -677,7 +677,7 @@ { "cell_type": "code", "execution_count": null, - "id": "18f844b7", + "id": "77fcfaa3", "metadata": {}, "outputs": [], "source": [ @@ -686,7 +686,7 @@ }, { "cell_type": "markdown", - "id": "7490d2bb", + "id": "53efe086", "metadata": {}, "source": [ "The way in which `fact0` is incorrect is actually irrelevant. We just need it to\n", @@ -700,7 +700,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f56476c0", + "id": "09e931e9", "metadata": {}, "outputs": [], "source": [ @@ -709,7 +709,7 @@ }, { "cell_type": "markdown", - "id": "b5a9ce8f", + "id": "bf8aac72", "metadata": {}, "source": [ "Next, we write `fact` as usual, but without `rec`. At the place where we need to\n", @@ -719,7 +719,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bfbfe58d", + "id": "a0e3b673", "metadata": {}, "outputs": [], "source": [ @@ -728,7 +728,7 @@ }, { "cell_type": "markdown", - "id": "f42a0bd4", + "id": "9188ad26", "metadata": {}, "source": [ "Now `fact` does actually get the right answer for `0`, but not for `5`:" @@ -737,7 +737,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2a46d09e", + "id": "836d0dcd", "metadata": {}, "outputs": [], "source": [ @@ -747,7 +747,7 @@ }, { "cell_type": "markdown", - "id": "6dffe677", + "id": "c2b12f59", "metadata": {}, "source": [ "The reason it's not right for `5` is that the recursive call isn't actually\n", @@ -758,7 +758,7 @@ { "cell_type": "code", "execution_count": null, - "id": "01082940", + "id": "68cb3298", "metadata": {}, "outputs": [], "source": [ @@ -767,7 +767,7 @@ }, { "cell_type": "markdown", - "id": "fbe5a5d2", + "id": "fc4436f5", "metadata": {}, "source": [ "Now when `fact` makes its recursive call and dereferences `fact0`, it gets\n", @@ -777,7 +777,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6e8cec3f", + "id": "1dd53ac3", "metadata": {}, "outputs": [], "source": [ @@ -786,7 +786,7 @@ }, { "cell_type": "markdown", - "id": "05108fe5", + "id": "8eae078d", "metadata": {}, "source": [ "Abstracting a little, here's what we did. We started with a function that is\n", @@ -825,7 +825,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6a18a393", + "id": "908ea319", "metadata": {}, "outputs": [], "source": [ @@ -834,7 +834,7 @@ }, { "cell_type": "markdown", - "id": "84e483f9", + "id": "db257b18", "metadata": {}, "source": [ "What is this strange type for the identity function, `'_weak1 -> '_weak1`? Why\n", @@ -863,7 +863,7 @@ { "cell_type": "code", "execution_count": null, - "id": "40e20a5e", + "id": "615f8b7f", "metadata": {}, "outputs": [], "source": [ @@ -873,7 +873,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5dc323e6", + "id": "00f1d32b", "metadata": {}, "outputs": [], "source": [ @@ -883,7 +883,7 @@ { "cell_type": "code", "execution_count": null, - "id": "655de405", + "id": "3092a603", "metadata": {}, "outputs": [], "source": [ @@ -892,7 +892,7 @@ }, { "cell_type": "markdown", - "id": "b0d23df0", + "id": "3a03965d", "metadata": {}, "source": [ "After the application of `!fact0` to `1`, OCaml now knows that the function\n", @@ -903,7 +903,7 @@ { "cell_type": "code", "execution_count": null, - "id": "20e69289", + "id": "49cd20f5", "metadata": { "tags": [ "raises-exception" @@ -916,7 +916,7 @@ }, { "cell_type": "markdown", - "id": "d6bf8b35", + "id": "5701679a", "metadata": {}, "source": [ "If you would like to learn more about weak type variables right now, take a look\n", @@ -966,7 +966,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7f3c61d9", + "id": "5a284808", "metadata": {}, "outputs": [], "source": [ @@ -976,7 +976,7 @@ }, { "cell_type": "markdown", - "id": "902ee54a", + "id": "9a883ae0", "metadata": {}, "source": [ "A ref is physically equal to itself, but not to another ref that is a different\n", @@ -986,7 +986,7 @@ { "cell_type": "code", "execution_count": null, - "id": "382c8b74", + "id": "e519663e", "metadata": {}, "outputs": [], "source": [ @@ -996,7 +996,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a92ad1c7", + "id": "d81c820d", "metadata": {}, "outputs": [], "source": [ @@ -1006,7 +1006,7 @@ { "cell_type": "code", "execution_count": null, - "id": "76d7be82", + "id": "a94e48d5", "metadata": {}, "outputs": [], "source": [ @@ -1015,7 +1015,7 @@ }, { "cell_type": "markdown", - "id": "3700677e", + "id": "0caf3ebb", "metadata": {}, "source": [ "Two refs that are at different locations in memory but store structurally\n", @@ -1025,7 +1025,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c3646199", + "id": "ef1dece3", "metadata": {}, "outputs": [], "source": [ @@ -1035,7 +1035,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8a6c8ece", + "id": "69ec6108", "metadata": {}, "outputs": [], "source": [ @@ -1045,7 +1045,7 @@ { "cell_type": "code", "execution_count": null, - "id": "451c797c", + "id": "91dce901", "metadata": {}, "outputs": [], "source": [ @@ -1054,7 +1054,7 @@ }, { "cell_type": "markdown", - "id": "f53851c3", + "id": "7598ab02", "metadata": {}, "source": [ "Two refs that store structurally unequal values are themselves structurally\n", @@ -1064,7 +1064,7 @@ { "cell_type": "code", "execution_count": null, - "id": "341377a8", + "id": "63272cd1", "metadata": {}, "outputs": [], "source": [ @@ -1073,7 +1073,7 @@ }, { "cell_type": "markdown", - "id": "65520def", + "id": "ea7950a2", "metadata": {}, "source": [ "## Example: Singly-linked Lists\n", @@ -1089,7 +1089,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f66255b5", + "id": "ebcb6ee1", "metadata": {}, "outputs": [], "source": [ @@ -1105,7 +1105,7 @@ }, { "cell_type": "markdown", - "id": "04d1417d", + "id": "8a1206d1", "metadata": {}, "source": [ "To create an empty list, we simply return a ref to `None`:" @@ -1114,7 +1114,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bbf61881", + "id": "62d95c08", "metadata": {}, "outputs": [], "source": [ @@ -1124,7 +1124,7 @@ }, { "cell_type": "markdown", - "id": "68f364d1", + "id": "da2ee6d2", "metadata": {}, "source": [ "Note the type of `empty`: instead of being a value, it is now a function. This\n", @@ -1138,7 +1138,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4f0cca5e", + "id": "b8c59f63", "metadata": {}, "outputs": [], "source": [ @@ -1150,7 +1150,7 @@ }, { "cell_type": "markdown", - "id": "d96b9c88", + "id": "49efca9c", "metadata": {}, "source": [ "Again, note the type of `insert_first`. Rather than returning an `'a mlist`, it\n", @@ -1170,7 +1170,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0f0f215b", + "id": "5fcd3b93", "metadata": {}, "outputs": [], "source": [ @@ -1182,7 +1182,7 @@ }, { "cell_type": "markdown", - "id": "880d092d", + "id": "f6d48da1", "metadata": {}, "source": [ "Now we can see mutability in action:" @@ -1191,7 +1191,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d29f89c8", + "id": "e368654c", "metadata": {}, "outputs": [], "source": [ @@ -1203,7 +1203,7 @@ }, { "cell_type": "markdown", - "id": "24bfe674", + "id": "232f02db", "metadata": {}, "source": [ "The change to `lst0` mutates `lst1`, because they are aliases.\n", @@ -1215,7 +1215,7 @@ { "cell_type": "code", "execution_count": null, - "id": "10d21a1c", + "id": "0ed74224", "metadata": {}, "outputs": [], "source": [ @@ -1224,7 +1224,7 @@ }, { "cell_type": "markdown", - "id": "ad091c4c", + "id": "e5882796", "metadata": {}, "source": [ "But now there is only ever *one* ref that gets created, hence there is only one\n", @@ -1234,7 +1234,7 @@ { "cell_type": "code", "execution_count": null, - "id": "799a8b1b", + "id": "f9d3f0e6", "metadata": {}, "outputs": [], "source": [ @@ -1248,7 +1248,7 @@ }, { "cell_type": "markdown", - "id": "c541b1bf", + "id": "622f0bf8", "metadata": {}, "source": [ "Note how the mutations affect both lists, because they are both aliases\n", @@ -1261,7 +1261,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2fc656b8", + "id": "2a7bab41", "metadata": {}, "outputs": [], "source": [ @@ -1270,7 +1270,7 @@ }, { "cell_type": "markdown", - "id": "f1d5c64d", + "id": "910a899e", "metadata": {}, "source": [ "It really doesn't matter what argument that function takes, since it will\n", @@ -1280,7 +1280,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6796abb9", + "id": "09e9a756", "metadata": {}, "outputs": [], "source": [ @@ -1292,7 +1292,7 @@ }, { "cell_type": "markdown", - "id": "25616156", + "id": "1eac3a3e", "metadata": {}, "source": [ "But the reason we prefer `unit` as the argument type is to indicate to the\n", @@ -1318,7 +1318,7 @@ { "cell_type": "code", "execution_count": null, - "id": "000b60fa", + "id": "e49fc6f1", "metadata": { "tags": [ "hide-output" @@ -1346,7 +1346,7 @@ }, { "cell_type": "markdown", - "id": "3d53c933", + "id": "18760d8c", "metadata": {}, "source": [ "Now rather than having to create new nodes if we want to change a value,\n", @@ -1356,7 +1356,7 @@ { "cell_type": "code", "execution_count": null, - "id": "64b3a0c3", + "id": "33f1ffd7", "metadata": {}, "outputs": [], "source": [ diff --git a/_sources/chapters/preface/about.ipynb b/_sources/chapters/preface/about.ipynb index 1a8434e..cf2523d 100644 --- a/_sources/chapters/preface/about.ipynb +++ b/_sources/chapters/preface/about.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "85b23d27", + "id": "36d571a7", "metadata": {}, "source": [ "# About This Book\n", @@ -63,7 +63,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f4bb625a", + "id": "c54e2781", "metadata": {}, "outputs": [], "source": [ @@ -72,7 +72,7 @@ }, { "cell_type": "markdown", - "id": "f3d10833", + "id": "29d539f0", "metadata": {}, "source": [ "You can also edit and re-run the code yourself to experiment and check your\n", diff --git a/ocaml_programming.pdf b/ocaml_programming.pdf index 45cc3ec603720972178862f15548bc9f9838b7c5..fdcc2cbc4dbb484deee97b3f2d4c5f5fa06e43df 100644 GIT binary patch delta 16625 zcmajFWmKD8)UA!XQ{0L>1cJL2x0d2A4aMCh1%kULxD~hJ?i45iN^!RW#i10p!}Gr9 z8{_=@{$$)Exs#F1>^b+f*4hb20ntYRUm%DOBnUDD1%e7egP=n&Aeay=2sQ)!|CWF1;)}^Itali+C!t5P0!#u8#ENeKS1 zrXN+rA#T@cG6@L2n7l%FA$%M>x>?}?FH;W1R7ssp{=KW;Xh30_w^=n8loN4luc&?c z;#6^n_iGmU+y`v!EDhz9sQ%b;T+8dC>^&VBKxhrn5L$}>l4qDD~yNPU*U4aQ;xkx9UHr2R4kZsx2@n(kf(2!&@ z_0b4{C!9lN-h|&s40AbUp`k%k<&;sF+zOpyoIB*(42UR3zhH0lxZ=-$S3&!m+b$is zm31MsROwH!SLPfWhxUH1a(1>=-!w^Nx?L}#>760jp!y?MRu>TNo9Xk=MQ?f9bF&nD znPp!T=V|)xt<3Ne1Ug`-vcJqQf1 z*3o_ZomG6o=O6eZX$-wa#vy6S##mkR$L~$}FpM~i;U`)efIE4AU}|-#`@wfn5tH+s z7WiXIii+ZAr~Xk#3cL(gXI2bD*|_QDo|P=Kyd0W>vKLR1WMRQZ?gNPW*;~3MwBZ7b zA-cBYz&%5r87xUjmu2mo$ZdH;sWkGK2VQKq#PO`)9f1IFvA#(&ZDa^~+K6LTl+pAC zj*pY@r;BIQe!S6ZtWVB19-i)>ES+AjG81}eFfup#X;{HRQc_s|_j%uC)6|uOYyd&T znID$9v##!K-}{&(gQ%}fE2ovmswd1L^zZC(+(+N72cJ-+RL>I`Y@A)dU4W3e+I5(l z?{U@J(}WXh$lR3o^BiqR_{NLW)9p;)9BBcf zIG*^%x>>Wb0Y37(ZZnXD`>yGli6%C+4+y#lA_kB?d#h;0cGpKX9QxKDaJUIC==L~K<7Ug zsj(S%yyIXW*CR?-5WP2|QP7w6dEkq#DaoGlIWd67Dm+plz3Mmrko)r%D#wNMYSl4&5cRemqjvqwGNZ{iT;xb zRtZiO>nW0i6ETxdv9f3~L(!;Be05a4+&%Q?81YL|%6fWE+Hvj2lHYWhse?51sAmoc zTXO&Fi^)M6VX*xm0H=GO)AN{|F@6OXi~eWn#AxA~!Sc!RqAJM1aYrQb@yU^Oya35q z;;uWAX~fTu>uWthFV!$d(@%^s+-rLPPT_aGQ8xNM)J7nd@KJff_M`e$xHrbd!O`WF zyFVAswxPmfV~UZ6~D+fCLKYuUX`%y zw$uq`qsMi-L#%1i55L5Q`9Z4wR~P2t*SvV|5C(V?zVSrjcT6r%Tw_4ce~6;A5Wm#W zz3h7ep=4f;e13ohIEhn6{iT`GNEmBQm6*^4@;~VKG<->(i?0;GSu<3#Ko=4Eu^p-# zPi;F;<~Y9Ikb2Xwk--gkI0!*O5i~QK@B-6_sPS{Y>j;C?(AL9U;#Md(JTj z`Td7bo;kwmpD@Lt0Y}PY)Jp$bTJ5>QjNY$`H}>x02^b6|(9hvR3(C%MOw>gbO?x0zg~j)x{b6;+!vVn z3M7!;X_+);WlrrIys^1+m6EleR1%?n0VY(;-%KzKcXKw5baG;{kAro8cjiOd8E1@I zCsS-|%Cf&d57P24tg*EP0{#>~nL=*xu#n7+nHiMf!79 zitAgO74(mQ{wjdHHz|P<6_G|y56=U-Ws1+U39IANG$@uiM3TT7n0u*YvW4xC=C@DF zfNwx6+a^XMkb+xZ8Zq}$`?`*g2i>%}{!KnXsGuXm_UadVc~Zt6F%Tb~Xx?x-)I-#c zvahM>Ve!PkKTCm61c>Gkf_pT}pLQu_lQ$Zh<6x;JO@aU)>npSYuy1#ir&O4*gVs|KI(Brvp zzkk1}E&MQPI=N8m-XAGGKM{IiVXptA@XtK=hxa%2)=v**673dtExc28y2izt>F+El46-A^c5CGZ$`5T#pLRPML_3B#sPnw) zIU;PkT_>I`B_ifV3h%kZvnC>!2BnRO?X;2j-{PvulBR`x;3*QJjfylOJg{M!bpK%y z!~Cpt9ZmW>RO7vS!>99c0L!KsLlgXfWMzz30`smuvvZ7w25f%{%s;jwsAPHbIff@H zhFy$~9gDRyshprOeLM*_jad#PSksJ=QhC<&z3mCbMdWoHqo$qRavynQI0c8IBUe;R zt%i_z!t(FNopSChbhT+Aq)&_#ggXfCNniQY-tiF@fBP6(u0UPmz(Bp)g+OnnsA2O_ z(>h0J{<9FPnxRLSuU!luG6w-Z5a^3}fB=<1nTCG-z6++Fun`4SVxaJTW~eF;mDqZV z`k{awX%7Bf2c;4wm?EVk64w%?%^Z^%@tD9g`sE)DjN%h%=NMB|5l{*=A@`R*P!@%a zg`cuSmVPw!Gt1?PlnG18Q0p_tfC_A4`f`s(`hF+ZtFxifVF6bk-PF;OJ^n^%t!-s( zA#Y_mCK&YvVK%!ilfDd>IMZ>QMix9elEA0#=pal`*qmzkM-23UEFfxHz+yOy|8xTs zUFb&|yD&RlH~l+My-22t$MjgAl?g~vel`QT{T^kQVxol%S`jyxpP zF%rXz)lW&0qNo|ail#-;{hb>Z5|jSo=chw?_}({Hf*U>C={0&OBk?Eb&2+$4j|NAZ zu~U`nC1>RP$}qA}7taHzhU?37X6uky3DE|Uc^m!aBViSxToIXcp?AC{b1zg z=;pzsu1#E6i$;q6cqXw{09Wc|jPgjg{{=zhPo(|-=+de-NkjKnL*V}f&Tb<+7b+#9 zr=H%T-Wpta%MB$0@}#<<1RE+TD_hpfkPJosZ*LBmD;yusZn{q?VirV7aB5Iu1cN>< zTvT>+D7Cis(Lxcy2W9=8b>><9M_ZqObP{=HTBLG2cJp6G`x%F``|FA?{lZ6+1FbOl zn$~CW>7K0@9^3e(SK%W%KQ0N88yG#6s@(%;;AIPqjiAY|F(~8joPCj1j{PKZxqc?? zVoR#0Ea$7FZ2WQ>7Wy($=@e+2J9oqzS1Q*E=cJ?520Ye|oQwv{vH($|s9fis!dL$4Si1b%CGP)mWDIPzW;g*4VCSMWFAmbt^%sFm4*VgWNyZ zAoK}F9we^OAz<+_pP)w{qnBBsPV^U|`gV-~pD9L`YZY$Wrd@Q(*W^t8Q|<9Xv*wn+ zO((#5FLc1Shh>)P&C>nBoMJ%oP0+Dj5*(GULv zjKoF^Mgl34NQ|k@YSs z!7w`(y=>y{^X=z*{dZKpvx@Ww8J9bTKofP_8_kHbtiVnmX=c|hxS z=lO|Y`LmcGzlp$2-eVLGtDD8gpQe$F2hZ%g(r0AcW`V4P z`K;8&yq0){YbSdAB}{NeX4DjOYUB94w$07(XI1rimIFOO#JygdrU@HIVHeHQ>H3vI zEq_J4P}lz!e8E{1ljM(6YC^Y3{=(#>4gMxRq%9+Jp2CJ^hD$+Mw1+GAjMw)qQT5!4 z9wC|5FP370k=NJ3{)}_qkGSxy4A+JTh-zI0L5+6YA*c7wZPb%e?Ofr2_CeYA+E-Fvo?{9)sayhL2L9D<&4>TWaQkXwGGW1##}9F!N?dTriL3 z-_YGN>E8&0p(U1f+W1b$15$4b0ynv-aK0PAX&YxUG}iYkaXKAEoWsiQR=La0G@ZN* zo=TUZKKU@)980pQ8vuKE^A6eNva$*IssByvhsg_P93DOqw|(zEjUBi>@Wf*OZP9c) zO-SMsZ<2e(?@RFB)n5A1P@Igo-d_0p$ zZS#rvDz_08B8xAz?flo9EN#z!WsZj2HIVtmX4L6m7X-ea>D;D!n<5k*_%9axmG=+b zI&)~@Ff1a*1L7s`4jBNeKEmv|uea@w=fplbo&MlJ&|@<&{jj7)QBdeRI>;7B zmdg7Tc`&Z<&4I7QI*`!cTs)lVPx4y;HVfW4Gf+P+`TbtX*n3i)1peT=7@h_LL}MGb z$lvL_g}Nq#vCg>121>YC&RhdiAhMZs?Kc%kJhNSG3bd_VrC%QqaASXg6V>Pg`j2}e zYG@>p*91L?|6ReclRk{4^nW1-0oeMYM=jvAjvs4(tPJE4>V%3;IZJzSAg;MrkZ2QW zAXu9gY?@Ri-5fEI;N%>lRKzRF%{52>8P8Y3|Ky4?U03K!geMpD%03cX0~k(1>Z=YI+%&w`w8;?^|OP>%^k~S1Xmw%b$qc z<@eG(9ix?*A}RIu6A(a(XvP)P1N>#CKUB389gRASI?dZ*VOwyK^ugkBMf9dr=npaXR`z< zJ$-rU!Q@Zp*Y`6FWOh^e=P(-g^UoqK?q?6?U}?Y0KmCn{GhH;Adx@nx9tnXDUOk^{ z^R#$M@1UNdS-c?gGn#xYX~7%xI?(KoCsdV_yuAX& z<5Qo0UgT%eDeklV>7IivFw!C>`2Ln?5Lx5Uvt}y~lJrfm_ww|XXr~sI!^?}0%=AE% z;GpV%I%*410M|vP9(3KQDE4$G=hssh1p4$|TUIev?dG!B>^Dxgjn(xpXUiBgZ!OiB za5{eO@toOs*e?e@O!J17r8XXjn(!IeaqfxH$%V2{Rh?K~t^IqlflT9SgJZ?CkD* zTt9x)_-@Sc?WZ!#g#x05!tLLP+DpSv+SO?@&u9j#TNZv74`X$78|$O)WHNRx2>M^P z;Xa7(u94r>ATrw&u=UvBF~IWDwgdRKLvSMF8n79SGmM9o+DDB0BP9{&vUBi<6(3kY zG*r*7j$nzW^OY%XO|7!jgIt-x8kwCI-})zG99rj10&SoNrRv>~Tjw-E%TI0hAyn5S zevVrk;h*((Rf2$9TmS^QufG3wQ-aX@gky^|dV6qeJT+0cfUC5VSbb>1b8DC8EA~fF z_QAlYNvJ}y5Tbj@Dt;|;^eUrm$w|()l_&=b74VV8#bFZsTk1Ggd=1UW*eNBMp(|gJPT~@-Rx0Z6s`i)xrKDhF zN^nkfXRa*`Fc=lMUTdMKQUx=T;PojY{qEQ9!aYFOhpWx!zH5ui54Ii?{O9PXC`J1v z&!x@-khGd0H~eETVq$c@hdCIr$UU) zN@FQ4f7KJ`^!kZ@ix~{iXHPpnM}`hHo$3BtkS)SPAG_R9sx#{{r~P?`L?i2BmWT2n znXbm)E#qb>*v+PJMfhT?+o)&7+#ue$xE?@!6CaSOF^#?^ZA!+XRBpJ9rtrp`gQwjZtW(u;1}^x zlGcGa$`&m5VMh-yeE0C@6+wa-Om6~kCg=PvmU}yc2~YBGI{lH549OwpY&dqQ@JZ*u zY-x*)O!mK^{`+l9?*iN z8qs0EsNQ??^7)sP3yqYE`F2M=Z8bhsUqn42JT%^tc=3%;*n}naB2i0djinIS5qV|6 zyIv9=LSvz{hYPKBSj8ax{6TK z*G64LYJZ`cxvzSp-bVIfn>N+f{j$g3t;?J>>Ibp!|qib z6Wjo!ho>gG*faFzR_ZV4Tl5Av_=AkwKMd`ZM1Bzd6PH9w93;6X3MO<3Ko7b`2@9|p%Aue0u2B;h8?M&?F)R-=hc2_ecZtt&pamj;1 z9U1UKoyl?JE!c3vwg7S^Yoy|GOiGKY)TqUUN+oI@4#e`=4BKFXWcuB`o%5AucXv<^MA&!H&oy>_Ki zdkjH#Y}8z`n91M_CzP$}SIZ;|(~w z4Thp|YS$zBoPfgZo$wRMLn{=kaiVExHM5|5ZQ@VhULi^@rDdt$UNXvBmmLe04vXy6 zWVT%xduD-47hs0;@?)qJg-a>T9t`Elvk7($B^weY`UifX+!Nn4k6F12fh9l}wl!k} zXD}}_+8W!Ax`Z}R>u%Ka-C8}D(erk`O@{=GtnDVlPRR*<@-Er^E#!tIdwOAcP;Iv< zO@SF~V%b&WRZd#yS=fSjIqxz0!yuw-L0ha;!*zSpP1FN)Mi|Y~D*AHB^e@e2*oB!} zrWXK+0#22Y__$j4Y!OUuc9yo~3Tf*-Z8%nLs2D09db*IkEWQYKdkHLo@j*S^z;55+ z2I{44;D>OS8Hk54JE^s2x*3 zZXyg8GnTS>4dw^p&M1VUi``s#sspzv0OsJ(5zYEz^#*Px-_n_2(o&KOM-lYN^iAfK z>IsSECgwce{_NbdPl!FaC}h$CjRdKT{rmhATmzm-n@3>5M)Db0n@s3<*Iwpkr?Tr@ zFi?$ejp>$nAB%U;Gjr1%JOy`G*V;~Z4M%yIxjU*Fy-p`c1WMI?|D12aNdHW`w*cNo zS5?lK;heX0XD*S?fn7oShr(TvSJ~*1bKKmCog#=_GLkN);4c06nMsDyfJPFaoLq(v zun`w%B!`8b%{~yvyv{=}F7;nDn8_u8K_FHT!vzl}JB3BCaBu@8?db=c7XAkFE^8+B z#;R0h)Th@HL|#_S21$=9;XQ2FyO5Lm{?$=tNr z0s}&Ii8{ut_qagukkbjE2VSF|oYpQ>G|`Z^P@fmp{)Ij5C;z@*5SXy>y6`17ru+xpXTp5=jDaWp=b8A%t>7cARS?p8(ob`dojHvLvEnx7La?9x zv(WPw2&$;oia1oBXs_ba9#5&kfK`sm3GH4KH$YulL^RY5l zFVsy)4CG|g7ryXcg2_EH+SCV1R{`b;(!7?~(!!T095$zn73%RV%9_kek$vn$aA`jDnb+MgAY&b6FLxM-TnU%B3qE^nu9m!q`kt!Ec0C6N{`g#8IXdD@_ zNUO9+J|8WZn10J#Ln!r2bXrvTG>C|gHd^__i3O9Gk?<;~H$Coxs7xkbq3L#@p~7Z| zxoAWTXa`k@CchU12CJtis7u(e(CjcyLMZAZ6yT5W<=GOAN`-3oT4QeY4h6?4ejTb* zdO}t?_-sE)f`{mWx~aNGblXh@%pWQ?bj4ico(H}|yX_#lcwY#MfXZakbpdBEW|BnI z7^Gfm?!MoCC%UlR|EvMfVEV8Ovx~7~Np>3sWm#sa*_2*JXIUGm+RWPlxdAmy4Lkfm zZoVZV*nXfx4Zw-XJ;h_MhR=!F{e2tEQ5`*+%d=LVN?j>>^{yS(0-YrC`*pB&0x*qU z0S{6y5~3yO-TOE!MQ2DxAuF-<+V^1hlqvM&gGxC|TNQ$j`DSoulo-IL|KO+4XQI2z zCy>7dnsVCXgu0e`t-`Pn-wZZTxrl#f;@@|ijPkwMiGTe#$>o}0p&2rudQpV4&4yMnQXrWS01^Pf2_mj~k+~UR=R3@YkJ9kpmMp5XH98b_k9o+2=_ujghVs*4=(#WOTN%iw5{^L;Qdw5Ha7EpwMYKsfFna5 z?*4!%QP58IJc!mwNX>JX8+ggL!gN0<3L>?LVY)}}6>21ClrI8bx&UJV;>`EspMkM_ zox?lc{zizPMBkJgK1)mxIN$eIj*uGP!>|q*0{a9F8~TrnK1eLB)J$+JQ`4K_UQyPP zXeElzgJ_%*2+0Pnw#PiaN8;LOMcG=V!{VVjL;kqJv9_n~*jouI22VGk@ z6P<+x3}2d0`u5}>b6-5N%)t@iG#7!Q8*o{;X>>F-3DkP1@6m0Wa#bC@Uv)P`Q`=4=3f2bD1O!TmY2S>@NEjBl^ic4rUC7Do4lOCBRn56NkQ@3VEOtGrHmC zuwI$QP5Paxn2am#o$c%}*RCi4@d439!nb*_NGMZu_V2h~i2!yY;iGQY2zmYxiO5qu z&Q4|>qAwO z^cnC52j3ObY4HajFW`##^kGuxftf{ZTgn4eSqF$`KJ}SgJrgXg7<#I^lySy4lHS@j;o0>T8fNMPz49>#r_ar=v*??jWdlI{BxdAPqr`u}_OX?z} znZ8<&>*^?_t-ic9K;q~FC2HJa3!HyZt^ed5DAdNEx4ZRiSnyKSj!DiMZ7wfvWw)RF zD_|&af^CJ1!zi+-)N}da2R{hR299y@?AHu?16RIyZtSF>12qjrre~`R$1!VyQ*VFI z?>*gK5Se>)!aU(9(JuGsKnkb|(Z<&*m^$1hdTK&I2O0Qodt^7eB6=+Iwmp7gb^xAq zt2=pB5f9TaA)61mvIvUa;9EBmD%hotmhM?mmxoJ4OW$Y!;{lh<&!^@SHkPESfx}>^ zU7R7)1s#si3`%2KTg4D~>H<7*KF;)P+Y6YXZj{>wzqq`{X;qZ5>Z7!CwoAAk~YA%<04E4jx~U=;(Y@9OyQV3oyt ze4r#>B-7R(MqoE!IK}k@3R{OVrf9qMtJA^XtK2S|0E75On74LbfHU|Wazw#TUce{5 zGNvs$tqGjIoQ$EL6(BULNoA`TkC9y~9wPjdq3`T_m*<&G-@;~I(5-8gw+mha)IycX z?XNsgp6_c)n{PfCW(jpjX}imUZ9%D03?7%^7;p`huHQmHB9Ba80cz&xPgC6D5yz4$ zj}btkgkg!KA-ZFJAl{`mQSYl6E}$bRw{@@7yZ*#c+5(irO#Z{hqv7%=D78NgxoPm_?-* zhYv_cOs@hCvH&5nd`OYsfpZP{Mv57(op~RnmT&-Ar%| zGpT_8{`3Tn1K3j}o`Jw|J}DJ5CAFd{o4Zw4kvdupasUW2 z-D$?bnxV@nCI|moy`W+#k0)WEdFw-!zqXU)#!(f#W4$khFkEOv%Hx~?kcuy!iFun5 znEh&I=Kl6^A?qw<)$SL8M${RT56fbbU{}u4@REOC_b)=~oGKJq zdvs3Fwv?h=(k>sx;wjjB9uq*5 z7T*c-Nz7#n?>uh5ZLgfu0QdQbhgugXz&sW#F=tI4&SZS4!#+#x4m_5nQD-ritLwW(W>1^_^#tMoP%&Rc z1FHgKmY6Eea;h$H8Vx`6?#2aA@x4pAuK+UWTD7Phx`;vjLYCMo%xU>Ai5k^@h2{pl zkbn|P-Z=?eQa0-UBFgF9!v*!0d=lGuHijdrIQS31#nr!+?20fdlI+!&Tsc_pN$!=G z>|Q=oQ9{>L6fw@gJBVQQUwbdDe*HN~O@d$`F+`Nzt}`La&014!d3pyF%4f?|!!)ao zvDZ~{0PZ9L6hg66uKST*b6PFsdaMo(vF1@*-glT#cs2G3FZYCkRc*}1RWytZE_gB0 z0w9iW=XuUDo$v*;4sE!mz{ufF7s4-@Fax;h#Xb%{m^iYX_4#yR!j}(!NP0*#-xn@_ zF=b%Qf_Q20sD?GcWc6dH_Y)Mxq~3m;s40{h=g0Cqelt;Gkr(^o-#|gP$L#h$ttX!6 z73O*Vu#CDP^KTRCEPL^{8`nS`) zp831^f4y0n>Hmt(vc|sOGC%z^13Cc?Qoz9y)9S|RxGK``7u3boC%!CMmr9nll$d+n z%j1!LjC;OW!DW5|+rtjx#u!eKI{Rz2Usld&>sgOc z1Jv&GotFsjT_G$(PZs8j=D&LVKRF?}u;mRMvU>dk>w|S@gK_cC(UwfM#m^DB!oXT% zcnraa=7T=xl1mZ^6t_otHr5`CF~=4nC^Kj+ku-(D>xDyWmRgIk)TO{>C1h6pSriig_|#B9yl^{RC9AQg!AA+HxY*Ty&t84I6BpmLp@S(Ofxif z>rJ5PVwCmwK_QzmqSgo}OT1$RZ%Q|^Mcmh~Hm14nxM5N27Ct2>`4T9Ctb^q;@X*w& z;>~j5Z5MH`zlg;+ zGo2zo^oIZvk6E@0sqX~7(K<0MO$_~Taur`yd2Le0EaBethiRWZIZ@wH`zT=GgeBX= zMipD)#D!hhv=X!Se}wi=^Q6qJSJ^hiI?^rT<3a8zyx_BZ-fyVU!B;CA@)9(Y+wc_` z$-(Z&;jDT*M+BC7 zbyF(arS+nYn5m=SJcc}+vH?5oy147_Fjt`*Y_cRtV+%sVC)zq|Z@H7H2hq~WMVIr(n8;`V>LE4wnZ*s)0DV4E%((MiwMVob z^^8`vqYjSGU6v|im~ z>WaUrbq%Jtp!Y>NoFmt~7To}e#D&t9yHKZ}qkhLGF1Y^i6l_jpJCH?fxF2(WU`Dtv zm)oE4#d@@dB@dyjFHj`=nCg}kn8=vOB87Za8>keBcqmx}EEl(_ilXbsD$jqH_?Ty% z@HO(^Ya@MgC7P|uOiOu(n~MM&hd~?xFZ8u7+W>anPS#EoP2Ndlq>7tfuYEEM*pqLd zANo{}q&J{%BX3E*M{}tal$B_!m?kHbBSLa-DF%N_C7Xlk(6?MqyQFMIW6DbOy7osE z`#-DmP@`PsegYWcUl54A!HZ-ZJ3KC;S;h7m;-s&-nfCIfT8~T|`!36?cowR9i`BzS zr3DWB;?hFsh?AW>N4r7<8uYG5UQ*betf!i7*Wg=Xg5oq!)kQeG_U0Azloo2V_esQT z7uED^$^0YyS!s7yW_QX6A1uVGF^^KNMkv*6|bjQqQ@Tvg%2dq+~Z@L#F{5j$o&4UnokD_EZ<18*VxGkw;Ui&CxHdticQb zRSRR)Q=?QV^6bq}ZN2ys+K^;nLTyI2>ylGALEA=l%D58eD=mQ$yG7V=uc9R*IR&IXpgsSMrI zwxaMv-pBoHEzt$L;?8=7$u;N{tY@p5CT1aD-TL=({idY-avvxDPH&-YvOo45t4mcc zU`Nn5>oh8lMyDOaO5v`m4e-_dAD>E29FKxY7+K1ku%6@qe_JTypGOTPj&3E-1WDS%wr|vjKXgqO34}uK zKmHP|ZK+3oT}i2P!6Yd1TO_{m$M)OCkHfLr8@6?+a{)@WCO+*8Rt02-9vWvApIk*v z5Sv|&1i@Onb&kx}^0`z;S;j2Ys7L*Z_3TbUeev4+0oh|Mp^26hT&$hpZLet{{CG8E zdmz%1>dUpC zgf?TzVi*LTy~~qg4lC>lJC5i;BIsW`49C>o2anxf=VE!88O3UqECmfoLD3ur#B99g zOOBB5n||y%mL*Ffc)fEFGePrm((83Fo&H5DhoKkdF z|N6gvsWy8lJ}2L=*fB;lLDNs3qqy~Nqi~K47|nY-53@91q&pN7%G>GL>qh9$5U>=hEG%M>>f`1VcI%M-nFwj3HlM5o1ej7k*)+Z66 zRUkD|mOAGZOj9*AfDMQ{X5Mx!@4jJ@kk?xvnUW8ZpFMNqUgE4rDX!8*b!DIBQ`LX# zrD5>UURy`YRK=Ov@w&S&us@$*Hgq@_fcFHf)yQX;G85j3Y4t=ewC*vxvMa^1R&nM; z129?SgS2`zj>GH#H0w-Nz0PcB9!?vVt)Zjq;T_IDX%4ee61a73&ODxZ$}cb9mIDQH z{d)E{4*lP;#W6i387S!ox%`!*vAz<0AaA5NRQ_75;n5(51{%DsXFQf`$uR)Sf-xet zw52m^qog1mETt}Vt)uoY;21xQd>K>L>GiLdb8O|kS8)+yKK`239wlS0SUIYC`XpI> zpn6ot*YxA{WU1!Fzh_Cuxq9lRUs@Q_D0t3VLfcCUl3$HJDlIPRc{#+owg8v!l-0u9n2LA7%c~$1>OtFS-A=Kl=_{=ud6%K3 z!?VVFPJ4pcJRs^}mowU|D74mdBIL55N8{!Ty*4;|{xS#E3$L{Mf?(F|FV5^uIH0`o z-*`Pr#=w!yRYi%zWb45gg?61clba;;UAAL+?|1vD1B_0YApAqLt4A*|jru~T)$2Gr zH7>!avd(o%c8>b|#2&9|eIkvomV04Ue~r_s#Z7VtX61h;WL9YiDuZ$mZJ#rB&2Z@>2)9$ zez_UghVsgzn^p!0nS)N1fEy=8IuGU^~%l{%`9|()6W;t48nZQ z--T2+a8&=sEKIn~-`Og6ZX?uxYCQyhOVXE4>dU8B0K+jKaKA;->nl5_2*l&u!oDT# z39Z|rDt9>6%_*#P>0-rO9lu*=epkNWTH5gk#f`neWygd#L7bQXz(BDpQ77AZl4 zE$1XAC>|EVi-_KkTnpPpRPXR03!g>gYe=_+%Oc%%_|qnV2m&6Y-IV|y7PiIqiXvfy zTNollnvmixauL%1(He@++W)$o!8urE{RggiIf%9chOR;;2>Szmu2Lo#t$lN@d|Y4D zHveP$NHOmkNY$o)8(MAnkp=xKif~`ND=-lAW}wEEiYv79|0=yj>x*$3_OONMOOOW{ zJ{OU|N$h(KBMHQ*L7j5}3FN8%##ea}cn8$ZDZ7x=HgyfK=)eO<+9S2uucVB7*4KGX z+l5c}D(tJs;})WUNSqeTfoS=IWN_-H)137hqf~9BJmGWhz(^nBBaCa>;%29J{6bRA zA{h3PeFWrKgBBujUyMQkSc>xavz1}rv^jB0Wop>Uby0{5_3&oxLxTT=8PNl9?KOHm z%XJZfg?dQfYD@>&n$0qjmqWRlzh%u2O;UOD6XT&qnOe5yMzM7iv-bf;9(A0v9o|M- zS`L5g)+B1u%dRe(Sj_Ndjl7K>G>_H}z|qSoF#<-tA34+T!Xz!F7qPEH!Ysfd1bE?o zu4uEAjXRrcB50ZsJ6j4+{IWhfSBlp&8H1v(d?pCsOu3r+4y@WQM_cx7r1lyMa&3f% ztZPWkss?}yyEZaf$U}jix+DtztAwvgHgA{D%SvMN%GP}LN4DplanR-rw6A$zqftqs zKqp_b@S7zV&%9r?+-HJn`A^V$W(xE~qpyrL)KHW`3xU~X1*0G~yzhMqG?PN+McZ+j?_=ga zPA{_?k-g&#`K(J^6I#@)+H@UtIy`eoVe}+l<@YDJwa@WHw)W)njHyuvy2ee~0WII! z6v;$&G3td(d1sC%x*i93_DLtWyt62)zoQ-z{#wW?E&gv6M2*ndcUn(&jQ=3Fwl7YL z7t#KD=m|@y-_2EEc5Ned^CJ}BEB{u#JfPfb)R>eyku`jq`pt@VV=pFOI3i~)ye`*X~%-@O>M>im`eM`;xPEb8eQdsWd1qL z0T1_DYI!G@S7OO&U7*rDGmLjhk|wHK`-P6!5DNz*I(#ef#?AAVHcn$etgtRpsZnQ*tgEiDzStnD55C4}ApN!{nW`$Yf8%w+; zcg8jaE?H0 delta 16644 zcmajFWl&rF7c~mS9fEuDQoJdy1&Ujt#T^=oyUQsMB*ls+I7M6B-Ms`T?%qOiDDIc% z{l9bPe!E{X=j5Ep%x`7ywb$Bv!}k1R_xwLYQK8SEXi#)01{4#D1;vKqKyjgXP<$u> zln_b;C5DnfK~PdC8I&AK0i}deL8+lMP+BNmEqz-%s&Hz1J3S>p*TNm8P_`I??U=u2 z@wjl2#crintQ>jq%ejMnbEY5|J!njrFVAZ5N455WOt)sqTLLs&LpGkX8#|1zq!~u! zzu<$q_@vi59!uy<{+nBw-ZI^rvsIRVPDh_j8J`;k#`8to$3o;~L;LSXP+%P8KW}D; zetq~c&N_xB+kGSeG%)VRa0_W?uMOEU>V`N@Be)4mFH`~rx1P}#2g|>CcO~*A6Ne{P z*!c6GUHmr;F(uEhos8e2s7Og@R_#tjGCH-1Gc0c^<7wLGlTTpU9&pA=u))RISOMSD zbL8S*3i}5As0LOl_{K-hFRC68kDq<{vk?kgHW9RnQ|EU6@&^s0cW zbBGLC*yY_9gN4@w_}Iz4Uyr{|y>-;_7-#G5OBj?F|FrK6q{ zUtUrynaURt_)_wncG%#38H)CQ~9l0NrDJ1B|8r_EDDIPojLOjYftV_!*Ff20(x%icmiMF|{=}R^^ zX6YP>#(Q)y)ucXQ;J%ScbQBQfObi86+GyZ^k)hSj%h(tn zuw}qIi7P4Tyrh+3aFWYy!xp~rFf6+iV6f>-XLICy_N8Q|hyVEVKX?r3JFc7b_40#$ z?v;*cticW3k51O^9&R5k9G|XIW83MmQ`fubIe^zvQn>&3d!Gf9#6_n(e&X;WUtBY< zx*x~Ed1OrQA`3oEho)Ru^5NifYFmAkUgA$K=Z#Urg@)s zDgktnAiI6E$lw}Z%ba%CUpLUt&Corca}ma^A9o@{g+C1VDYRV3UCu8Uz1~)FBNt5N8(m--;kT0PmV2rm9~DBfYtD)w zm!DcmNv6{xZ+{DF>s17)^cqG_MBNRXc>X3;<*kg4&5C4ZR)G|3rPj_&e&8>&pK=ch_(gsUxj->n zOcUTCf16C+HC}hVhJ7KO42zfSI^^o%?v5xmEc1Y zL%LfRVYxk?b*TH!{95B~t2}BmQNSsya;1_}`aK`P$qkyJZ3XT&79s~)@;_WS`{;!L zGy70}vcA=OGT$XCInpwH;;vmfsr?EbTK}4p1sp+@TB7?4@a2LSP2@lEtaQ3Wdk){U z5{UIh%b_(YO9|}?=oHh!=8hLru&@>BNqaS&`cLQ-ZxsQNCN5_o}gM4qjj0 zYAE1B zd;EW}uk=5`K5iE(L;QC2{)?{~=UYAXi4bfU%$&&b zQR6p4ztQ!nMo{?NtK6;XSr`FrNyJ-h8(yzJd5o1@fQQv{WeJqW*IO5%{+*V2NDMRf zgJDjOvi9zcjO6?zZ+qvtT!!bz6GERIvWmZKT|U}M|4#B5?9PvFvGh!6 zu64xS_!PZ~p{^=tqqUHqhzt3UOcL?F6x*KO(a6m4*iQ(OK2#lzTI+2;&E=6mdB8*x zkj1VRghjfe{U9)izS@QNiTw7V(6b!Gs_3O( z5NiK;CVy(K7aCcr(cn`$n>eTQlZ79hay9P1{?H}Vum6R4KH$^*jHBTKqYNyOSrDDX zZyb;o;fumi!tpb`4Y<0Zs+csXx8If0f861nUODfoaw5!ZF_mimiBWO*UYM&tRLI=kb6`?lG)na+4tBKdxC)6Dw@@ZoD2NZk(U>*}Jn zIK7*1{;b(Le33o7lIcBi0&);4d9F_cIj=jC3dM47Y;EStyJ(?pof+Zu@ln3a-q86M_S zltMvYQEjzwt8?)Al0ck-#6-So`HAr&!v%|MlWBM{y<>uKr83dJP=zA3-^q{& zvsr2}SGc@@=~=#5;7ZE2t`+B&r`zIT<^F`l&K8{D*C#X7Dog*oX^dCF%h>O&%sbO~ zt$;JC@sEwsynU~9jk&pU1EffP6x`9lL}Bm>@p07(!=;bg{y;LH|A%UUp>^`x;>6iV z%!I4*;+l)-t8bDYdO3O2X^UO-;klMCtlqr$aIBtponp_XS9Bbg(En0T@`82io?V+0QM=yA6C|9~J<|${dHVR||aj%0WjK`UFI<9c22ykC^;1GQvC_=J&9T0;UcY zoLA2S6(I_UKBreW-~L9&8Pt4j#Wy2H)s|NXefBIkcW>^4j<4K&8lTTwaM z3lrzoagol{Auq5#xp@VrS-+D$TOIptjD^QK;NRr$J%o2^Y4l=V&Zjmlbxw{YxpHo& z%MD7yr;YIrU-n;+?89%zk0Jc4dRuvRB;5zMi#JKqhuj;cT!F%5B zO^!V8CFQOEQ?^&d^FEJB9S!(=?4ES!=N~$6_?L!}&b#ti*?UTO=II3Zk2#Xu=)Gj+ z^Wj!w`5srEN-(*i(RVydPFg+89VcUh&nkB<**YJVk1KvQ?_b*?Ar1&@21!yw5<^nI z6BQlxe*|Crq&cJS+u~vT7mY;lw+!|6-%vWmOp|XzkR0hm3Qh%kvhG|C^3r zP3!;mX2~e?t#`zg`N5UdisDh&tfk$=N%hRy{%w6xgB)1Y&MeYZe5y~z#Q*vu|CXCT#n5Y4NdrOo#F|lsWpz(a^ zxZI;V<$3ZkxKHP7iGAlGbCGC;CEsjyd(!pNP`o!~Z~egUy8$XlT%|dh!a~&D{nJ2~ z)#~3-83T5do$dGT$4*e7Pa}=C9XdCp?4h!1;kw))FdDQ-Nhgu!A+S{8}>Eu)xSOyQ?N zzPdsZX&FqZ0Y|J~S8;;8#@Q;>T{?HQa&_CUucyg&_X@`~+rp!O;N)6!W-jN;1D1tq z1oZ#l(x5p?&-hPWT>u z!+!as2|jl_Ryy%J_V5s`AQnx~#Agbh*}Lfq1@_Yz^|m6?uYFW}r7UHS6tUk6^tPT-J3!^C?~E_pVnCl$|qW>P{gJ z+)`RcVSfO0(^!}75|*5p5|Y|vdwH0&8A)q|6Iss>Uc=s!7N&VgA)3nT=4@0egL(^i zx^OozITD9F1o+aQ(bU&{umcKJ%9R!|`zfToQKVZq^P5TBhSLfM(w4RiTMAON%sf?h zRngeCQofq_1#sRG))t!%-vp1`waZ7vQS@=!LAgbBrvqhf-3~an%GG7%<;T&h(KkV2@_AHHszLRxDg>*73 z2d81-GhSB83j-Qo&P~F)(!&q-T$+ngXhz;Bq%9SW-9H>1j4~>d4oJR9M>zaZTTGS9 zSjYxoiBG>c%v8_!$=I3D*2?Weq?CK33koT~rEZ)mXKeQCYK2Za#8W-8wwmuIwoaIS z93$dL$Y+&$A|m#$cCe;+!*tFCCC6ZlV_kj`v+3V_+|2h~2c`mamETs4$M+lJoqayq zqE8QbwZs^EFV-L8`cINy*njsjdfj6E9eD$gSQy}Nlj?ZO|1ul#{mFekV$(~T^|Myu zLrKMlsuG#sdcIzaIyTbt+z7&RV$d_s#`c)_~tCY34J)92xJ zG=JRc%kdy?7(m8YHRmuBAVQN7N3prJGCa9nROKU>ZaNa4EfvGACmlJ-iD}H;8+bAa zL=fdgk$AT7F$neS_5JNRzxw3j)^>$mKBh>?7%`&X`e2$78&Ly{6_Ji}_qyEOkE7u8 zRq&$7TV;7-ih)ReD34`+X%-=^ns#3$C5uUvYB3uj|w zZNCdG6E+`;)ovdgkI5IFO-$IIgMH*d4QwGpX47gWfB@D!3`2Go}<-k#Nls}9H1JoK3ArF59|{P zkP#ENvVIBHlT&~e`-Xn)Ky%s81GVa7%j7GrSSp+j;;p1D-2U`kk$-_rJS-eLAMOq6 zOc?k_v+W#2_bRg=B=N5M-PN2#7GvlnE%}-w!7W|=(dUo!y+}rCJCRl0DPs9z?xWbN zH4vGCjED-9RIj$G+}m<HW-d1~AU}jWN6m45Ef(DECa{Ff3p~17&2cJB@^>q8nbg zq$*d}m;X~*T#85gK`!K<_)nOxC1d+Oiz`rMp`h5FlB==g;#JgP6z0m-2V0w;A)FKi z8Jo*g#+EJ{qX(bU`w`QSg|5*z@_Fv!&sfHW-Q#0Q^D|8@A_}4`Y6BL@z`&T{=5fj_ zdi&{eDP?fANl@K z@R$`*$XtIb^zM_EVRgj4{!0m{n*EY)RYjMJ0!yMH^o%v$*>pZP$9L{bczMb{aO{M? zDd>z&x`0hOaYmq(QsJ9dnpon%{h&pRu8KBN{S(sJC7RA4l@Jg@WLtNaBaot+9PysK z8~&0AB5J}0Qcip6^C2|u`#0wJ&$rK&p|MJ==#0dltC`#Bd2sf^e`ALM$yeZM!~MSL zxf0Lfg{9;VD5YAJ&H2@-uVmy-zDB&G;$t^c!3w9AAdfoI;Im zO%+m3#gd0)OU&agr2BaHkKDw%>RJ8Z2H_BwnQTd8IOQ_UTvaR$*^)jqdxW=;EBA#q zlS#3!D@?-4S6%fIm4>1KU`&<02$>HgFcSB}Y_{KG|GS5vd|r^i7K$o>G}rn}8s7z% zoGUg?ZU~cPDMWYAS`ONM|E&3sHdhX78cKh&Ojpx;rlVQqmsBFtING!^&>tUtAqr~^ zcz?v5(TPEcCEt{SupPN{RM^!JMX#CrsX*`kB+H=K@dq6vX9RS80hUM#A{^xDh=>&O zd0PCsDir!P7_|n?DgligrvJ9kco$;MYs~|SoEUV~N)>0MT0_;s=1usFl7#*yl)qDi zi+VW?olMywm|mi7#NW|}q0@#%_8IR78S6h)kHy$YAI1L}>*pGl8=UBITF{2}e&`&h zXOxh!jku@GHuT3<0k%IY@#NMNDMM5Ep}`y^ivrkfOJR+laA@5Ka?repeuF`|mNW{& zmEkC;!QAUI^2@w5ZHLdhr<_YtKBX!T5+L*@s@Rz0>Fo3~#h<~csT~U3u!psDp&ajp z-loUV8KZZGYK6sMh`ju(-2I!Em>6dVMg9d(iZUTZJ;l#&oxpQcO7=0Cs;|WSOwSDB z`D?DyHY+6*QD?uRMwYYS_twHF?3;W=o%Brz?y(h9y3+S9qm1(!6?It zyhMO(s+~dNO`TY?2*NmqmI*7azo(=Lg&{d+?cw8+%r`)z0!Xy*6v!Il6aWLfl`StQ8IQoq@`!N^8m8 zO$eE~lD4NWD*dGHJzsVI4KI?t6(sRu`Ez%&GjzoFh1KOTLOfLEZ_b8zalUiNm)SP0 zaaW9&B-*6y^^aN9_O_rW6<>v5??N91VR4(>vfv<8)EM>Bv4+qG%|ik zc3W6Qi4v#d9y5~&Ji8r=;r2#Ny1;b7crhA4s%0&$HASN(i}__kb?bS;jxuLEB@4r# z%ixO^{_2lS9|Ds6Tge0F(2lEyuC*L$oh@go)`kZLDS5f3dQ1EG^iAG5+ zX3If@SUu9f_4)E5u>83ieyG7uB0L$E>Yc=^g>WpyV{yj;ybta4jzA!K!n%ZRUc zQ-~u0W;+vRx;Ca!&F4oR&5`nTXy6lyrU!mS8rJ_{^~iS=Wjo2%^_o9)YN0?Irb zzFwQe?Vi2?tLGbj5*f=l+9`_!gjQ^IP)QvissoikV`h1@CYHJ*gxXn;KQDh;jVCKr z{2ktA>rw;7I?)umJ zQ;!Dn9*u>)pXHnZrFvIeEH*R`M4y&cVm%tDze}p5)F#{bmDb~?JfH0X5za?@ol27# zvK9swbr6C)MU++_C4b%petz4rpw$? z6Lrug>}u8|JYTy+BP%47w?-&4h`AZMN5yVp?ixNjDq@fCmKpD%EBaLZQ(CblVuV&(86#e65BJkcjYT- zAGdAawmp@7DLUrQTd=!p)Znz7<=_9ut*QOGe~i5D=QKn8sry?8_wx&PjG#@LkR1TC zC32X2$L+ewn29%4saw;|%4}F_BVl90_f(!#ry(L)XhV4TAvMM1M5#t&zD>fv;` z{0%1I2Pt%YqC&H>po@;c;V1F40I7v@@{<>KdFW%!gq@oQu5RBa2d-cStOWNGSg_1d z2?eWLfZ?d=JrtE}4j4u~LX|uYSioYB+8nAEG}GJ$j?vOtUP(K(w~BTF^&9c;k*eg| z$GYu7)smil4ky6sVdBRk3~O?sq9Z(A!xjO>g7gOETb%NmocwA9T)64526}K@m^08h zdN^HPW?&ZeP`j`rBWl(hM6gD~PS*k&QFx(IYnF}ZykQtF)W(E*oyjibfHA>rXPpZ@ zH*{|uQy*QpTivCm(K7MiCz<=lvjwMMqje$Ig4kLiw%YNMHWTBWhb`~5h^Ufra;TC<7ZGSA*%2ci@S2m))z)d_G zIySP@{pqNgr@Z0O>47i^*4TcUjA(&Ba}D(VjPQql+_-TGLEOTDWU14iNVMpSo``@8 zV>nCsSdg6~!?=R~mX$tgcBhK#{Z2|<>9>N5#iC>C0K$@Wyem*U=w!GWxJ?5}B<~0U z@K(EMu2#m_PTIGXTu#UAve`#e?HS5ucDw@o%#cu&#X)PC8q5ikfT@4eJ4t(~~PS<^hg$ zw4q%|XFedu5OoiY$XaN>=J4b$_^JCxRyH)!ksOPUSd>%oQXUn?w! zRvN2RUtp}G-@F@GD z!kvxy!M6DV$=H9{dSX^TvcR3AuDB7lVYVN@7j>N3`*b;j%aq$se~QAff1{ZPr`Q3YDI5 zWdPgfZ;|Xc0W)JrHZ_5hk2nE;qVM#M#r9q#b`l+?b$nTUYs?!g?a_W>eBMrC+msTdNz4#2txiktAF8$8l_pv8NtBao@kL9RfD? zG1*5_34bYU>#D}2J6QW3;RS{$hZI#IGy(~ydmk*lnK@v3%XKPe;R;?VW>D;>}c8qlS)A?%<{ z@e-iLoE?|+MVIugGkBb8wdsER8i*Ev6XQJi{Xpoe6+@vhf}{~AN=n)Q_ymrPWBdEA z3|;NDEAyF(QaT?`y1bBr>`kd~Vl*uAYpXLtxvN)o@V6X9TflU~1CF_;G`K%jrf#yp zsys-u-8|isuQGUn4?Y*L1-UVIs-Z<6iKMzCU-wQWfA!Bs*g|b(mh@$TACz$C5a$<6 zjN}O0FDG@^@@N!a3HNmkDrgdtW47e`@(lX7bow)Ed1A?3&bR#Ufi^H*C=$SisjwBMv84vyNG3QuG5m1sY^Ku5sxJt-;Xwp z^iwKd8Ei{shR&-=P>x2NvflN3myJAIAXD`@=KZ_4#ruH8`9JoG_qhvB-th)B0X{D? zTl|H$(tM?cxO2(c8B}E1)swL?m7363Lhz-UwaqQgY-kfp$>^c}sPk z#QvG;Ja;VmZzF*lJ)rUJimkXcE>`9vYscHFojN-2qLk~s(vf!y?^Sx;Y|glnBR^c% zIlc_65rjFwArDkMC9Kt+^@vS4Pz0J6UqIp@-C=Z+T}WlMI{DEy$QIdFfqc2Cp8s8U zbDc3zkz&MQkUm-K%NCE7>AZ`-RVJTx--M`vdxLz%2h|RckKz>Bse`*W6lR^bBxcam zwU0g+DayYiN=olPEMO6vh5i9uCw@$6(-4Zh3YUL)h}&}BkYoL~=L!LwEM(bUZdidE z1Q=i{3yxca?6Tj|L^O9>s4`EN5{v6ckgEd&O7AO%APnXktafvfU?PDNkYFEm0iy+o z&2H2m94BB3d+Bmxfx-Uvn~>Ppo{HKJ`Q-O$z9Gt~#b~30T4CQ=-f?6ITyPd<$(y)7 z%z)JbVL#LaPU$AKzS#j854th7tnV0;(|v<&x!*~9WG(OsP=n5!z&e3pw!H5;ytjfX z1bEnXA4OL;Y1O!3Hyu%s70U%B53LY{H@qH1|7U4d5Pkv5{3i@P5@bf{8l}5hHLIL44_sL_s{$Tf(j(~ReoALQR?~2L z&l3KA+k}Mhx3T$|d4s#)L7>15B8V*iJ=@KMA2=8OrgxnmUqL2LJ{9=H!(xlz8NXCP z%3HWa=CR!vgj`eIX~7=6nh^R(mkklv49OVfz~(9IO%yR0=c#Dlr`AD00#9#dw~hD+ zSh2AePpAPPh=gl(FKexEc1ZRM0ndhXmEq2h@_`86IFy{z+Dd zY&)VE9sonEE~!Z(xnTyI#@RRUrYC=cHis>g0;eY}`$%dynh4))8F}5u{T1%MDmaN> zqh)#cFrtPDsp@@y--6hJvw=>#_`y8UL&2}pbd)XC0wy66o&}A63yvY4mj32@KyU?y|p5vW2$nW(Ff{< z=L114ZW#zE_&uoQoDp(kNvQ0w!venNk6^o45CGo`D6-Y>hCDHT0E{Luz;==N zC07O0z|BbiY-XBPKl&OKENEpyj9hEZ(om4hU3DB0-YhRwqU&+ zqAcrVYRSFAj&_ijTi<(aL}x8%3Jo`~M7+;Dka#dg!C@pmk_(m%EDa&mkoGV$u>m!y zt+HOqSOGBJsm6x4I7_Dk(jO-6Iv#y=@cgH+Rs7YkA`;ox$o60XNBB|!Fko+K_EaDk z^mvZ}p)e0&eb7UNP*}>cJ~$I0xx1k%vgS#MJ}ROUkg^g?xPy$535O>PcgeRc1>m)ub$l_C5l^1D{C%=Eiq|jRYK7U2`TM8!Q%-H;Q#2 zD*Oj*t~0XWMFDzN*LgGKey2xL@5rc{IY(g)>me6^4PGJ}tjHfRAG5;_n+fSFQP1Q7&?|xZ97z|GPXxQBJs0*ZMSeCg+7epnnSMuB=zjr$%%)yGC&fP?N_u}K=?NZ( zVntKsxfah6^`B-|>?5BLplhSMltTjV4B;Fk&i zqUIsHV55t~B!KVHq7b#8hZA^AL4?Cmls&}*3rX0uw0p)7w$V5#Q~E{fq-v4*{i505 zIN38AsgYl&uCRxNIQHVF6!J!DJLN$QNmEGU)3RfMgoTbo#0*?tnf?)m5Q6(Cn;eHB z>fz|hCWm(=UQ`wN6k@As4|^(2nY ztjz^{C;B_zcfHJquVJ>&zkd*gG@H{X?2fhno{JDeRCi}9N@I=)`bhO|^9dg-7My?fRIE#_ zJWqdW?O{oMCO_t!&+X+~v%ey2=SUwG2n3cB%^e69sawJ|Ri;f5rz&{!0Ahy+^g-q0cB3vd}XCYJfUg zD9(lLi)C1abWPF}~=G`55j6DwndI#2ReHcuc#bGSB<@p0f;*c9E467jx zc8$-<{Nyui;usoXlg9)W;8Rw56zBy_yHu1!oz|f|Caw)v? zyVG@UHPKd_qsa&M`T5?4b(1S%-GofJJ2Ks#)U&n=>+Ok>hK<>7*~Z{~2@%E`5~pxr zAxL~4qgQ;Lw=v!7@OcZdJBevX>NGh?%eqF`jNIGw6`A4Xc{*bi=!>MoozyG25@Zba12j}@t{Tei{FC`mh{4eps|pe+?Au# zAqHks6w2L$dq|TKr}vR0$qsBpW3v`x-+GcU`n7hx{(DLvYayt zc%*Ffm4@5r#7f_&&7%l+@l--fgW_fd#B(pU@9A`G_Jw_d`Z@s-IJPGtkl0A*fI=&m zS+>kP(nW0b6ORR{B9pT=GnNsVy4Vo_nGRm(uvF@LGXLMxj=xYv18Niwfx zNpHeIN)!@0^fVe!Bc#JU&-_SbKy=~)$5QMbxAycJ$2klW+enU|zWpoKN^sOOV4Y|F zTHz?f?h3$dXQP!1`0QLy?LcT0Kh3a60qNGL#G8NOi%QC=rV)$k6Mj^?Y%@GO3z8)@ zUB%flt!;8Kn>kfo8%n=$KaP}tj=Lv`u(l_z2qPFOlsQ*7cb}uF=SWv5)ze=MP3f7o zK5ui7T*7bYGO_lwULlI>PCVwGZ?0relzOv@2ZXNkCpZLdP*D-JX^pj_y3!Z((7M+q zTGLKw8urxllX@|i+}8*c;!R!lW>pH$v-bw(#+DaFawIycNRaP}8%kx!>8@^Wy$OsO zza$CVe37G$`E(GOOy`W;5r#&}LzcxaKGG7{L_K-d=ZRUL{jzLC7DTHZ`EMYX|AjFy zSRZ!4&$q^PMbpky;+%7o6YJcpORT7S`{?UKZ5k##xVz9T`P7PkLmwt4+vdG8E(g`W zJwU0>gkg0t@lz6Vq`#E_?S2VvpVeeq4D%5im|7{2`uER)VC$_y)Z=W^7dG z^@(OU7DF3R9k6M;`mH^;O5KZwTrhzQ^?J&whZ!tsM&1zBHSOx=i)#Gx&m|(&u|oI! zMCNQ$+eh}*_b~e_vYXQJZCPxCwr(^52CBaJ^R(ab(_GTHyFa4JW7OEv)g{ojdgfht z4Fbz|=o&drz*h?Gxsmf`(wRP zbc_)&d~TrRg zt+KV}9e`&qQi!)(>MUi9a!x-_)SN4g|GeaAG+1laI=n01nv&G{GeElzDPDa5Z5(Ln zjh&S}5*yGP;a(|tu&s+sU7EE?-DK|K_DB@FZ}nN9$9#yZd{(}JEe1@+s~nMJT4_SX zoJyh1ZqvjT&%&xm+d@xK|T2ihkfD`7a%lSR)^ObSxS(C#$ zY$}5Drozjqr+QTmge)|ir*WL<)q{#;GHLhHjKoT@XuBYlY>qRQ|Web$Rz1C`Ho z6P9I-pV)x*;l{SQ`I~17SOSHpi^aNugmK$!$M3dv8>pmm z0MV21sRX{1#ugM^M>ijq?JYLPwq=x#atz1>GN=dpVbsp<9Ff%I#KwsI%w(A%zwOh? z?jst^ilF3=TPH0ZJ3&}`W||G`)*L^>XZDAQP}v=S|vXB=VtZCNU`v! z`+>q6A*Qf{n_rG&FFkuc9cu0QQF|7A{vg)ZAql+Eoh6vcfH>fUh}}+9DQyo4pWMu} z;`45Q60r6R0~7Z5pcfzQG&~U;bzyhL-(<|L#$1tFAlHsrICu!XyU) zUC#$cYYugNt+ zCx>=_$l}f6)(0O9?%sxtLOuVySEYBa%R^q zzWk~(I42f-Q+P)>W3D0BmU^Bw?GKzvW`9CKhKmL5{)|?gSa^sSaa8DX4WKZovzMVY zd7KhHgJhIFNR@PayLodUI+-)N2YHhjx}!2H(TK9U=)p*Za^7GoIVP(0G&!OrdPC1K zCKG6e9U`XMfj?|6+Nz!KxOh#yF`xI1gdLZjcA9^mbIWpti!O|H47gU257_@i4R#ycg-=C1fgeY#32I+_;~#4iQl^S zD(Or^g&X~xEHkH9L;S{8f{E58eHi~U2qXdcX5A`R=(=71?;Mz-J)~ltw%C4OFeA6z zxs~H$c^Ge=aXaeXoZ~N1k2wlH^bJ2%c&8Q>K~FB0LZ=cH#-;^+beJnY4tuBk-!M;$ zS8BoE`3VYp#DGfFQmnn6!b&CwblM*FN_q!OusPQpUHxYs3!|rE9!ziU562Pj)^ou@ zhP0Ve&XIeCE?W@IkrIAxvtWEuS)un9LjM80?!r&^%zaG@ju+7-z)uwW`DvUfLZcCG zwJsvUpz)b>ofS@0)cM_oCWFwX6XC*;fnn1l>cR^cqi^?MxG)*xH$3eEaB_bhUUO@F zRt^>ODhsz?!)zp^=svH+b_%CmXV-s%q3sD;Ow}g|Pk;DXeBG%Liy`E8E$BaJIo2(F z=oo?(EjT4GH9Jp_$s`EII^B=CTk-iiqmDtXm=&F`e8^LJB96tTs`l7hF`RqEk9k`G ztfL;RW6l6{#vWXKob1k*`UKfs+s7DStTOQ;?~)nTsrc>x2JP$1y<#D41D_m?;%n74 zc`iZ?iTF`4yPs3x%jM`k#}8fqg;uv~&N`(M3e)1kwIlBmDNaVKGc?CNlPx2LPw+;&djSe%)0KP8Jg*Z ze8V?q0#knKP8-|DUX@cX>23dX`cR?we%35nfXsWP_W4_HMqWpu^lkC3hpE(}vY{S8x}ptJoWSyomgcv9=tY}* z!C0nKbk1A*GIgd%jIfS5VOI~d(J4HdhLhX2iTs%ZHGy-CdbVsCYPam zv7XB@E2O)luFKSAEgham^@q1JZF9}uMwdE!rVh(G5}3O|Hvc_?dlLQg)kpC>It~!Q zdQ!aWkVX(M5Nf|}*T~=$^7i=o5@yu8hW@k5Zj)n_sh3=eYXUx?tUpFGhQx;3zh6!5 zavAEpwJ-W)LRNxtCF3iZn69J)==>nm$rY8J>WlTYIcLDkJM9RQq`?*FVth{>Ay9NI=B!mx6PiD{jzImOOdB=?V;05 z+fXx$w)fU}!BG>V#Q!)K5x9xqCnjy-SMfh1q|hVRd(h&ifKA zDhrD96gDagno&H5>rsHME0*%DUshjR;K_gvg?G}KpCk9-c2vc*X|U7L2!7JpVGQ>n z>&_;TzQi2mV_E&jF3l1A2.2. Compiling OCaml Programs", "2.7. Debugging", "2.5. Documentation", "2.9. Exercises", "2.3. Expressions", "2.4. Functions", "2. The Basics of OCaml", "2.6. Printing", "2.8. Summary", "2.1. The OCaml Toplevel", "6.5. Black-box and Glass-box Testing", "6.9. Equational Specification", "6.11. Exercises", "6.2. Function Documentation", "6. Correctness", "6.3. Module Documentation", "6.7. Proving Correctness", "6.6. Randomized Testing with QCheck", "6.1. Specifications", "6.8. Structural Induction", "6.10. Summary", "6.4. Testing and Debugging", "3.9. Algebraic Data Types", "3.8. Association Lists", "3.10. Exceptions", "3.14. Exercises", "3. Data and Types", "3.1. Lists", "3.12. Example: Natural Numbers", "3.7. Options", "3.3. Unit Testing with OUnit", "3.5. Advanced Pattern Matching", "3.4. Records and Tuples", "3.13. Summary", "3.11. Example: Trees", "3.6. Type Synonyms", "3.2. Variants", "8.2. Amortized Analysis", "8.10. Exercises", "8.1. Hash Tables", "8. Data Structures", "8.5. Memoization", "8.8. Monads", "8.6. Persistent Arrays", "8.7. Promises", "8.3. Red-Black Trees", "8.4. Sequences", "8.9. Summary", "4.5. Beyond Lists", "4.7. Currying", "4.9. Exercises", "4.3. Filter", "4.4. Fold", "4.1. Higher-Order Functions", "4. Higher-Order Programming", "4.2. Map", "4.6. Pipelining", "4.8. Summary", "9.1. Example: Calculator", "9.4. Environment Model", "9.8. Exercises", "9.6. Type Inference", "9. Interpreters", "9.2. Parsing", "9.3. Substitution Model", "9.7. Summary", "9.5. Type Checking", "1.4. A Brief History of CS 3110", "1.3. Look to Your Future", "1. Better Programming Through OCaml", "1.1. The Past of OCaml", "1.2. The Present of OCaml", "1.5. Summary", "5.5. Compilation Units", "5.4. Encapsulation", "5.11. Exercises", "5.6. Functional Data Structures", "5.9. Functors", "5.8. Includes", "5. Modular Programming", "5.1. Module Systems", "5.7. Module Type Constraints", "5.2. Modules", "5.10. Summary", "5.3. Modules and the Toplevel", "7.3. Arrays and Loops", "7.5. Exercises", "7. Mutability", "7.2. Mutable Fields", "7.1. Refs", "7.4. Summary", "About This Book", "Installing OCaml", "OCaml Programming: Correct + Efficient + Beautiful"], "terms": {"A": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 20, 21, 24, 25, 26, 27, 28, 31, 33, 34, 35, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 53, 60, 63, 64, 65, 66, 67, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 92, 94, 95, 96], "lagniapp": 0, "small": [0, 1, 3, 4, 12, 13, 14, 17, 18, 20, 24, 26, 30, 33, 36, 37, 42, 46, 52, 58, 62, 63, 65, 67, 68, 69, 78, 82, 85], "unexpect": [0, 49], "gift": 0, "littl": [0, 1, 4, 8, 12, 18, 20, 22, 33, 40, 42, 45, 46, 47, 49, 51, 55, 58, 61, 64, 66, 67, 69, 77, 80, 84, 85, 92, 94, 95], "someth": [0, 1, 3, 5, 7, 8, 11, 12, 13, 14, 16, 18, 21, 22, 24, 25, 27, 30, 32, 33, 41, 42, 45, 47, 51, 52, 54, 55, 56, 57, 58, 63, 67, 74, 76, 77, 79, 80, 82, 84, 85, 95], "extra": [0, 1, 8, 14, 16, 19, 24, 27, 30, 37, 39, 40, 42, 44, 45, 47, 48, 53, 57, 59, 64, 67, 74, 77, 79, 80, 84, 95], "pleas": [0, 6, 15, 28, 41, 53, 63, 78, 89, 94], "enjoi": [0, 7, 30, 75], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 90, 92, 95, 96], "chapter": [0, 1, 5, 8, 9, 11, 15, 16, 17, 23, 27, 29, 30, 33, 36, 43, 50, 57, 59, 60, 62, 64, 65, 67, 68, 74, 75, 76, 79, 85, 86, 90, 92, 93, 94], "which": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 53, 54, 55, 56, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 91, 92, 94, 95], "contain": [0, 3, 7, 8, 13, 15, 16, 18, 20, 25, 27, 28, 30, 32, 33, 35, 37, 41, 42, 44, 45, 46, 47, 49, 53, 54, 59, 62, 64, 66, 67, 69, 76, 77, 78, 79, 80, 81, 82, 85, 89, 91, 92, 94], "one": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 53, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 73, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 92, 94, 95], "most": [0, 1, 2, 4, 5, 6, 7, 8, 9, 12, 13, 15, 20, 21, 24, 26, 28, 29, 30, 33, 40, 41, 42, 45, 46, 47, 48, 53, 55, 56, 59, 60, 62, 63, 64, 65, 66, 67, 69, 74, 76, 78, 79, 82, 83, 85, 86, 88, 89, 94, 95], "beauti": [0, 50, 57, 72, 75], "result": [0, 1, 3, 4, 5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 20, 24, 25, 27, 28, 30, 33, 34, 36, 41, 42, 44, 45, 47, 48, 49, 51, 53, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 73, 74, 77, 78, 79, 80, 92, 95], "entir": [0, 4, 7, 8, 9, 12, 13, 14, 16, 20, 21, 27, 30, 35, 40, 41, 45, 46, 47, 48, 49, 51, 55, 62, 63, 64, 66, 79, 85, 94], "book": [0, 5, 9, 12, 17, 20, 22, 30, 41, 60, 65, 68, 70, 72, 74, 75, 79, 95, 96], "base": [0, 1, 2, 4, 7, 8, 13, 14, 15, 18, 19, 21, 22, 23, 24, 25, 29, 30, 33, 35, 40, 41, 42, 45, 46, 48, 56, 58, 66, 67, 68, 69, 70, 76, 77, 78, 79, 80, 85, 86, 92, 94, 95, 96], "paper": [0, 8, 48, 68, 74], "philip": 0, "wadler": 0, "you": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 47, 48, 49, 50, 51, 52, 53, 55, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 76, 77, 78, 79, 80, 81, 83, 85, 86, 87, 88, 89, 92, 94, 95], "can": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 30, 31, 32, 33, 34, 35, 36, 37, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 69, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 96], "watch": [0, 3, 24, 72, 94, 96], "an": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 53, 55, 56, 57, 58, 59, 61, 63, 64, 65, 66, 67, 69, 70, 72, 74, 75, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 92, 94, 96], "entertain": [0, 67], "record": [0, 4, 8, 13, 14, 25, 28, 29, 30, 34, 36, 40, 41, 44, 46, 47, 56, 64, 67, 69, 70, 80, 85, 89, 91, 92], "lectur": [0, 14, 25, 53, 60, 70, 75], "prof": [0, 79], "addit": [0, 1, 3, 6, 8, 12, 13, 15, 16, 18, 19, 20, 22, 24, 25, 27, 30, 32, 33, 34, 40, 41, 42, 45, 47, 48, 53, 55, 57, 61, 64, 65, 66, 67, 74, 77, 78, 79, 84, 89, 95], "our": [0, 1, 2, 3, 7, 8, 9, 11, 13, 14, 15, 16, 17, 18, 19, 22, 23, 24, 27, 29, 30, 31, 33, 34, 35, 37, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 54, 55, 57, 58, 60, 62, 64, 66, 67, 68, 69, 70, 75, 77, 78, 79, 80, 82, 85, 92], "below": [0, 2, 4, 6, 14, 20, 26, 28, 30, 31, 34, 35, 37, 41, 42, 45, 47, 48, 66, 67, 78, 79, 80, 81, 83, 84, 85, 87, 94, 95], "As": [0, 1, 4, 5, 7, 8, 10, 11, 14, 15, 16, 18, 19, 21, 22, 25, 27, 28, 30, 33, 34, 35, 40, 41, 42, 44, 45, 47, 48, 49, 54, 55, 57, 58, 62, 64, 65, 66, 67, 69, 70, 77, 80, 84, 85, 88, 92, 95], "we": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 88, 89, 90, 91, 92, 93, 94, 95], "observ": [0, 7, 12, 22, 24, 30, 40, 44, 47, 51, 77, 92, 95], "long": [0, 1, 3, 10, 16, 17, 19, 28, 30, 36, 41, 42, 45, 46, 48, 49, 57, 62, 63, 71, 79, 80, 82, 85, 94], "ago": [0, 1, 10, 17, 66], "ocaml": [0, 1, 2, 5, 6, 7, 8, 10, 11, 13, 15, 18, 19, 20, 22, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 42, 45, 46, 47, 48, 49, 50, 51, 52, 55, 56, 57, 58, 59, 60, 61, 63, 65, 66, 68, 69, 70, 71, 75, 76, 77, 79, 80, 81, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94], "languag": [0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 12, 18, 19, 20, 21, 23, 24, 25, 27, 29, 30, 32, 33, 35, 36, 39, 43, 45, 46, 47, 49, 52, 56, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 79, 80, 81, 82, 83, 85, 86, 89, 90, 92, 94], "ml": [0, 3, 7, 12, 13, 23, 27, 33, 41, 46, 47, 49, 62, 66, 67, 68, 70, 71, 73, 75, 76, 78, 80, 85, 86, 87, 92, 95], "famili": [0, 8, 71, 74, 75, 92], "wa": [0, 1, 3, 4, 7, 8, 10, 12, 14, 15, 17, 18, 25, 27, 30, 33, 35, 40, 41, 42, 44, 45, 46, 47, 48, 55, 58, 62, 63, 64, 66, 67, 69, 70, 71, 72, 73, 77, 79, 80, 81, 84, 85, 92, 94, 95, 96], "origin": [0, 8, 12, 14, 17, 19, 20, 22, 24, 25, 27, 41, 42, 44, 45, 46, 48, 49, 54, 55, 58, 59, 63, 64, 65, 73, 77, 81, 85, 92, 94], "design": [0, 1, 4, 8, 13, 15, 16, 21, 23, 24, 30, 32, 40, 42, 45, 47, 51, 62, 64, 65, 66, 69, 70, 73, 75, 79, 82, 83, 85, 86, 92], "m": [0, 1, 6, 14, 15, 16, 19, 23, 30, 31, 32, 34, 41, 42, 45, 64, 76, 77, 78, 79, 80, 81, 84, 85, 87, 89], "eta": 0, "l": [0, 1, 15, 22, 23, 25, 30, 37, 41, 42, 44, 48, 51, 59, 66, 80, 85, 96], "anguag": 0, "theorem": [0, 15, 19, 24, 48, 73, 74], "prover": [0, 24, 73, 74], "help": [0, 1, 4, 8, 13, 18, 20, 24, 30, 31, 40, 41, 45, 46, 47, 49, 51, 55, 58, 60, 63, 64, 65, 66, 67, 72, 75, 78, 79, 81, 82, 83, 84, 85, 86, 95], "prove": [0, 4, 14, 15, 17, 22, 23, 24, 33, 41, 47, 48, 64, 69, 74], "check": [0, 1, 4, 5, 6, 7, 8, 9, 11, 13, 15, 16, 18, 19, 20, 21, 26, 27, 30, 32, 33, 34, 35, 41, 42, 44, 45, 48, 63, 64, 65, 67, 68, 74, 77, 78, 79, 80, 81, 84, 85, 88, 89, 92, 94], "logic": [0, 15, 16, 17, 19, 23, 24, 31, 56, 60, 64, 83], "formula": [0, 1, 59], "when": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 24, 25, 27, 28, 30, 31, 32, 33, 34, 35, 36, 39, 40, 41, 42, 45, 46, 47, 48, 49, 53, 55, 58, 59, 62, 63, 64, 65, 66, 67, 72, 76, 77, 78, 79, 80, 81, 82, 83, 85, 86, 87, 88, 91, 92, 94, 95], "construct": [0, 7, 13, 14, 15, 19, 20, 22, 24, 25, 28, 33, 35, 37, 40, 44, 45, 49, 51, 59, 62, 63, 67, 73, 81, 82, 91, 92], "s": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 44, 45, 46, 47, 49, 50, 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 94, 95], "desir": [0, 7, 19, 20, 42, 49, 67, 85], "make": [0, 1, 3, 4, 5, 6, 7, 8, 9, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 27, 28, 30, 33, 35, 36, 37, 38, 40, 41, 42, 44, 45, 46, 48, 49, 51, 53, 54, 55, 58, 60, 61, 63, 64, 66, 67, 69, 70, 72, 74, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 93, 94, 95], "sure": [0, 1, 8, 15, 18, 30, 41, 45, 53, 55, 66, 67, 77, 79, 81, 84, 92, 95], "onli": [0, 3, 4, 6, 7, 8, 9, 10, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 30, 32, 33, 34, 37, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 54, 55, 56, 58, 62, 63, 64, 66, 67, 69, 73, 74, 77, 78, 79, 80, 81, 82, 84, 85, 92, 94, 95], "true": [0, 5, 6, 7, 8, 13, 14, 18, 20, 25, 28, 30, 31, 34, 35, 40, 41, 42, 45, 47, 48, 53, 54, 55, 62, 63, 64, 66, 67, 69, 74, 76, 77, 79, 80, 82, 85, 90, 92, 95], "don": [0, 1, 3, 4, 7, 8, 10, 12, 13, 14, 16, 18, 19, 20, 22, 25, 31, 32, 33, 35, 36, 42, 45, 47, 48, 49, 55, 58, 59, 62, 63, 64, 65, 67, 69, 74, 77, 78, 79, 81, 84, 86, 87, 91, 92, 94, 95], "t": [0, 1, 2, 3, 4, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 54, 55, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 69, 71, 72, 74, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 90, 91, 92, 93, 94, 95], "incorrect": [0, 7, 10, 67, 73, 92, 95], "argument": [0, 4, 5, 6, 7, 10, 13, 14, 15, 16, 18, 19, 20, 22, 27, 28, 30, 33, 37, 41, 44, 45, 47, 49, 51, 52, 53, 56, 57, 58, 62, 64, 65, 67, 77, 78, 79, 80, 87, 92], "etc": [0, 1, 5, 7, 8, 9, 12, 13, 14, 18, 21, 30, 33, 34, 35, 39, 41, 45, 47, 53, 56, 62, 63, 64, 66, 67, 74, 76, 78, 79, 80, 81, 83, 85, 92, 94], "dream": 0, "would": [0, 1, 4, 5, 6, 7, 8, 9, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 24, 25, 26, 27, 30, 35, 37, 39, 40, 41, 42, 45, 46, 47, 48, 49, 51, 53, 55, 56, 58, 59, 62, 63, 64, 65, 66, 67, 69, 73, 76, 77, 78, 79, 80, 81, 84, 85, 92, 95], "have": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 37, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 55, 56, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 93, 94, 95, 96], "determin": [0, 4, 7, 13, 15, 18, 20, 22, 27, 28, 30, 31, 37, 41, 42, 48, 53, 64, 65, 69, 80, 85], "truth": [0, 8, 17, 20, 23, 40], "falsiti": 0, "ani": [0, 1, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 16, 18, 19, 22, 24, 25, 27, 28, 30, 32, 33, 34, 35, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 53, 55, 56, 57, 60, 61, 62, 63, 64, 65, 67, 69, 71, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 90, 91, 92, 94, 95], "For": [0, 1, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 16, 18, 19, 20, 22, 25, 27, 28, 30, 31, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 53, 55, 58, 62, 63, 64, 65, 66, 67, 69, 76, 77, 78, 79, 80, 81, 84, 85, 87, 91, 92, 93, 94, 95], "some": [0, 1, 4, 5, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 47, 48, 49, 50, 51, 54, 55, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 72, 74, 75, 76, 77, 78, 79, 80, 81, 83, 85, 86, 87, 89, 90, 91, 92, 93, 94, 95], "possibl": [0, 1, 4, 5, 7, 8, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 28, 30, 32, 33, 35, 37, 39, 41, 42, 44, 45, 46, 47, 48, 49, 55, 57, 58, 62, 64, 65, 67, 69, 76, 77, 78, 79, 80, 81, 85, 89, 92, 94, 95], "But": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 25, 27, 30, 32, 33, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 68, 69, 72, 74, 75, 76, 77, 79, 80, 81, 82, 84, 85, 86, 87, 90, 92, 93, 94, 95], "groundbreak": 0, "earli": [0, 18, 21, 33, 41, 73, 79, 82], "20th": [0, 41], "centuri": [0, 67], "gener": [0, 1, 3, 8, 9, 13, 14, 15, 16, 17, 19, 21, 22, 23, 25, 27, 30, 34, 40, 44, 45, 48, 51, 53, 57, 58, 60, 63, 64, 65, 67, 68, 71, 76, 80, 82, 85, 86, 88], "do": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 28, 30, 32, 33, 35, 36, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 60, 62, 63, 64, 65, 66, 67, 69, 71, 72, 74, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 94, 95], "alonzo": 0, "church": [0, 67], "alan": [0, 72], "ture": [0, 8, 60, 67, 72, 73, 85], "independ": [0, 1, 8, 24, 36, 44, 64, 65, 73, 78, 80, 82, 85, 96], "show": [0, 1, 3, 7, 13, 14, 16, 19, 20, 22, 33, 40, 47, 48, 53, 63, 64, 67, 69, 72, 77, 78, 79, 80, 85, 92], "1936": 0, "us": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 51, 52, 53, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 69, 70, 73, 74, 76, 77, 78, 79, 81, 82, 83, 84, 85, 86, 88, 89, 90, 91, 92, 93, 94], "lambda": [0, 1, 8, 11, 54, 58, 64, 67, 68], "calculu": [0, 8, 23, 64, 67, 68], "model": [0, 8, 45, 63, 64, 68, 70, 74, 95], "now": [0, 1, 3, 4, 7, 8, 12, 13, 14, 16, 17, 18, 19, 20, 22, 25, 27, 29, 30, 31, 33, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 54, 55, 58, 60, 62, 63, 64, 66, 67, 69, 77, 78, 79, 80, 81, 84, 85, 87, 90, 91, 92, 94, 95, 96], "call": [0, 1, 3, 4, 5, 7, 8, 10, 11, 12, 13, 15, 16, 18, 19, 25, 27, 28, 29, 30, 32, 33, 35, 36, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 55, 56, 57, 58, 62, 63, 64, 65, 66, 67, 68, 69, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 84, 85, 87, 92, 95], "machin": [0, 1, 7, 8, 16, 17, 57, 62, 65, 67, 68, 72, 74, 78, 94, 95], "thesi": 0, "hypothesi": [0, 4, 19, 22, 23, 24, 67], "sai": [0, 1, 3, 5, 8, 9, 13, 16, 18, 19, 24, 25, 28, 30, 33, 42, 45, 46, 47, 54, 56, 58, 62, 64, 66, 67, 69, 72, 74, 77, 81, 85, 86, 90, 91, 95], "both": [0, 6, 7, 8, 10, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 25, 27, 28, 30, 34, 35, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 51, 52, 55, 56, 57, 58, 62, 64, 67, 69, 76, 77, 78, 79, 80, 81, 82, 83, 85, 87, 92, 95], "formal": [0, 1, 4, 17, 19, 23, 24, 63, 64, 66, 67, 69, 80, 92], "inform": [0, 4, 7, 8, 13, 16, 18, 21, 24, 27, 33, 35, 42, 64, 66, 74, 76, 77, 80, 82, 83, 86, 89, 92, 95], "instead": [0, 1, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 19, 20, 21, 22, 23, 25, 27, 28, 30, 33, 35, 36, 40, 41, 42, 45, 46, 47, 49, 51, 52, 53, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 69, 76, 77, 79, 80, 81, 84, 85, 88, 89, 92, 94, 95], "focus": [0, 75], "imposs": [0, 4, 8, 19, 25, 28, 45, 47, 74, 80], "task": [0, 7, 17, 19, 24, 30, 41, 65, 69, 74, 82, 96], "re": [0, 1, 3, 4, 5, 7, 8, 10, 11, 12, 13, 16, 17, 18, 19, 20, 22, 27, 30, 33, 35, 36, 39, 40, 41, 42, 45, 47, 49, 51, 58, 62, 63, 64, 65, 66, 67, 69, 74, 76, 77, 78, 79, 80, 81, 84, 85, 86, 87, 90, 92, 94, 95], "go": [0, 1, 2, 3, 4, 7, 8, 10, 12, 13, 14, 15, 16, 17, 19, 25, 30, 33, 35, 36, 40, 41, 42, 45, 46, 47, 48, 49, 51, 55, 58, 59, 61, 63, 64, 65, 66, 67, 71, 72, 74, 75, 77, 83, 84, 85, 92, 94, 95], "focu": [0, 4, 8, 9, 24, 48, 65, 83, 84, 94], "relationship": [0, 18, 30, 48, 69, 80, 83, 85, 92], "between": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 25, 28, 30, 33, 35, 41, 46, 47, 48, 49, 52, 53, 55, 56, 58, 59, 62, 64, 65, 66, 67, 69, 71, 74, 76, 79, 80, 82, 83, 85, 87, 88, 92, 95], "turn": [0, 6, 8, 10, 13, 15, 18, 19, 22, 27, 32, 40, 42, 44, 45, 47, 49, 55, 64, 67, 76, 80, 84, 85, 91, 95], "out": [0, 1, 4, 7, 8, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 27, 28, 30, 32, 33, 35, 40, 41, 42, 44, 45, 46, 47, 48, 49, 54, 55, 56, 58, 60, 63, 64, 65, 66, 67, 69, 70, 72, 74, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 91, 92, 94, 95, 96], "two": [0, 1, 2, 3, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 30, 31, 32, 33, 35, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 58, 60, 62, 63, 64, 65, 66, 67, 69, 70, 73, 76, 78, 79, 80, 81, 83, 84, 85, 86, 87, 89, 91, 92, 94, 95], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 86, 87, 88, 89, 90, 92, 94, 95, 96], "deepli": [0, 24, 30], "connect": [0, 4, 44, 94, 95], "surpris": [0, 5, 8, 12, 39, 55, 58, 60, 64, 66, 67, 71, 72, 74, 79, 85], "wai": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 16, 18, 19, 20, 24, 25, 30, 32, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 88, 91, 92, 94, 95], "accustom": [0, 85, 95], "manipul": [0, 8, 13, 14, 15, 18, 19, 20, 23, 31, 49, 55, 65, 74, 85], "data": [0, 1, 3, 8, 14, 15, 18, 20, 22, 23, 24, 26, 30, 33, 35, 36, 37, 39, 40, 42, 44, 45, 46, 47, 48, 49, 50, 51, 55, 56, 57, 58, 59, 60, 62, 65, 66, 70, 74, 77, 78, 80, 84, 85, 86, 90, 92, 93, 94, 96], "integ": [0, 1, 4, 5, 6, 7, 8, 13, 15, 16, 19, 20, 22, 28, 30, 32, 33, 34, 41, 42, 44, 45, 56, 58, 62, 64, 66, 67, 69, 74, 77, 78, 79, 80, 85, 88, 92, 95], "variant": [0, 10, 28, 29, 31, 36, 41, 44, 48, 51, 56, 63, 66, 67, 69, 73, 75, 79, 80, 85, 92], "function": [0, 1, 3, 4, 5, 6, 7, 9, 10, 11, 13, 14, 15, 19, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 36, 37, 40, 41, 43, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 74, 75, 76, 77, 78, 80, 81, 82, 83, 85, 86, 88, 89, 90, 91, 92, 94, 95, 96], "those": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13, 14, 18, 19, 20, 21, 22, 24, 25, 27, 29, 30, 32, 34, 35, 36, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 53, 55, 58, 59, 60, 63, 64, 65, 66, 67, 69, 72, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 91, 92, 94, 95], "valu": [0, 4, 5, 6, 8, 10, 11, 13, 14, 15, 16, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 55, 56, 57, 58, 59, 62, 63, 64, 66, 67, 68, 69, 72, 74, 75, 77, 78, 79, 80, 81, 84, 85, 86, 87, 88, 89, 90, 91, 92], "alwai": [0, 1, 7, 8, 10, 12, 14, 16, 17, 18, 19, 20, 30, 33, 40, 42, 45, 46, 47, 48, 49, 51, 55, 64, 69, 70, 74, 78, 79, 80, 81, 85, 88, 92, 94], "compil": [0, 1, 5, 7, 8, 9, 10, 12, 13, 16, 18, 20, 21, 23, 24, 27, 30, 31, 33, 41, 45, 47, 55, 57, 63, 64, 65, 66, 67, 68, 69, 70, 74, 77, 85, 86, 92, 94, 95, 96], "time": [0, 1, 3, 4, 7, 8, 9, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30, 33, 35, 37, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 50, 53, 54, 55, 56, 58, 59, 61, 62, 63, 64, 65, 66, 67, 69, 70, 72, 73, 74, 75, 77, 78, 79, 80, 85, 87, 88, 91, 92, 94, 95], "infer": [0, 7, 8, 11, 30, 35, 55, 63, 68, 69, 71, 74, 77, 80, 85, 92], "programm": [0, 4, 5, 7, 8, 9, 10, 12, 13, 15, 16, 17, 18, 19, 23, 24, 27, 30, 32, 35, 39, 47, 48, 55, 56, 60, 64, 65, 67, 71, 72, 74, 75, 76, 77, 79, 80, 82, 83, 84, 85, 92], "annot": [0, 8, 10, 16, 25, 31, 34, 38, 45, 47, 55, 63, 64, 66, 68, 76, 77, 80, 81, 84, 85, 94, 95], "express": [0, 1, 3, 6, 8, 9, 10, 11, 12, 13, 14, 16, 19, 20, 22, 25, 27, 28, 30, 31, 32, 34, 35, 36, 40, 41, 45, 47, 49, 52, 53, 55, 56, 58, 62, 63, 64, 65, 66, 67, 68, 69, 70, 72, 74, 77, 78, 79, 80, 81, 85, 86, 87, 88, 89, 92], "exampl": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 15, 18, 19, 20, 22, 23, 25, 26, 27, 28, 30, 32, 35, 38, 39, 40, 41, 42, 44, 46, 47, 48, 49, 51, 53, 55, 56, 57, 58, 62, 63, 64, 65, 67, 69, 73, 77, 78, 79, 81, 82, 84, 85, 86, 87, 88, 89, 93, 94, 95], "3110": [0, 2, 6, 7, 15, 28, 42, 63, 66, 67, 89, 94, 95, 96], "int": [0, 6, 7, 8, 10, 12, 13, 14, 15, 16, 18, 19, 20, 22, 25, 26, 27, 28, 30, 31, 32, 34, 35, 37, 39, 41, 42, 44, 45, 46, 47, 49, 51, 52, 53, 54, 55, 56, 58, 59, 62, 63, 64, 66, 67, 69, 76, 77, 78, 79, 80, 81, 84, 85, 87, 88, 89, 91, 92, 95], "list": [0, 1, 5, 8, 13, 14, 15, 16, 18, 20, 23, 25, 27, 28, 29, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 49, 50, 53, 54, 55, 56, 58, 59, 60, 63, 64, 65, 66, 67, 69, 76, 77, 78, 80, 81, 85, 87, 88, 89, 95], "learn": [0, 1, 4, 8, 9, 10, 11, 12, 14, 17, 19, 27, 29, 30, 33, 35, 40, 43, 46, 51, 58, 60, 64, 67, 69, 70, 71, 72, 74, 76, 77, 85, 86, 91, 92, 94], "read": [0, 1, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 21, 30, 34, 41, 45, 47, 48, 49, 55, 59, 63, 64, 65, 66, 67, 69, 72, 74, 76, 77, 84, 85, 92, 94, 96], "ha": [0, 1, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 24, 26, 27, 28, 30, 32, 33, 34, 35, 37, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 70, 71, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 88, 89, 91, 92, 94, 95], "let": [0, 1, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 25, 26, 27, 28, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 58, 59, 61, 62, 63, 66, 67, 68, 69, 72, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 87, 88, 89, 91, 92, 94, 95], "try": [0, 1, 3, 4, 7, 8, 12, 13, 14, 15, 16, 17, 19, 22, 24, 27, 35, 40, 41, 44, 45, 47, 49, 55, 63, 64, 67, 69, 76, 78, 80, 81, 85, 89, 93, 94, 95], "differ": [0, 1, 4, 6, 7, 8, 9, 10, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25, 30, 35, 37, 39, 40, 41, 42, 45, 46, 47, 48, 54, 55, 58, 60, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 74, 76, 78, 79, 80, 81, 82, 83, 85, 86, 87, 91, 92, 94, 95], "so": [0, 1, 3, 4, 5, 7, 8, 9, 10, 12, 13, 14, 16, 17, 18, 19, 20, 22, 24, 25, 26, 27, 30, 32, 33, 34, 35, 36, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 54, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 69, 72, 73, 74, 76, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 90, 92, 94, 95], "doe": [0, 1, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 25, 26, 27, 28, 30, 32, 33, 34, 35, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 52, 53, 54, 55, 57, 58, 63, 64, 65, 66, 67, 69, 70, 71, 74, 76, 77, 79, 80, 81, 82, 85, 87, 89, 90, 91, 92, 93, 94, 95], "think": [0, 1, 4, 5, 7, 8, 9, 12, 13, 14, 17, 18, 19, 20, 23, 24, 25, 28, 30, 32, 41, 42, 44, 45, 47, 48, 49, 51, 53, 55, 56, 58, 62, 63, 64, 65, 66, 67, 72, 76, 77, 80, 82, 83, 84, 85, 86, 90, 92, 94, 95], "set": [0, 1, 2, 9, 13, 14, 15, 18, 25, 28, 30, 33, 34, 35, 41, 42, 43, 44, 45, 47, 50, 52, 56, 64, 66, 67, 69, 70, 78, 80, 81, 83, 84, 85, 86, 92], "empti": [0, 5, 13, 14, 15, 18, 20, 22, 25, 27, 28, 30, 32, 33, 37, 40, 41, 42, 44, 45, 46, 47, 48, 49, 53, 55, 58, 62, 63, 64, 66, 69, 72, 76, 77, 78, 79, 80, 81, 85, 89, 91, 92], "likewis": [0, 1, 5, 7, 8, 19, 22, 30, 45, 64, 69, 77, 79, 80, 84], "inhabit": 0, "There": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 13, 14, 18, 19, 21, 22, 24, 25, 26, 27, 28, 30, 32, 33, 35, 39, 40, 41, 42, 44, 45, 46, 47, 48, 51, 53, 56, 58, 62, 63, 64, 66, 67, 69, 71, 74, 76, 77, 78, 79, 80, 84, 85, 86, 87, 92, 95, 96], "actual": [0, 1, 7, 8, 10, 12, 13, 14, 16, 17, 18, 20, 21, 22, 24, 25, 26, 27, 30, 32, 33, 34, 35, 36, 40, 41, 42, 44, 47, 48, 49, 52, 55, 56, 58, 62, 64, 65, 66, 67, 69, 76, 77, 79, 80, 81, 85, 86, 87, 91, 92, 94, 95], "though": [0, 2, 5, 7, 8, 9, 10, 12, 14, 19, 21, 22, 24, 25, 27, 30, 31, 35, 37, 39, 40, 42, 45, 46, 47, 48, 49, 56, 63, 64, 65, 66, 67, 69, 75, 77, 79, 80, 81, 84, 85, 90, 92, 95], "ve": [0, 4, 5, 7, 8, 9, 11, 13, 14, 17, 18, 19, 20, 22, 25, 27, 30, 33, 34, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 55, 56, 58, 59, 62, 63, 64, 66, 67, 68, 69, 72, 76, 77, 79, 80, 81, 83, 84, 85, 90, 91, 92, 94, 95], "never": [0, 1, 5, 7, 8, 10, 13, 14, 18, 19, 24, 25, 27, 30, 40, 41, 42, 44, 45, 46, 47, 49, 51, 54, 62, 64, 65, 67, 69, 71, 76, 77, 78, 79, 85, 90, 92, 95], "had": [0, 1, 7, 12, 14, 17, 25, 33, 40, 41, 44, 45, 46, 47, 51, 55, 57, 64, 67, 70, 71, 74, 77, 78, 79, 80, 81, 85, 87, 92, 94], "reason": [0, 1, 3, 7, 8, 10, 14, 18, 21, 22, 23, 24, 30, 33, 40, 42, 45, 47, 49, 58, 60, 62, 64, 66, 67, 74, 76, 77, 80, 81, 82, 85, 86, 90, 91, 92, 93, 94, 95], "mention": [0, 18, 25, 41, 44, 58, 67, 77, 81, 83, 92], "befor": [0, 1, 4, 5, 7, 8, 9, 10, 12, 13, 16, 18, 19, 20, 22, 24, 25, 27, 28, 29, 33, 34, 35, 37, 40, 41, 44, 45, 46, 47, 48, 49, 51, 55, 58, 63, 64, 65, 67, 71, 74, 76, 77, 78, 79, 80, 85, 90, 92, 93, 95], "defin": [0, 1, 6, 7, 8, 9, 12, 14, 15, 16, 18, 19, 22, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 37, 39, 40, 41, 42, 44, 45, 47, 52, 53, 55, 56, 58, 62, 63, 64, 65, 66, 69, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 89, 92], "constructor": [0, 22, 25, 27, 28, 30, 31, 32, 35, 36, 39, 41, 42, 48, 49, 51, 55, 63, 65, 66, 67, 69, 80, 83, 85, 88, 92], "could": [0, 1, 3, 4, 5, 7, 8, 9, 10, 13, 14, 15, 16, 18, 19, 20, 24, 25, 28, 30, 33, 35, 38, 40, 41, 42, 45, 46, 47, 48, 49, 51, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 68, 72, 73, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 87, 90, 92, 94, 95], "anyth": [0, 4, 8, 10, 12, 16, 21, 25, 30, 32, 33, 41, 45, 47, 62, 64, 67, 77, 95], "want": [0, 1, 2, 3, 4, 7, 8, 9, 10, 12, 13, 16, 17, 18, 19, 20, 22, 25, 27, 30, 32, 33, 35, 36, 41, 42, 44, 45, 46, 47, 49, 51, 52, 54, 55, 58, 59, 62, 63, 64, 65, 66, 67, 69, 71, 77, 78, 79, 80, 81, 85, 87, 92, 94, 95], "special": [0, 3, 5, 7, 10, 20, 29, 30, 34, 41, 47, 62, 64, 65, 66, 77, 78, 80, 85], "syntax": [0, 3, 7, 8, 9, 10, 11, 12, 22, 23, 27, 28, 32, 34, 35, 36, 39, 42, 45, 47, 49, 58, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 79, 84, 85, 88, 91, 95], "just": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 18, 19, 20, 22, 24, 25, 26, 27, 28, 30, 33, 34, 35, 39, 40, 41, 42, 45, 46, 47, 48, 49, 51, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 72, 74, 76, 77, 78, 79, 80, 81, 82, 83, 85, 86, 92, 94, 95], "write": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 28, 30, 31, 32, 33, 35, 37, 39, 41, 42, 44, 45, 47, 48, 49, 50, 51, 52, 53, 55, 56, 57, 58, 60, 62, 63, 64, 66, 67, 69, 72, 74, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 89, 91, 92, 94], "note": [0, 1, 3, 5, 6, 7, 8, 9, 12, 14, 15, 16, 18, 19, 20, 26, 27, 28, 30, 35, 41, 42, 46, 47, 48, 49, 51, 54, 59, 62, 63, 64, 66, 67, 69, 70, 76, 77, 78, 79, 80, 84, 85, 87, 91, 92, 94, 95, 96], "might": [0, 1, 3, 4, 5, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 22, 24, 25, 27, 29, 30, 31, 32, 33, 36, 38, 39, 40, 41, 42, 45, 46, 47, 48, 49, 55, 56, 57, 58, 59, 60, 62, 64, 65, 66, 67, 68, 69, 72, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 89, 90, 92, 94, 95], "give": [0, 1, 3, 8, 9, 10, 13, 16, 17, 24, 25, 28, 30, 33, 38, 40, 41, 47, 48, 55, 58, 64, 67, 72, 74, 76, 77, 78, 79, 82, 84, 89, 92, 95], "editor": [0, 3, 4, 16, 33, 47, 94, 95], "troubl": [0, 8, 12, 40, 64, 84, 95], "need": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 30, 31, 33, 34, 35, 36, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 55, 56, 57, 58, 62, 63, 64, 65, 66, 67, 69, 71, 74, 76, 77, 78, 79, 80, 81, 82, 84, 85, 92, 94, 95], "put": [0, 1, 3, 7, 8, 10, 12, 33, 41, 42, 45, 47, 55, 58, 64, 66, 69, 73, 75, 76, 78, 79, 85, 87, 90, 92, 95], "doubl": [0, 1, 3, 5, 6, 7, 10, 12, 18, 20, 30, 40, 41, 42, 48, 53, 56, 63], "semicolon": [0, 3, 12, 45, 65, 92, 95], "after": [0, 4, 5, 7, 8, 10, 16, 19, 20, 27, 28, 29, 30, 33, 35, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 55, 57, 61, 62, 65, 66, 67, 68, 69, 70, 71, 72, 76, 78, 79, 85, 88, 92, 94, 95], "get": [0, 1, 3, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 27, 28, 30, 33, 34, 35, 40, 41, 42, 45, 46, 47, 48, 49, 51, 55, 58, 59, 61, 63, 64, 66, 67, 69, 71, 74, 77, 78, 79, 80, 81, 83, 85, 86, 87, 88, 89, 92, 95], "format": [0, 3, 5, 9, 10, 15, 19, 24, 30, 66, 75, 77, 78, 84, 94], "right": [0, 1, 3, 7, 8, 9, 10, 12, 17, 18, 19, 20, 22, 25, 26, 27, 28, 30, 32, 34, 35, 37, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 58, 59, 62, 63, 64, 65, 66, 67, 72, 77, 78, 79, 80, 81, 85, 87, 89, 92, 94, 95], "exactli": [0, 4, 7, 8, 13, 18, 20, 25, 27, 28, 30, 35, 37, 40, 41, 42, 45, 47, 48, 55, 57, 63, 66, 67, 69, 76, 77, 78, 80, 85, 86, 87, 95], "becaus": [0, 1, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 35, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 55, 56, 58, 62, 63, 64, 65, 66, 67, 69, 72, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 91, 92, 94, 95], "under": [0, 5, 7, 8, 10, 15, 19, 20, 34, 42, 47, 55, 58, 64, 95, 96], "new": [0, 1, 2, 3, 7, 8, 9, 13, 14, 15, 17, 18, 20, 21, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 53, 55, 56, 58, 60, 62, 63, 64, 65, 67, 69, 70, 71, 72, 74, 75, 77, 78, 79, 80, 81, 83, 85, 86, 87, 88, 90, 91, 92, 93, 95], "about": [0, 1, 2, 4, 5, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 27, 28, 29, 30, 32, 33, 34, 35, 40, 41, 42, 43, 45, 47, 48, 49, 51, 53, 55, 56, 57, 58, 59, 61, 62, 64, 65, 66, 67, 69, 70, 71, 72, 74, 75, 76, 77, 78, 79, 80, 82, 83, 84, 85, 86, 90, 92, 93, 95, 96], "transform": [0, 8, 12, 19, 30, 33, 42, 45, 47, 48, 53, 55, 56, 58, 65, 66, 67], "alreadi": [0, 1, 2, 3, 4, 5, 8, 9, 12, 14, 18, 19, 25, 26, 27, 28, 30, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 52, 55, 58, 62, 64, 67, 69, 72, 76, 77, 78, 79, 80, 85, 87, 90, 91, 92, 94, 95], "follow": [0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 13, 14, 16, 18, 19, 20, 22, 24, 25, 27, 28, 30, 31, 33, 34, 35, 38, 39, 40, 41, 42, 45, 46, 47, 48, 49, 53, 56, 58, 62, 63, 64, 65, 66, 67, 70, 76, 77, 78, 79, 80, 81, 83, 85, 87, 88, 89, 91, 92, 94, 95], "destruct": [0, 62, 74, 79, 91], "pair": [0, 4, 13, 14, 15, 18, 19, 23, 24, 25, 26, 27, 28, 31, 34, 35, 36, 42, 45, 46, 52, 53, 56, 62, 63, 67, 76, 77, 78, 79, 80], "x": [0, 4, 6, 7, 8, 10, 12, 13, 14, 15, 16, 18, 19, 20, 22, 25, 27, 28, 30, 33, 34, 35, 37, 38, 39, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 58, 59, 62, 63, 64, 65, 66, 67, 69, 74, 76, 77, 78, 79, 80, 81, 84, 85, 87, 88, 89, 91, 92, 95], "y": [0, 6, 7, 8, 13, 14, 15, 16, 19, 22, 28, 33, 34, 35, 44, 45, 46, 47, 48, 52, 55, 56, 62, 63, 64, 66, 67, 74, 76, 77, 78, 80, 81, 84, 85, 87, 89, 91, 92, 95], "fst": [0, 34, 42, 52, 62, 63, 67, 79], "snd": [0, 34, 52, 62, 67, 77], "val": [0, 7, 8, 10, 12, 13, 14, 15, 16, 18, 19, 20, 22, 25, 26, 28, 30, 31, 32, 34, 35, 37, 38, 39, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 54, 55, 56, 58, 59, 64, 69, 76, 77, 78, 79, 80, 81, 84, 85, 87, 88, 89, 91, 92], "b": [0, 7, 8, 14, 15, 16, 19, 22, 23, 25, 26, 27, 28, 30, 34, 38, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 53, 55, 56, 58, 62, 63, 64, 66, 67, 69, 77, 79, 80, 81, 84, 85, 87, 89, 92], "fun": [0, 1, 3, 6, 7, 8, 10, 12, 13, 16, 17, 18, 19, 20, 22, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 37, 38, 39, 41, 42, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 58, 59, 62, 63, 64, 65, 67, 77, 79, 80, 81, 84, 85, 87, 89, 91, 92, 95], "take": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 15, 16, 17, 18, 20, 22, 24, 25, 28, 30, 32, 33, 36, 37, 40, 41, 42, 43, 44, 45, 46, 47, 49, 51, 52, 53, 55, 56, 57, 58, 59, 63, 64, 65, 66, 67, 69, 70, 71, 77, 78, 79, 80, 82, 84, 85, 86, 92, 94, 95], "back": [0, 4, 8, 11, 15, 17, 20, 22, 25, 30, 33, 35, 40, 41, 42, 45, 47, 48, 49, 55, 58, 62, 63, 64, 65, 67, 68, 69, 70, 76, 77, 79, 80, 85, 92, 95], "That": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 17, 18, 19, 20, 22, 23, 24, 25, 27, 30, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 45, 46, 47, 48, 49, 51, 53, 55, 58, 62, 64, 65, 66, 67, 69, 72, 74, 76, 77, 78, 79, 80, 81, 83, 85, 86, 87, 88, 92, 95], "latter": [0, 1, 6, 7, 8, 14, 18, 23, 24, 30, 40, 45, 47, 51, 58, 66, 69, 77, 84, 87, 94], "piec": [0, 3, 4, 7, 9, 12, 17, 18, 19, 20, 22, 23, 24, 25, 27, 30, 33, 35, 42, 49, 61, 64, 65, 66, 67, 79, 82, 83], "individu": [0, 4, 7, 18, 20, 25, 33, 34, 39, 40, 46, 55, 56, 64, 66, 67, 79, 94], "similarli": [0, 8, 14, 16, 18, 31, 42, 45, 47, 49, 56, 64, 66, 67, 79, 80, 85, 92], "extract": [0, 5, 28, 30, 32, 41, 45, 47, 49, 79, 80], "from": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 47, 49, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 91, 92, 93, 94, 95], "thu": [0, 5, 7, 8, 13, 14, 19, 22, 25, 30, 32, 33, 35, 39, 40, 41, 42, 44, 45, 47, 48, 51, 55, 58, 62, 64, 65, 66, 67, 69, 77, 79, 80, 83, 85, 87, 92, 93], "If": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 28, 30, 32, 33, 34, 35, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 55, 58, 62, 63, 64, 66, 67, 69, 71, 76, 78, 79, 80, 81, 82, 85, 86, 87, 88, 92, 94, 95], "produc": [0, 1, 3, 6, 7, 8, 12, 13, 18, 19, 20, 23, 25, 27, 30, 32, 33, 34, 35, 39, 41, 42, 45, 46, 47, 49, 53, 58, 59, 62, 63, 64, 65, 66, 67, 69, 74, 78, 79, 80, 83, 87, 89, 92, 94], "In": [0, 1, 3, 4, 5, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 27, 29, 30, 32, 33, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 53, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 90, 91, 92, 94, 95], "discret": [0, 17, 23, 66, 68, 69, 82, 94], "mathemat": [0, 1, 4, 5, 7, 8, 9, 16, 17, 18, 19, 22, 23, 24, 30, 31, 42, 45, 49, 53, 58, 62, 64, 66, 67, 68, 69, 73, 74, 76, 94], "class": [0, 1, 4, 8, 10, 13, 23, 30, 45, 47, 64, 66, 71, 72, 74, 75, 76, 77, 79, 80, 81, 82, 83, 86, 92], "order": [0, 1, 8, 13, 15, 19, 20, 27, 28, 30, 34, 35, 36, 37, 41, 42, 45, 47, 48, 49, 51, 52, 53, 55, 58, 59, 60, 63, 64, 65, 66, 77, 78, 79, 80, 81, 82, 85, 91, 92, 94], "statement": [0, 1, 4, 7, 10, 40, 45, 47, 72, 78, 81, 85], "hold": [0, 7, 14, 16, 18, 19, 20, 30, 34, 35, 40, 41, 42, 45, 47, 64, 67, 69, 78, 82, 85, 92], "each": [0, 1, 3, 6, 7, 8, 10, 13, 14, 15, 18, 19, 20, 22, 24, 25, 28, 30, 33, 35, 36, 37, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 55, 56, 58, 60, 63, 64, 65, 66, 67, 69, 77, 78, 79, 80, 81, 82, 85, 86, 87, 88, 89, 92, 94, 95], "conjunct": [0, 7, 15, 19, 88], "must": [0, 1, 4, 5, 6, 7, 8, 10, 12, 13, 14, 16, 18, 19, 21, 22, 24, 25, 27, 28, 30, 34, 35, 39, 40, 41, 42, 45, 46, 47, 48, 49, 53, 62, 64, 65, 66, 67, 69, 76, 79, 80, 81, 82, 84, 85, 91, 92, 95], "well": [0, 1, 4, 5, 7, 8, 9, 13, 15, 16, 18, 19, 20, 21, 23, 24, 30, 41, 42, 45, 46, 47, 49, 51, 55, 58, 63, 64, 66, 67, 68, 69, 71, 73, 74, 77, 78, 79, 80, 81, 82, 85, 92, 94, 95], "conclud": [0, 8, 14, 19, 34, 40, 64], "pattern": [0, 13, 20, 22, 25, 28, 29, 32, 35, 36, 37, 40, 41, 45, 48, 49, 50, 51, 52, 55, 56, 57, 58, 63, 64, 65, 67, 69, 71, 74, 77, 79], "denot": [0, 8, 25, 49, 62, 66, 67, 85], "implic": [0, 13, 15, 42, 95], "form": [0, 3, 6, 8, 9, 13, 14, 15, 18, 19, 21, 23, 25, 27, 30, 34, 35, 39, 42, 45, 46, 48, 53, 59, 60, 63, 64, 67, 68, 69, 78, 80, 82, 83, 85, 94, 96], "thei": [0, 1, 2, 3, 5, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 70, 73, 74, 76, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 90, 92, 94, 95, 96], "anoth": [0, 1, 2, 5, 7, 8, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 28, 30, 33, 35, 38, 40, 41, 42, 45, 46, 47, 48, 49, 52, 53, 56, 58, 59, 64, 66, 67, 70, 73, 76, 77, 79, 80, 81, 83, 85, 92, 94, 95], "notic": [0, 6, 8, 18, 20, 25, 27, 30, 33, 37, 40, 44, 45, 47, 48, 49, 55, 58, 64, 65, 76, 77, 78, 80, 84, 85], "how": [0, 1, 3, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 27, 28, 30, 31, 32, 33, 34, 35, 37, 39, 41, 42, 43, 44, 45, 46, 47, 48, 51, 52, 53, 54, 55, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 72, 74, 75, 76, 77, 78, 79, 81, 82, 84, 85, 87, 92, 94, 95], "given": [0, 6, 7, 8, 9, 12, 13, 14, 18, 20, 21, 26, 27, 28, 30, 32, 33, 34, 35, 39, 42, 44, 47, 48, 53, 56, 64, 67, 78, 80, 83, 84, 86, 91, 92, 95], "same": [0, 1, 3, 4, 5, 7, 8, 10, 11, 12, 14, 15, 16, 18, 19, 20, 22, 25, 26, 27, 28, 30, 34, 35, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 54, 55, 56, 58, 59, 62, 64, 65, 66, 67, 68, 69, 70, 74, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 91, 92, 94, 95], "fact": [0, 1, 4, 6, 7, 8, 13, 14, 16, 17, 19, 20, 22, 24, 25, 30, 33, 34, 40, 45, 47, 48, 49, 53, 58, 59, 62, 63, 64, 67, 72, 77, 79, 80, 81, 83, 84, 85, 90, 91, 92], "close": [0, 2, 6, 15, 18, 19, 20, 21, 32, 33, 40, 41, 42, 48, 55, 59, 66, 70, 81, 85, 94, 95], "look": [0, 4, 7, 9, 10, 12, 13, 14, 15, 16, 18, 19, 20, 22, 26, 30, 33, 35, 40, 41, 42, 43, 44, 45, 46, 47, 49, 55, 58, 62, 64, 65, 66, 67, 69, 77, 78, 79, 80, 81, 82, 85, 91, 92, 94, 95], "compar": [0, 1, 6, 8, 9, 18, 19, 20, 22, 24, 28, 37, 41, 42, 44, 45, 47, 48, 51, 53, 59, 63, 64, 78, 79, 80, 81, 83, 84, 85, 92], "describ": [0, 2, 3, 5, 7, 8, 14, 16, 18, 19, 21, 41, 42, 47, 66, 68, 76, 78, 83, 87, 95], "valid": [0, 4, 6, 14, 16, 18, 19, 23, 28, 34, 44, 53, 66, 73, 85], "replac": [0, 1, 7, 8, 19, 33, 42, 45, 48, 51, 53, 55, 64, 65, 66, 67, 69, 74, 77, 81, 84, 92], "ident": [0, 7, 8, 14, 18, 19, 23, 41, 45, 50, 51, 55, 64, 67, 80, 81, 92], "discov": [0, 4, 9, 15, 16, 19, 24, 33, 45, 49, 54, 55, 58, 64, 67, 85, 95], "accid": [0, 8, 30, 45, 47, 54], "occur": [0, 4, 5, 6, 7, 8, 12, 15, 17, 18, 22, 30, 37, 39, 40, 41, 42, 45, 46, 47, 48, 58, 62, 63, 64, 65, 66, 67, 69, 74, 78, 79, 81, 85, 92, 95], "three": [0, 1, 4, 5, 6, 7, 8, 13, 17, 18, 19, 20, 24, 27, 28, 30, 31, 33, 35, 40, 41, 42, 45, 46, 47, 51, 53, 55, 56, 63, 65, 66, 67, 78, 79, 88, 94, 95], "specif": [0, 4, 8, 13, 15, 17, 18, 20, 23, 24, 27, 28, 30, 33, 41, 44, 45, 47, 48, 49, 58, 65, 70, 71, 76, 77, 78, 80, 81, 82, 85, 86, 95], "rather": [0, 1, 2, 3, 4, 5, 7, 8, 9, 12, 15, 18, 19, 22, 24, 25, 27, 30, 33, 35, 36, 40, 42, 44, 45, 47, 49, 55, 58, 59, 61, 63, 64, 66, 67, 69, 70, 76, 77, 78, 80, 81, 82, 84, 85, 86, 87, 91, 92, 95], "deep": [0, 8, 10, 49, 50], "phenomenon": [0, 7, 48, 64], "link": [0, 3, 13, 23, 25, 30, 33, 35, 36, 42, 46, 49, 58, 79, 85, 95], "field": [0, 20, 28, 35, 36, 41, 45, 47, 65, 71, 77, 78, 79, 81, 89, 92, 93], "aspect": [0, 8, 9, 18, 46, 86], "been": [0, 1, 3, 5, 7, 8, 9, 12, 13, 14, 16, 17, 18, 19, 20, 24, 25, 34, 39, 40, 42, 44, 45, 46, 47, 48, 49, 50, 54, 57, 58, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 76, 77, 78, 80, 81, 83, 85, 87, 92, 94, 95], "mani": [0, 1, 3, 4, 8, 9, 10, 13, 14, 15, 16, 18, 20, 21, 23, 24, 25, 27, 28, 29, 30, 33, 35, 36, 40, 41, 42, 44, 45, 47, 49, 53, 54, 55, 56, 58, 63, 64, 65, 66, 67, 69, 70, 73, 74, 76, 79, 80, 82, 83, 85, 86, 88, 89, 90, 92, 94, 95], "peopl": [0, 1, 6, 16, 21, 24, 33, 52, 58, 64, 67], "work": [0, 1, 3, 4, 5, 6, 7, 8, 9, 13, 14, 15, 16, 18, 19, 20, 22, 23, 24, 25, 28, 30, 32, 33, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 55, 56, 58, 63, 64, 65, 67, 70, 73, 74, 76, 77, 78, 80, 81, 82, 83, 84, 85, 87, 92, 95, 96], "area": [0, 6, 25, 56, 64, 80], "goe": [0, 7, 8, 21, 25, 33, 40, 41, 42, 45, 47, 55, 65, 74, 76, 82], "name": [0, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 16, 18, 19, 20, 23, 25, 26, 27, 28, 30, 33, 34, 35, 37, 38, 39, 41, 42, 44, 45, 47, 52, 54, 55, 56, 58, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 76, 77, 78, 79, 80, 81, 83, 84, 85, 87, 89, 91, 95], "One": [0, 1, 7, 8, 9, 12, 13, 16, 17, 20, 21, 22, 24, 25, 26, 27, 28, 35, 40, 41, 42, 44, 45, 47, 48, 51, 55, 58, 63, 64, 66, 67, 76, 77, 79, 81, 82, 84, 85, 86, 87, 90, 92, 94], "common": [0, 1, 4, 9, 10, 12, 13, 16, 19, 21, 23, 24, 27, 28, 30, 42, 44, 48, 55, 58, 65, 72, 74, 77, 78, 81, 83, 85, 95, 96], "logician": [0, 52], "haskel": [0, 23, 30, 32, 33, 45, 47, 49, 52, 67, 71, 73, 74], "whom": 0, "william": 0, "idea": [0, 1, 4, 5, 6, 8, 9, 10, 11, 13, 14, 17, 18, 22, 24, 25, 40, 41, 42, 44, 45, 46, 47, 49, 54, 55, 56, 58, 59, 60, 62, 64, 66, 67, 69, 70, 72, 73, 77, 78, 79, 80, 81, 82, 84, 85, 86, 92, 94], "aka": [0, 3, 7, 13, 14, 15, 20, 29, 47, 49, 51, 66, 68, 69, 78, 79, 83, 87, 95], "seen": [0, 1, 8, 10, 11, 18, 19, 22, 25, 39, 41, 42, 44, 45, 46, 47, 48, 51, 52, 55, 56, 58, 62, 64, 67, 77, 79, 80, 84, 85, 86, 90, 91, 92], "first": [0, 1, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 16, 18, 19, 20, 21, 22, 24, 25, 27, 28, 30, 33, 34, 35, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 53, 55, 56, 58, 59, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 89, 91, 92, 94, 95], "themselv": [0, 7, 42, 49, 62, 67, 79, 85, 88, 92], "done": [0, 2, 3, 5, 7, 8, 9, 13, 17, 18, 30, 33, 40, 41, 42, 45, 46, 47, 48, 49, 51, 55, 60, 63, 64, 65, 73, 76, 78, 82, 84, 88, 95], "involv": [0, 2, 4, 8, 14, 19, 21, 22, 24, 25, 30, 33, 35, 41, 42, 45, 48, 62, 63, 64, 65, 74, 80, 82, 85, 87, 92, 95], "haven": [0, 7, 10, 25, 30, 39, 49, 64, 67, 77, 82], "third": [0, 1, 4, 8, 16, 17, 19, 23, 28, 30, 47, 52, 55, 56, 63, 64, 66, 67, 77, 81, 92, 94, 95], "yet": [0, 1, 7, 8, 12, 13, 14, 17, 18, 25, 30, 34, 39, 41, 47, 53, 58, 63, 64, 67, 81, 83, 85, 87, 92], "later": [0, 4, 7, 8, 14, 16, 22, 25, 26, 27, 29, 30, 33, 35, 39, 40, 45, 46, 47, 48, 49, 57, 58, 62, 64, 65, 66, 67, 70, 73, 79, 85, 88, 92, 95], "dig": [0, 94], "appreci": [0, 42, 45, 55, 72, 75, 86, 94, 95], "them": [0, 1, 2, 3, 4, 5, 7, 8, 9, 12, 13, 14, 15, 16, 18, 19, 20, 21, 24, 25, 27, 28, 30, 33, 35, 36, 39, 40, 41, 42, 44, 45, 47, 48, 49, 51, 52, 53, 55, 56, 57, 58, 62, 63, 64, 65, 66, 67, 69, 71, 72, 74, 76, 79, 80, 81, 82, 83, 84, 86, 90, 92, 94, 95], "more": [0, 1, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 30, 32, 33, 35, 36, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 53, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 74, 77, 78, 79, 80, 82, 84, 85, 86, 89, 90, 92, 94, 95], "fulli": [0, 24, 65], "creat": [0, 2, 6, 8, 12, 13, 14, 15, 18, 19, 20, 22, 27, 28, 30, 32, 33, 36, 41, 42, 44, 45, 46, 47, 48, 49, 54, 56, 58, 64, 66, 76, 77, 78, 79, 80, 81, 85, 87, 88, 89, 90, 92, 96], "atom": [0, 1, 15], "negat": [0, 15, 45, 65, 92], "disjunct": [0, 7, 15], "bnf": [0, 63, 66, 67, 68], "p": [0, 6, 13, 15, 19, 22, 25, 27, 28, 30, 34, 41, 47, 51, 53, 54, 55, 56, 58, 63, 64, 78, 80, 91, 92, 96], "identifi": [0, 1, 5, 7, 8, 11, 12, 13, 21, 30, 34, 35, 39, 63, 64, 65, 66, 67, 69, 85], "rain": [0, 15], "snow": [0, 15], "cold": [0, 15, 74], "state": [0, 5, 8, 15, 16, 19, 20, 21, 22, 23, 32, 45, 47, 48, 56, 62, 64, 67, 74, 75, 78], "simultan": [0, 15, 47, 77], "weather": [0, 15], "condit": [0, 5, 7, 15, 16, 18, 19, 23, 47, 48, 50, 67, 69], "known": [0, 4, 7, 8, 10, 13, 15, 16, 19, 21, 22, 24, 26, 35, 41, 42, 47, 57, 64, 66, 67, 69, 70, 74, 79, 81, 82, 85], "ithac": [0, 15], "world": [0, 1, 3, 6, 10, 11, 25, 36, 40, 41, 42, 45, 50, 60, 64, 68, 75, 81, 82, 84, 86, 87, 92, 93, 94], "distinguish": [0, 7, 8, 13, 18, 39, 40, 47, 66, 80], "written": [0, 1, 5, 6, 7, 8, 9, 10, 13, 16, 17, 18, 21, 23, 30, 33, 35, 42, 45, 46, 47, 48, 51, 52, 53, 56, 64, 66, 67, 69, 72, 73, 75, 76, 77, 78, 79, 80, 82, 85, 89, 92, 94], "fals": [0, 6, 7, 14, 20, 25, 28, 30, 31, 37, 41, 47, 48, 53, 54, 55, 62, 63, 66, 67, 76, 77, 79, 80, 85, 88, 92], "respect": [0, 10, 16, 30, 41, 44, 66, 70, 79, 82], "togeth": [0, 1, 8, 9, 10, 18, 22, 41, 42, 45, 46, 47, 53, 59, 64, 65, 66, 69, 72, 73, 80, 82, 83, 86, 87, 95, 96], "assert": [0, 4, 6, 11, 18, 19, 23, 33, 41, 45, 47, 56, 85], "product": [0, 4, 9, 16, 18, 25, 28, 35, 36, 47, 53, 65, 66, 82], "other": [0, 1, 2, 3, 4, 7, 8, 9, 10, 12, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 38, 40, 41, 42, 45, 46, 47, 48, 49, 53, 56, 57, 59, 60, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 91, 92, 94, 95], "word": [0, 1, 2, 5, 7, 8, 9, 14, 17, 19, 24, 25, 30, 35, 39, 40, 44, 45, 47, 48, 58, 65, 66, 67, 69, 70, 76, 77, 78, 79, 80, 85, 92, 95, 96], "assum": [0, 1, 6, 8, 14, 15, 19, 21, 25, 28, 34, 40, 41, 42, 44, 47, 63, 66, 67, 79, 94, 95], "sens": [0, 8, 13, 16, 17, 18, 19, 20, 22, 27, 42, 45, 49, 51, 58, 63, 64, 66, 67, 77, 82, 85, 86, 91], "even": [0, 1, 4, 5, 7, 8, 9, 10, 13, 15, 16, 17, 19, 20, 21, 24, 25, 31, 32, 33, 36, 40, 41, 42, 45, 46, 47, 48, 49, 52, 53, 54, 55, 56, 58, 62, 64, 65, 67, 70, 71, 74, 77, 78, 79, 80, 81, 82, 84, 85, 92, 95], "clearli": [0, 13, 16, 24, 42, 45, 51, 58, 86, 92], "Such": [0, 5, 14, 17, 19, 22, 25, 31, 64, 66], "exhibit": [0, 20, 78], "appli": [0, 1, 4, 6, 8, 12, 14, 15, 16, 17, 18, 19, 20, 22, 24, 27, 30, 40, 41, 44, 45, 47, 49, 51, 52, 53, 54, 55, 56, 58, 60, 62, 63, 64, 67, 77, 78, 79, 80, 81, 85, 92], "difficult": [0, 7, 16, 17, 19, 22, 24, 25, 41, 42, 47, 74, 82, 90], "concis": [0, 5, 16, 48], "either": [0, 4, 7, 8, 9, 10, 13, 18, 21, 22, 24, 25, 27, 28, 30, 31, 32, 40, 41, 45, 46, 47, 48, 53, 57, 58, 62, 64, 66, 67, 69, 70, 76, 78, 80, 81, 83, 85, 95], "strengthen": [0, 19, 41], "further": [0, 4, 13, 16, 19, 21, 22, 30, 44, 46, 47, 48, 64, 65, 67, 77, 85, 95], "specifi": [0, 4, 5, 7, 8, 10, 13, 15, 16, 20, 21, 27, 30, 42, 58, 66, 67, 69, 74, 77, 78, 80, 82, 84, 85], "why": [0, 4, 7, 8, 15, 18, 19, 24, 28, 29, 30, 33, 34, 40, 41, 42, 44, 47, 48, 49, 51, 54, 55, 58, 62, 63, 64, 67, 72, 74, 77, 78, 80, 81, 85, 91, 92], "matter": [0, 1, 7, 8, 14, 15, 16, 20, 28, 30, 40, 42, 47, 48, 49, 53, 55, 58, 62, 64, 68, 72, 79, 85, 92, 95], "suppos": [0, 4, 6, 7, 8, 10, 12, 13, 14, 16, 18, 19, 22, 25, 28, 30, 32, 33, 35, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 54, 59, 63, 64, 67, 76, 77, 78, 80, 81, 82, 87, 92], "were": [0, 4, 5, 6, 9, 10, 14, 16, 17, 19, 22, 25, 30, 33, 40, 42, 43, 45, 46, 48, 49, 56, 57, 58, 64, 65, 66, 67, 70, 72, 73, 74, 77, 78, 79, 80, 81, 84, 85, 87, 94, 95], "twin": 0, "prime": [0, 30, 41, 49, 56], "conjectur": 0, "unsolv": 0, "problem": [0, 1, 6, 8, 12, 13, 14, 16, 18, 19, 20, 21, 22, 24, 25, 27, 28, 30, 37, 40, 42, 44, 45, 47, 48, 49, 51, 53, 55, 62, 63, 64, 67, 73, 74, 77, 79, 80, 81, 82, 85, 87, 92, 94, 95], "infinit": [0, 7, 16, 19, 25, 27, 41, 43, 45, 47, 49, 50, 63, 67], "n": [0, 1, 6, 8, 10, 13, 14, 15, 16, 19, 20, 22, 25, 28, 30, 34, 35, 40, 41, 42, 44, 46, 47, 48, 49, 53, 54, 58, 59, 64, 77, 78, 79, 80, 81, 84, 85, 88, 89, 91, 92], "2": [0, 2, 4, 5, 6, 7, 8, 10, 11, 13, 14, 15, 16, 18, 19, 20, 22, 25, 28, 30, 33, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 53, 54, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 68, 75, 77, 78, 79, 80, 81, 84, 85, 86, 88, 89, 92, 95], "3": [0, 3, 4, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 22, 23, 25, 28, 30, 33, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 47, 48, 49, 53, 54, 55, 56, 57, 58, 60, 63, 64, 65, 66, 67, 76, 77, 78, 79, 81, 85, 87, 89, 91, 92], "5": [0, 1, 6, 7, 8, 10, 12, 14, 15, 22, 23, 28, 30, 35, 36, 37, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 56, 60, 63, 64, 67, 68, 69, 71, 77, 79, 81, 85, 87, 88, 91, 92, 95], "7": [0, 1, 6, 7, 8, 12, 14, 22, 30, 36, 37, 39, 40, 41, 42, 45, 46, 48, 49, 53, 63, 77, 80, 81, 85, 89, 92, 93], "tp": 0, "Then": [0, 3, 8, 15, 17, 19, 30, 33, 40, 41, 42, 44, 46, 48, 51, 55, 56, 58, 59, 63, 64, 65, 66, 67, 70, 76, 77, 78, 79, 81, 84, 87, 89, 92, 94, 95], "seem": [0, 1, 6, 7, 8, 22, 24, 25, 27, 30, 33, 42, 44, 45, 49, 55, 56, 58, 62, 67, 68, 70, 76, 77, 80, 81, 84, 85, 86, 92], "aren": [0, 1, 8, 17, 18, 26, 28, 45, 46, 55, 66, 67, 74, 77, 81, 95], "wouldn": [0, 4, 45, 72, 77, 81, 84], "figur": [0, 12, 18, 22, 42, 44, 48, 64, 65, 67, 74, 79, 80, 81], "side": [0, 3, 7, 10, 13, 14, 19, 22, 26, 30, 34, 35, 43, 44, 45, 48, 49, 62, 64, 66, 67, 73, 74, 75, 80, 81, 82, 85, 88, 90], "left": [0, 2, 7, 8, 12, 18, 19, 22, 25, 26, 27, 30, 34, 35, 37, 41, 42, 44, 45, 47, 48, 50, 51, 58, 59, 62, 63, 64, 66, 67, 77, 78, 79, 80, 85, 89, 91, 92, 95], "disproof": 0, "No": [0, 1, 16, 17, 21, 30, 42, 64, 72, 77, 78, 79], "know": [0, 1, 3, 4, 7, 8, 9, 10, 12, 13, 16, 17, 18, 19, 20, 22, 23, 27, 32, 33, 41, 42, 45, 49, 51, 52, 62, 64, 65, 66, 67, 69, 71, 72, 77, 78, 79, 80, 81, 82, 85, 91, 92, 94], "current": [0, 1, 2, 3, 8, 12, 20, 27, 30, 40, 41, 42, 44, 47, 58, 62, 67, 79, 85, 89, 92, 94, 95], "henceforth": [0, 13, 19, 47, 95], "stronger": [0, 19], "whether": [0, 1, 4, 7, 8, 9, 12, 13, 15, 16, 17, 18, 19, 20, 24, 25, 26, 27, 28, 30, 31, 33, 35, 37, 38, 39, 41, 42, 45, 47, 53, 54, 55, 56, 63, 64, 65, 66, 67, 69, 77, 78, 79, 80, 85, 92, 95], "necessarili": [0, 8, 15, 17, 24, 42, 45, 47, 48, 56, 65, 72, 78, 80, 83], "own": [0, 2, 4, 8, 9, 15, 16, 18, 20, 22, 25, 28, 33, 41, 42, 45, 52, 55, 58, 64, 66, 70, 72, 73, 78, 79, 80, 82, 85, 87, 92, 94, 95], "technic": [0, 8, 19, 45, 56, 64, 67, 77, 94], "than": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 28, 30, 32, 33, 35, 36, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 53, 54, 55, 56, 58, 59, 60, 63, 64, 65, 66, 67, 71, 72, 74, 77, 78, 79, 80, 81, 82, 85, 86, 87, 88, 90, 91, 92, 95], "classic": [0, 16, 73], "tradit": [0, 67, 69], "understood": [0, 7, 10, 18, 21, 30, 34, 40, 45, 66, 79], "requir": [0, 1, 4, 5, 6, 7, 8, 9, 12, 13, 14, 15, 18, 19, 20, 21, 22, 23, 24, 27, 32, 33, 36, 40, 41, 42, 44, 45, 46, 47, 48, 49, 55, 56, 58, 62, 63, 64, 65, 66, 67, 70, 72, 75, 76, 77, 78, 79, 80, 82, 85, 92, 94, 95], "return": [0, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 18, 19, 20, 23, 25, 26, 28, 30, 32, 33, 37, 39, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 53, 55, 56, 57, 58, 59, 63, 64, 65, 66, 67, 72, 74, 77, 78, 79, 80, 85, 86, 88, 89, 91, 92, 95], "consid": [0, 1, 4, 5, 7, 8, 13, 14, 15, 17, 18, 19, 22, 24, 27, 28, 30, 32, 35, 41, 44, 45, 46, 47, 48, 49, 53, 55, 56, 59, 63, 64, 65, 66, 67, 77, 78, 81, 83, 85], "disj": 0, "v": [0, 1, 7, 8, 15, 19, 22, 25, 26, 27, 30, 32, 34, 35, 41, 42, 44, 46, 49, 51, 62, 63, 67, 69, 77, 78, 79, 80, 88, 91, 92, 94, 95], "where": [0, 1, 3, 4, 6, 7, 8, 13, 15, 16, 17, 18, 19, 22, 24, 27, 28, 30, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 55, 62, 63, 64, 65, 66, 67, 69, 77, 78, 79, 80, 84, 85, 88, 89, 90, 92, 94, 95], "i": [0, 1, 5, 6, 8, 9, 10, 13, 14, 15, 16, 17, 19, 20, 22, 25, 27, 28, 30, 31, 32, 34, 35, 40, 41, 42, 44, 45, 46, 48, 49, 58, 59, 62, 63, 64, 66, 67, 69, 72, 73, 74, 78, 79, 82, 84, 85, 88, 89, 90, 92, 93, 95], "tag": [0, 3, 5, 25, 36, 67], "ii": [0, 28, 30, 41, 47, 85, 95], "carri": [0, 22, 27, 28, 36, 37, 41, 47, 66, 67, 82], "within": [0, 1, 6, 13, 18, 30, 39, 41, 42, 47, 65, 85, 88], "sub": [0, 8, 25, 41, 44, 55, 67, 85], "subvalu": 0, "therefor": [0, 1, 4, 7, 8, 13, 18, 19, 21, 22, 26, 40, 42, 46, 47, 48, 49, 57, 62, 64, 65, 67, 77, 79, 80, 81, 82, 83, 85, 87, 94], "union": [0, 18, 25, 30, 35, 44, 46, 67, 80], "guarante": [0, 1, 4, 5, 13, 16, 19, 21, 24, 25, 27, 30, 32, 40, 42, 46, 47, 48, 65, 67, 69, 74, 79, 80, 85, 90, 92], "simplest": [0, 14, 24, 33, 39, 42, 67, 80], "unit": [0, 1, 4, 7, 9, 17, 20, 21, 27, 28, 29, 40, 41, 42, 46, 47, 49, 53, 56, 64, 77, 78, 79, 80, 84, 86, 87, 88, 89, 91, 92, 94], "best": [0, 4, 7, 8, 10, 12, 34, 42, 44, 46, 47, 48, 51, 59, 62, 66, 83, 85, 95], "introduc": [0, 7, 13, 14, 18, 24, 30, 33, 37, 39, 41, 46, 47, 63, 64, 67, 69, 71, 73, 78, 79, 92], "earlier": [0, 4, 10, 12, 14, 22, 40, 47, 64, 69, 76, 77, 78, 79, 80, 81, 85, 95], "includ": [0, 1, 3, 7, 8, 9, 10, 13, 15, 18, 20, 21, 23, 24, 25, 28, 29, 30, 32, 35, 36, 40, 42, 44, 47, 48, 56, 58, 64, 65, 66, 67, 69, 70, 73, 77, 78, 80, 83, 85, 86, 92, 94, 95], "zero": [0, 1, 8, 13, 15, 16, 19, 22, 28, 31, 40, 41, 45, 46, 67, 78, 80, 84], "void": [0, 8, 10, 79, 92], "ll": [0, 1, 2, 3, 4, 5, 7, 8, 9, 12, 13, 14, 15, 17, 19, 20, 22, 25, 26, 27, 29, 30, 31, 33, 36, 37, 39, 40, 42, 43, 44, 46, 47, 49, 51, 55, 56, 57, 58, 59, 61, 62, 64, 65, 66, 67, 69, 71, 72, 74, 77, 79, 80, 85, 90, 92, 94, 95], "stick": [0, 7, 17, 79, 92], "subtleti": 0, "should": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13, 14, 15, 16, 18, 19, 20, 21, 22, 27, 28, 30, 33, 40, 41, 42, 45, 46, 47, 51, 53, 58, 62, 63, 64, 65, 66, 67, 69, 73, 76, 77, 78, 80, 81, 82, 85, 89, 92, 94, 95], "address": [0, 18, 42, 47, 48, 50, 55, 64, 92, 93], "nonetheless": [0, 7, 19, 47, 49, 62, 64, 67, 91, 95], "here": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 13, 14, 15, 16, 18, 19, 20, 22, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 37, 38, 39, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 54, 55, 56, 58, 60, 63, 64, 65, 66, 67, 69, 72, 76, 77, 78, 79, 80, 81, 84, 85, 89, 91, 92, 94, 95], "rec": [0, 4, 5, 8, 15, 19, 20, 22, 25, 26, 28, 30, 31, 32, 33, 37, 41, 44, 46, 48, 49, 51, 53, 54, 55, 58, 59, 63, 67, 69, 77, 78, 80, 81, 85, 91], "loop": [0, 7, 8, 12, 15, 16, 19, 27, 41, 45, 47, 49, 50, 59, 63, 65, 72, 78, 89, 93], "enter": [0, 3, 6, 7, 8, 12, 20, 40, 41, 47, 64, 65, 70, 79, 85, 87, 94, 95], "code": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 13, 15, 16, 17, 18, 20, 21, 23, 24, 25, 27, 28, 30, 31, 32, 33, 35, 37, 38, 41, 42, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 71, 72, 74, 76, 77, 78, 79, 80, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 94, 96], "utop": [0, 6, 7, 12, 20, 47, 62, 63, 64, 66, 67, 76, 78, 85, 87, 89, 95], "respons": [0, 5, 8, 12, 20, 33, 42, 47, 65, 74, 77, 78, 79, 80, 82, 85, 92, 93, 94], "e": [0, 1, 6, 7, 8, 10, 13, 14, 15, 16, 17, 19, 20, 22, 25, 27, 28, 30, 32, 33, 34, 35, 39, 41, 42, 44, 45, 46, 47, 48, 49, 56, 58, 62, 63, 64, 65, 66, 67, 69, 73, 74, 76, 77, 78, 79, 80, 82, 85, 87, 88, 92, 95], "successfulli": [0, 7, 16, 25, 35, 49, 58, 64, 82, 87, 95], "failwith": [0, 4, 18, 27, 31, 33, 41, 44, 47, 48, 49, 67, 69], "except": [0, 4, 5, 7, 8, 10, 13, 14, 16, 18, 19, 21, 22, 23, 25, 28, 29, 30, 32, 34, 36, 41, 44, 45, 46, 47, 49, 58, 62, 63, 64, 67, 69, 76, 77, 78, 80, 84, 85, 91, 92, 94], "failur": [0, 4, 7, 14, 15, 17, 20, 23, 24, 27, 28, 30, 47, 49, 69], "rais": [0, 4, 5, 6, 7, 13, 14, 18, 19, 23, 27, 28, 30, 32, 33, 34, 41, 45, 46, 47, 49, 56, 62, 63, 64, 67, 69, 76, 77, 78, 79, 80, 85, 88, 91, 92], "stdlib": [0, 7, 18, 20, 28, 33, 42, 45, 47, 49, 53, 69, 78, 79, 80, 81, 84, 85, 91, 92], "file": [0, 2, 7, 8, 9, 10, 12, 13, 20, 21, 25, 27, 30, 33, 39, 41, 45, 47, 49, 55, 66, 76, 77, 78, 79, 80, 81, 85, 87, 91, 92, 95], "line": [0, 1, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 16, 17, 22, 24, 25, 27, 28, 30, 33, 41, 44, 45, 47, 49, 51, 53, 55, 63, 64, 66, 67, 73, 77, 78, 79, 80, 81, 85, 87, 91, 92, 95], "29": [0, 28, 30, 49], "charact": [0, 5, 7, 8, 10, 12, 25, 27, 30, 33, 34, 39, 41, 42, 45, 47, 49, 51, 55, 65, 66, 67, 77, 78, 79, 80, 81, 85, 87, 91, 92], "17": [0, 8, 25, 30, 41, 42, 49, 63, 77, 80, 85, 92], "33": [0, 7, 27, 30, 42, 47, 49, 79, 80, 85, 92], "unknown": [0, 7, 8, 24, 30, 49, 64, 92], "locat": [0, 4, 7, 41, 42, 47, 49, 64, 81, 92], "stdlib__fun": [0, 7, 27, 47, 49, 80, 92], "protect": [0, 7, 21, 27, 47, 49, 77, 80, 83, 86, 92], "8": [0, 1, 6, 7, 8, 11, 25, 27, 30, 36, 40, 41, 42, 46, 47, 49, 50, 53, 56, 57, 58, 60, 63, 77, 80, 81, 86, 87, 91, 92, 93], "15": [0, 7, 8, 25, 27, 30, 41, 47, 49, 77, 80, 85, 92], "38": [0, 7, 8, 24, 27, 30, 47, 49, 80, 85, 92], "6": [0, 1, 7, 8, 14, 16, 22, 23, 27, 30, 35, 36, 37, 39, 40, 41, 42, 45, 47, 48, 49, 55, 56, 59, 60, 63, 67, 70, 77, 78, 79, 80, 81, 85, 92], "52": [0, 7, 27, 28, 30, 47, 49, 80, 92], "topev": [0, 7, 27, 47, 49, 80, 92], "load_lambda": [0, 7, 27, 47, 49, 80, 92], "toplevel": [0, 3, 6, 7, 8, 9, 18, 27, 33, 34, 47, 49, 53, 64, 77, 80, 84, 85, 91, 92, 95], "byte": [0, 1, 3, 7, 27, 42, 47, 49, 80, 92], "89": [0, 7, 27, 30, 47, 49, 80, 92], "4": [0, 1, 3, 6, 7, 8, 12, 13, 14, 19, 22, 23, 26, 27, 28, 30, 33, 36, 37, 39, 40, 41, 42, 44, 45, 47, 48, 49, 50, 54, 58, 59, 63, 64, 77, 79, 80, 81, 85, 86, 89, 92, 96], "150": [0, 7, 24, 27, 30, 47, 49, 80, 92], "again": [0, 1, 4, 5, 7, 8, 12, 13, 14, 20, 22, 24, 27, 28, 30, 35, 39, 40, 41, 42, 44, 45, 46, 47, 49, 54, 55, 58, 61, 63, 64, 66, 67, 71, 77, 78, 80, 92, 94, 95], "total": [0, 16, 19, 23, 40, 41, 44, 45, 48, 49, 53, 58, 79, 80], "rule": [0, 7, 8, 9, 16, 19, 21, 27, 30, 34, 35, 62, 63, 64, 65, 66, 67, 69, 81, 85, 92], "elimin": [0, 4, 14, 27, 32, 46, 48, 51, 56, 64, 65, 67, 69, 70, 78, 80], "did": [0, 5, 7, 8, 12, 13, 17, 18, 21, 24, 26, 27, 30, 33, 40, 42, 45, 46, 47, 49, 50, 51, 52, 53, 54, 63, 64, 66, 67, 76, 77, 78, 80, 81, 85, 87, 91, 92, 95], "start": [0, 1, 3, 4, 5, 7, 8, 10, 12, 13, 16, 18, 19, 20, 22, 24, 25, 28, 30, 33, 40, 41, 44, 45, 46, 47, 48, 49, 55, 61, 64, 66, 67, 69, 78, 81, 85, 87, 88, 89, 92, 94, 95, 96], "discuss": [0, 4, 13, 16, 18, 19, 20, 22, 30, 33, 39, 42, 43, 45, 47, 48, 49, 53, 58, 60, 66, 70, 78, 80, 83, 85], "method": [0, 4, 7, 8, 10, 19, 23, 24, 33, 40, 50, 58, 60, 74, 77, 79, 81, 82, 85, 86, 92], "continu": [0, 2, 4, 5, 10, 16, 21, 27, 33, 35, 40, 41, 44, 45, 46, 47, 48, 49, 63, 64, 67, 69, 70, 95], "trickiest": [0, 47], "syntact": [0, 7, 8, 9, 19, 27, 30, 34, 35, 36, 51, 53, 55, 63, 64, 66, 67, 69, 80, 81, 84, 85], "sugar": [0, 8, 27, 30, 35, 36, 51, 55, 63, 64, 67, 80, 81, 84], "particular": [0, 1, 4, 8, 9, 13, 20, 24, 25, 29, 30, 33, 45, 48, 49, 64, 69, 75, 76, 78, 80, 85, 87, 91, 92, 95], "lead": [0, 7, 8, 13, 14, 16, 20, 22, 25, 31, 32, 41, 42, 46, 47, 52, 58, 64, 67, 76, 81, 85, 92, 94, 95], "contradict": 0, "standard": [0, 1, 4, 5, 7, 9, 18, 20, 26, 27, 28, 29, 30, 33, 34, 37, 41, 47, 48, 49, 50, 54, 55, 58, 60, 62, 66, 69, 70, 73, 75, 76, 77, 78, 79, 80, 85, 92, 94], "understand": [0, 1, 7, 8, 9, 11, 13, 16, 17, 20, 24, 30, 33, 40, 42, 45, 46, 47, 55, 58, 61, 62, 65, 67, 72, 74, 76, 81, 82, 84, 85, 86, 94], "whose": [0, 3, 8, 13, 15, 18, 20, 21, 25, 27, 28, 30, 33, 34, 35, 41, 42, 44, 45, 46, 47, 49, 53, 54, 62, 67, 73, 77, 78, 79, 80, 85, 88, 91, 92, 95], "ongo": [0, 21, 64], "assumpt": [0, 7, 8, 15, 19, 21, 34, 40], "input": [0, 1, 5, 6, 8, 10, 12, 13, 15, 16, 18, 19, 20, 21, 23, 24, 27, 28, 30, 33, 41, 42, 44, 45, 47, 48, 49, 50, 53, 56, 57, 58, 64, 65, 66, 74, 77, 78, 79, 80, 85, 86, 89, 92], "enabl": [0, 12, 13, 18, 20, 21, 35, 41, 45, 47, 56, 57, 66, 74, 80, 81, 83, 86, 90, 92, 95], "level": [0, 3, 15, 16, 22, 45, 46, 47, 48, 61, 64, 65, 66, 70, 87, 92, 94, 95], "deeper": [0, 40, 47, 94], "everi": [0, 1, 3, 7, 8, 13, 14, 18, 21, 25, 27, 30, 32, 33, 40, 41, 42, 44, 45, 48, 49, 53, 55, 56, 59, 62, 63, 64, 66, 76, 78, 79, 81, 82, 85, 86, 87, 89, 92], "sinc": [0, 7, 8, 9, 14, 18, 19, 20, 27, 30, 40, 41, 42, 44, 45, 46, 47, 48, 49, 53, 57, 58, 62, 64, 66, 67, 69, 77, 79, 80, 84, 85, 92, 94], "checker": [0, 25, 64, 67, 68], "verifi": [0, 4, 14, 19, 24, 74], "detail": [0, 5, 8, 19, 21, 27, 30, 41, 45, 47, 61, 65, 66, 67, 76, 77, 80, 82, 83, 85, 87, 92, 95], "compel": [0, 25], "restrict": [0, 8, 9, 16, 19, 21, 30, 35, 42, 51, 64, 68, 80, 85, 92], "attent": [0, 4, 21, 42, 55, 67, 95], "equival": [0, 5, 7, 8, 10, 14, 19, 27, 32, 35, 40, 42, 47, 48, 51, 53, 58, 59, 67, 79, 80, 85, 86, 91, 92], "gave": [0, 1, 14, 45, 67, 81, 92], "variabl": [0, 1, 4, 7, 8, 10, 14, 15, 16, 30, 34, 35, 39, 47, 52, 56, 57, 62, 63, 64, 65, 66, 67, 68, 69, 72, 79, 80, 85], "whatev": [0, 1, 3, 4, 7, 8, 12, 13, 14, 25, 27, 28, 41, 47, 53, 66, 67, 69, 77, 79, 80, 85, 95], "environ": [0, 9, 57, 63, 64, 67, 68, 69, 70, 94], "env": [0, 62, 63, 64, 69, 95], "anonym": [0, 1, 11, 25, 27, 34, 45, 49, 62, 63, 64, 67, 76, 77, 80, 92], "static": [0, 7, 8, 9, 11, 25, 30, 34, 35, 39, 49, 64, 68, 69, 70, 74, 75, 83, 84, 86, 88, 91, 92], "extend": [0, 9, 25, 35, 39, 41, 62, 63, 64, 65, 69, 77, 81, 85, 86], "bind": [0, 1, 7, 8, 10, 11, 12, 25, 26, 27, 30, 34, 35, 36, 39, 40, 41, 42, 45, 46, 47, 48, 50, 58, 62, 64, 65, 66, 67, 69, 78, 79, 80, 85, 92], "e1": [0, 7, 8, 10, 19, 22, 27, 30, 34, 35, 47, 62, 63, 64, 66, 67, 69, 88, 91, 92], "e2": [0, 7, 8, 10, 19, 22, 27, 30, 34, 35, 47, 62, 63, 64, 66, 67, 69, 88, 91, 92], "applic": [0, 1, 5, 7, 11, 13, 18, 30, 34, 41, 47, 49, 51, 55, 58, 59, 62, 63, 64, 67, 68, 78, 80, 82, 92, 95], "t1": [0, 7, 8, 25, 34, 35, 39, 41, 49, 52, 64, 69, 91], "t2": [0, 7, 8, 34, 35, 39, 41, 44, 49, 52, 64, 69, 91], "tree": [0, 3, 14, 15, 28, 36, 41, 42, 43, 44, 49, 56, 63, 65, 67, 68, 70, 78, 79, 80], "draw": [0, 41, 48], "recurs": [0, 1, 4, 6, 11, 13, 14, 15, 28, 31, 36, 37, 41, 44, 46, 48, 49, 50, 51, 53, 59, 63, 67, 69, 77, 80, 84, 85, 88, 91], "rewrit": [0, 8, 10, 14, 19, 21, 25, 27, 28, 30, 44, 45, 47, 48, 51, 53, 55, 58, 62, 63, 65, 66, 67, 79, 81, 94], "leav": [0, 3, 8, 13, 14, 16, 17, 19, 30, 41, 42, 48, 64, 67, 77, 79, 84, 94], "At": [0, 7, 8, 9, 13, 33, 39, 40, 46, 54, 55, 62, 64, 66, 67, 68, 70, 72, 77, 92, 94, 95], "p1": [0, 13, 27, 30, 34, 35, 38, 63, 80], "p2": [0, 13, 27, 30, 38, 63], "whenev": [0, 7, 25, 30, 39, 40, 41, 42, 44, 45, 47, 62, 67, 79, 80], "usual": [0, 1, 3, 7, 8, 9, 12, 13, 14, 16, 19, 20, 21, 24, 27, 30, 32, 33, 35, 37, 40, 41, 42, 45, 47, 49, 55, 63, 64, 65, 67, 69, 77, 79, 80, 82, 83, 84, 85, 92, 94, 95], "premiss": 0, "abov": [0, 3, 5, 6, 7, 8, 10, 12, 13, 14, 15, 18, 19, 20, 22, 25, 27, 28, 30, 32, 33, 35, 37, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 52, 53, 55, 56, 58, 62, 63, 64, 66, 67, 76, 77, 78, 79, 80, 81, 83, 84, 85, 91, 92, 94, 95], "conclus": [0, 19], "deriv": [0, 1, 30, 51, 62, 63, 66, 76, 78, 80, 89], "swap": [0, 14, 22, 46, 55, 63], "compon": [0, 8, 9, 25, 27, 30, 34, 35, 53, 62, 63, 67, 77, 78, 80, 82, 85, 87, 89], "eras": 0, "And": [0, 1, 2, 6, 7, 8, 13, 14, 17, 19, 22, 25, 27, 30, 32, 33, 35, 36, 39, 40, 41, 44, 45, 46, 47, 48, 49, 51, 54, 55, 56, 58, 62, 64, 67, 71, 74, 77, 78, 80, 81, 84, 85, 89, 91, 92, 93], "see": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 18, 19, 20, 22, 24, 25, 27, 28, 30, 33, 35, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 55, 57, 58, 63, 64, 65, 66, 67, 69, 74, 76, 77, 78, 79, 80, 81, 85, 86, 88, 89, 92, 94, 95], "case": [0, 1, 4, 6, 7, 8, 13, 14, 16, 17, 18, 19, 21, 22, 23, 24, 27, 30, 32, 33, 34, 36, 40, 41, 42, 44, 45, 46, 47, 48, 50, 55, 56, 58, 59, 63, 64, 66, 67, 69, 76, 77, 78, 79, 80, 85, 92], "itself": [0, 5, 7, 8, 9, 12, 13, 20, 22, 24, 25, 27, 30, 32, 40, 41, 42, 45, 46, 47, 49, 51, 59, 62, 63, 65, 66, 77, 79, 80, 83, 85, 91, 92], "second": [0, 1, 3, 4, 7, 8, 12, 17, 18, 19, 20, 22, 23, 25, 27, 28, 30, 33, 34, 35, 41, 42, 45, 46, 47, 51, 52, 53, 55, 56, 60, 63, 64, 66, 67, 69, 77, 78, 79, 80, 81, 85, 92, 95], "treat": [0, 7, 16, 42, 49, 53, 54, 63, 64, 74, 76, 81, 92], "part": [0, 4, 5, 6, 7, 9, 12, 13, 14, 15, 16, 17, 18, 21, 24, 27, 28, 30, 34, 35, 36, 41, 44, 45, 47, 48, 49, 56, 58, 60, 62, 64, 65, 66, 67, 69, 73, 74, 76, 77, 79, 80, 81, 82, 83, 84, 85, 87, 92, 94, 95], "briefli": [0, 41, 85], "cours": [0, 1, 3, 4, 5, 8, 9, 11, 13, 15, 17, 18, 19, 20, 22, 23, 25, 26, 31, 33, 34, 36, 41, 42, 43, 45, 48, 49, 51, 56, 58, 59, 60, 62, 64, 65, 66, 67, 68, 69, 70, 75, 77, 78, 79, 80, 85, 87, 92, 94, 95, 96], "next": [0, 1, 4, 5, 8, 10, 13, 14, 18, 19, 20, 22, 25, 27, 33, 37, 40, 41, 42, 45, 46, 47, 48, 49, 56, 58, 61, 63, 64, 66, 67, 69, 78, 79, 81, 84, 85, 86, 90, 91, 92, 95], "bound": [0, 1, 4, 5, 7, 8, 12, 15, 22, 30, 41, 42, 44, 46, 48, 50, 58, 62, 64, 65, 66, 67, 69, 78, 79, 80, 85, 88, 89, 92], "per": [0, 13, 15, 19, 24, 28, 37, 40, 41, 80], "howev": [0, 5, 8, 16, 18, 24, 28, 41, 42, 44, 48, 55, 65, 67, 74, 79, 85, 92], "much": [0, 1, 3, 7, 8, 9, 13, 18, 20, 21, 24, 25, 26, 30, 35, 41, 43, 45, 46, 47, 49, 55, 56, 63, 64, 65, 67, 76, 79, 80, 81, 82, 83, 85, 88, 92, 94], "simpler": [0, 1, 8, 47, 63, 67, 77, 79, 81], "detour": [0, 33, 85], "through": [0, 1, 4, 6, 8, 13, 14, 15, 16, 18, 21, 23, 24, 25, 26, 28, 30, 37, 41, 42, 45, 46, 47, 53, 55, 57, 58, 59, 63, 64, 65, 66, 67, 70, 74, 78, 80, 82, 85, 89, 92, 94, 95], "directli": [0, 3, 20, 30, 41, 44, 47, 55, 62, 63, 65, 66, 67, 69, 78, 79, 87, 92, 95], "bigger": [0, 1, 9, 14, 19, 30, 42, 46, 58, 64, 66, 77, 85], "caus": [0, 3, 4, 5, 12, 13, 14, 15, 16, 20, 22, 27, 30, 33, 40, 41, 42, 45, 47, 49, 55, 58, 64, 67, 77, 80, 81, 85, 87, 88, 92], "simplifi": [0, 8, 14, 15, 19, 20, 40, 63, 64, 67, 71, 91], "final": [0, 1, 3, 4, 7, 8, 10, 14, 15, 16, 17, 20, 25, 30, 33, 34, 40, 41, 42, 45, 46, 47, 48, 49, 53, 58, 62, 64, 65, 66, 67, 69, 70, 77, 82, 92, 95], "fundament": [0, 19, 23, 45, 47, 93], "human": [0, 2, 16, 17, 18, 19, 23, 24, 30, 72, 74, 85, 90, 95], "inquiri": 0, "guid": [0, 6, 7, 15, 41, 61, 63, 75, 85, 95], "deduc": [0, 14, 18], "vs": [0, 2, 3, 22, 30, 33, 38, 40, 42, 47, 48, 53, 65, 67, 78, 80, 83, 85, 94], "train": [0, 7, 17], "variou": [0, 13, 20, 70, 88, 95], "disciplin": [0, 17], "import": [0, 1, 2, 4, 8, 9, 13, 14, 16, 17, 18, 19, 21, 23, 24, 29, 30, 33, 36, 40, 42, 43, 44, 47, 60, 64, 66, 67, 76, 80, 81, 82, 85, 86, 87, 94], "higher": [0, 1, 8, 15, 30, 49, 52, 58, 59, 60, 63, 64, 65, 66, 80, 85, 92], "educ": [0, 24, 75], "mayb": [0, 1, 2, 3, 8, 17, 19, 30, 32, 36, 40, 41, 50, 58, 59, 66, 67, 77, 79, 81, 85, 92], "mysteri": [0, 8, 33, 53, 55, 68, 72, 86], "basic": [0, 7, 23, 33, 49, 56, 65, 85], "build": [0, 1, 3, 9, 12, 24, 31, 33, 35, 36, 39, 42, 43, 46, 54, 64, 66, 74, 79, 82, 83, 87, 92, 95], "block": [0, 7, 12, 43, 45, 47, 50, 83, 85], "veri": [0, 1, 3, 8, 9, 10, 11, 15, 16, 20, 22, 24, 25, 26, 33, 36, 37, 40, 41, 42, 45, 47, 48, 51, 52, 60, 62, 63, 64, 66, 67, 75, 77, 78, 79, 80, 81, 82, 86, 93, 95], "present": [0, 12, 18, 20, 24, 27, 30, 42, 70, 80, 81, 95], "intrins": [0, 7, 59], "better": [0, 1, 9, 12, 16, 17, 19, 24, 25, 30, 32, 34, 35, 36, 41, 42, 43, 44, 45, 46, 47, 49, 54, 55, 58, 60, 62, 71, 75, 76, 77, 79, 80, 81, 86, 87, 95], "studi": [0, 1, 4, 7, 8, 9, 14, 17, 22, 24, 26, 29, 30, 33, 34, 35, 45, 47, 48, 55, 59, 65, 66, 68, 73, 75, 77, 79, 80, 83, 86, 92, 94], "solut": [0, 1, 6, 8, 10, 15, 28, 41, 42, 44, 48, 53, 58, 63, 64, 78, 80, 81, 82, 85, 87, 89, 94, 95], "avail": [0, 6, 7, 8, 9, 10, 13, 15, 20, 24, 28, 30, 33, 41, 47, 53, 63, 64, 65, 66, 75, 77, 78, 80, 81, 82, 87, 89, 94], "fall": [18, 42, 70, 76, 94, 96], "2022": [], "public": [47, 77, 81, 82, 86, 94], "releas": [3, 47, 95, 96], "cornel": [1, 42, 70, 74, 79, 94, 95, 96], "student": [1, 2, 28, 70, 75, 89, 94, 95], "few": [1, 5, 6, 7, 8, 10, 13, 14, 15, 20, 28, 43, 45, 47, 48, 49, 56, 67, 76, 78, 85, 90, 94, 95], "year": [1, 13, 17, 28, 42, 70, 75, 80, 85, 96], "inevit": [24, 76], "wider": 8, "circul": [], "reveal": [4, 8, 13, 19, 20, 21, 24, 40, 47, 68, 77, 82, 83], "improv": [1, 5, 9, 13, 16, 20, 21, 24, 41, 46, 47, 48, 55, 56, 66, 72, 77, 78, 83, 85, 92, 95], "made": [8, 14, 17, 19, 21, 40, 44, 46, 55, 77, 78, 79, 81, 85, 92, 94, 95], "happi": [0, 1, 6, 15, 25, 28, 41, 53, 63, 78, 89, 94], "add": [0, 2, 3, 4, 5, 6, 8, 10, 12, 13, 14, 15, 16, 18, 20, 25, 26, 27, 28, 30, 31, 33, 35, 39, 41, 42, 44, 45, 46, 47, 48, 52, 53, 55, 58, 59, 62, 63, 64, 66, 67, 69, 77, 78, 79, 80, 81, 85, 86, 87, 89, 94, 95], "correct": [0, 4, 6, 8, 9, 14, 15, 16, 18, 20, 21, 22, 23, 24, 28, 33, 41, 42, 45, 49, 50, 53, 55, 58, 63, 66, 67, 72, 74, 78, 79, 80, 82, 89, 92, 94], "contribut": [0, 6, 15, 28, 41, 53, 63, 78, 89, 94, 96], "github": [0, 6, 15, 28, 33, 41, 47, 53, 63, 77, 78, 80, 89, 94, 95], "its": [0, 1, 3, 4, 6, 7, 8, 9, 10, 13, 14, 15, 16, 18, 19, 20, 21, 22, 24, 25, 27, 28, 30, 33, 36, 37, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 56, 57, 58, 60, 62, 63, 64, 66, 67, 69, 70, 73, 74, 76, 77, 78, 79, 80, 81, 82, 85, 87, 88, 89, 91, 92, 93, 94, 95, 96], "q": [0, 13, 14, 40, 78, 79], "r": [0, 15, 19, 22, 25, 37, 41, 44, 47, 48, 51, 64, 80, 91, 92, 94, 95, 96], "definit": [0, 1, 3, 6, 7, 11, 12, 19, 20, 21, 22, 25, 28, 30, 33, 34, 35, 37, 39, 41, 42, 47, 49, 51, 52, 53, 55, 62, 63, 64, 66, 67, 69, 77, 78, 79, 80, 81, 83, 84, 86, 87, 92], "your": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 15, 16, 17, 18, 20, 24, 25, 28, 30, 33, 35, 36, 40, 41, 42, 45, 47, 52, 53, 58, 63, 64, 65, 66, 72, 76, 77, 78, 85, 87, 89, 93, 94, 95], "also": [0, 1, 3, 4, 5, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 30, 34, 35, 37, 40, 41, 42, 43, 44, 45, 47, 48, 55, 56, 57, 63, 64, 65, 66, 67, 68, 69, 72, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 92, 94, 95], "f": [0, 1, 6, 7, 8, 10, 14, 19, 22, 25, 30, 33, 34, 35, 41, 44, 45, 47, 49, 51, 52, 53, 55, 56, 58, 62, 63, 64, 73, 74, 76, 79, 80, 84, 85, 89, 91, 92], "1": [0, 4, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 20, 22, 23, 25, 27, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 51, 53, 54, 55, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 72, 75, 77, 78, 79, 80, 81, 84, 85, 86, 87, 88, 89, 91, 92, 95], "step": [0, 1, 3, 4, 8, 12, 19, 20, 42, 47, 48, 50, 62, 63, 65, 68, 69, 80, 95], "semant": [0, 7, 8, 9, 11, 19, 23, 30, 32, 34, 35, 36, 39, 49, 62, 63, 65, 67, 68, 69, 70, 84, 86, 88, 91, 96], "implement": [0, 1, 4, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 19, 20, 21, 23, 24, 26, 27, 29, 30, 33, 36, 37, 40, 41, 43, 44, 45, 46, 48, 49, 51, 52, 53, 54, 56, 58, 61, 63, 64, 65, 66, 68, 69, 70, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 89, 90, 91, 92, 93], "suggest": [0, 2, 4, 8, 10, 14, 15, 16, 18, 19, 24, 28, 30, 41, 42, 45, 49, 62, 65, 77, 94, 95], "perhap": [0, 1, 2, 5, 7, 12, 20, 21, 24, 47, 51, 54, 55, 62, 64, 66, 67, 76, 80, 85, 86, 92, 95], "sever": [0, 1, 7, 8, 11, 16, 18, 20, 23, 25, 33, 34, 36, 39, 41, 42, 45, 65, 67, 80, 85, 87], "probabl": [0, 1, 4, 8, 9, 10, 13, 16, 20, 24, 28, 33, 36, 42, 45, 64, 77, 79, 85, 92, 95], "still": [0, 1, 7, 8, 10, 13, 16, 19, 27, 40, 42, 45, 46, 47, 48, 49, 51, 55, 58, 63, 70, 71, 74, 76, 77, 78, 79, 80, 81, 82, 85, 92, 94, 95], "what": [1, 2, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 30, 32, 33, 35, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 51, 53, 55, 56, 57, 58, 62, 63, 64, 65, 66, 67, 69, 71, 72, 76, 77, 78, 79, 80, 81, 82, 84, 85, 89, 91, 92, 95, 96], "mean": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 15, 16, 17, 18, 19, 20, 22, 25, 30, 32, 33, 34, 40, 41, 42, 43, 44, 45, 46, 47, 48, 51, 57, 62, 64, 65, 66, 67, 69, 76, 77, 78, 79, 83, 85, 87, 89, 91, 92, 95], "professor": [1, 72], "jon": 1, "kleinberg": 1, "eva": 1, "tardo": 1, "wonder": [1, 77, 81], "explan": [1, 7], "textbook": [1, 3, 56, 70, 75, 94, 95, 96], "2006": [1, 23, 70], "appendix": 1, "summari": 1, "reinterpret": 1, "program": [1, 5, 7, 8, 9, 10, 11, 12, 13, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27, 29, 30, 33, 41, 43, 45, 47, 48, 50, 52, 54, 55, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 77, 79, 80, 83, 85, 86, 92, 93, 94], "perspect": [1, 8, 40, 44, 64, 71, 72, 74, 75, 79, 85, 95], "The": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 46, 48, 49, 51, 53, 55, 57, 58, 59, 60, 61, 62, 63, 64, 65, 68, 69, 70, 72, 75, 76, 77, 78, 79, 81, 82, 84, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 96], "ultim": [1, 13, 32, 83], "answer": [1, 6, 7, 8, 17, 18, 19, 22, 27, 28, 39, 42, 44, 46, 47, 55, 62, 63, 67, 78, 81, 85, 89, 92], "worst": [1, 40, 41, 42, 46, 48, 50, 55, 79], "run": [1, 2, 4, 7, 8, 9, 12, 13, 15, 18, 19, 20, 25, 27, 28, 30, 33, 40, 41, 42, 44, 45, 47, 48, 49, 55, 63, 64, 65, 66, 67, 69, 73, 74, 78, 79, 80, 85, 87, 91, 92, 94, 95], "size": [1, 7, 8, 13, 15, 18, 30, 36, 37, 40, 41, 42, 46, 50, 51, 53, 77, 79], "o": [1, 3, 8, 9, 14, 32, 40, 41, 42, 44, 46, 48, 49, 58, 79, 81, 85, 87, 89, 90, 93], "d": [1, 2, 6, 8, 10, 12, 13, 18, 19, 26, 27, 28, 30, 32, 33, 39, 40, 41, 45, 48, 49, 51, 55, 64, 66, 67, 70, 76, 77, 78, 79, 80, 84, 85, 92, 94, 95, 96], "constant": [1, 8, 18, 25, 26, 28, 34, 36, 40, 41, 42, 43, 46, 48, 54, 58, 59, 62, 63, 64, 65, 67, 69, 76, 77, 78, 79, 85, 88], "up": [1, 3, 4, 6, 7, 8, 9, 13, 14, 15, 19, 20, 22, 24, 25, 27, 33, 36, 40, 41, 42, 44, 45, 46, 47, 48, 49, 56, 58, 59, 62, 64, 67, 69, 72, 76, 77, 80, 85, 90, 92, 95], "naiv": [1, 44, 55, 64], "proce": [1, 4, 14, 15, 17, 19, 27, 36, 47, 55, 64, 67, 82, 95], "amount": [1, 4, 6, 17, 30, 40, 42, 45, 48, 53, 78], "instanc": [1, 18, 22, 70, 83, 92], "ineffici": [1, 14, 15, 19, 49, 59], "quickli": [1, 6, 10, 18, 41, 49, 58, 74, 94], "test": [1, 4, 6, 7, 8, 9, 12, 15, 16, 17, 19, 23, 27, 28, 29, 36, 41, 53, 54, 63, 66, 67, 72, 87, 92, 95], "fast": [1, 4, 6, 42, 46, 48, 65, 71], "processor": [1, 7, 24, 47, 65, 74], "optim": [1, 8, 11, 15, 18, 30, 42, 59, 65, 68], "slowli": [1, 4, 8, 42], "sloppili": 1, "harder": [1, 4, 30, 45, 49, 51, 64, 69, 77, 79, 84, 93], "doesn": [1, 4, 7, 8, 10, 13, 14, 15, 16, 19, 20, 24, 26, 27, 30, 31, 33, 34, 35, 38, 40, 42, 44, 45, 47, 48, 49, 55, 58, 62, 63, 64, 65, 67, 72, 76, 77, 80, 81, 85, 92, 95], "impli": [1, 18, 19, 22, 35, 42, 69, 79, 92], "larg": [1, 3, 8, 12, 13, 18, 21, 24, 28, 41, 42, 43, 45, 46, 48, 62, 73, 74, 77, 82, 83, 85], "client": [1, 4, 5, 15, 16, 18, 21, 23, 41, 42, 44, 47, 76, 77, 79, 80, 81, 82, 83, 86, 92], "afford": [1, 4, 13, 40, 71], "patient": 1, "quick": [1, 24, 42, 81, 95], "me": [1, 45], "slow": [1, 16, 18, 20, 21, 49, 65], "lesson": [1, 46, 58], "measur": [1, 40, 44], "clock": [1, 45], "metric": 1, "hardwar": [1, 41, 42, 47, 67, 92], "softwar": [1, 4, 13, 21, 23, 24, 42, 74, 80, 81, 82, 83, 95, 96], "good": [1, 5, 8, 10, 12, 13, 16, 17, 18, 20, 21, 23, 24, 30, 31, 32, 33, 34, 35, 40, 41, 42, 44, 45, 46, 47, 48, 54, 58, 63, 66, 67, 71, 72, 73, 74, 79, 80, 82, 84, 85, 90, 92, 95], "count": [1, 8, 18, 20, 41, 48, 95], "number": [1, 6, 7, 8, 13, 15, 16, 22, 23, 26, 28, 30, 35, 36, 37, 40, 41, 42, 44, 46, 47, 48, 49, 53, 54, 56, 59, 64, 65, 70, 74, 77, 78, 79, 80, 84], "taken": [1, 50, 70], "dure": [1, 7, 8, 14, 16, 18, 19, 48, 49, 63, 64, 65, 72, 76, 81, 94], "evalu": [1, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 19, 22, 24, 27, 28, 30, 34, 36, 41, 43, 44, 45, 47, 49, 50, 53, 55, 58, 61, 63, 64, 65, 68, 69, 80, 81, 85, 87, 88, 91, 92], "It": [1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 13, 14, 16, 17, 18, 19, 20, 22, 24, 25, 26, 27, 28, 30, 33, 35, 40, 41, 42, 44, 45, 47, 48, 49, 54, 55, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 89, 90, 91, 92, 94, 95], "ought": [1, 45, 58, 67, 92], "somehow": [1, 18, 20, 51, 55, 95], "repres": [1, 7, 9, 13, 14, 15, 18, 20, 22, 23, 25, 28, 32, 34, 35, 36, 37, 38, 39, 42, 44, 45, 46, 47, 49, 51, 53, 56, 62, 65, 66, 67, 69, 77, 78, 79, 80, 84, 89, 91, 92], "primit": [1, 8, 10, 30, 34, 62, 66, 67, 68, 69, 80], "comput": [1, 3, 4, 6, 7, 8, 9, 11, 13, 15, 16, 17, 19, 20, 22, 23, 24, 28, 30, 33, 35, 37, 39, 41, 42, 43, 44, 45, 47, 49, 50, 53, 55, 56, 57, 58, 59, 60, 62, 64, 65, 66, 67, 68, 70, 72, 73, 74, 78, 79, 86, 89, 92, 94, 95], "lot": [1, 4, 5, 6, 7, 8, 14, 24, 31, 33, 36, 42, 45, 56, 58, 59, 66, 74, 87], "flexibl": [1, 12, 82, 85], "choic": [1, 3, 4, 8, 14, 18, 21, 30, 40, 42, 44, 45, 47, 48, 54, 55, 62, 63, 67, 74, 79, 94, 95], "pseudocod": [1, 89], "being": [1, 4, 6, 7, 8, 11, 12, 13, 14, 15, 16, 18, 19, 20, 25, 28, 30, 32, 33, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 53, 56, 58, 59, 62, 63, 64, 65, 66, 67, 74, 76, 77, 78, 79, 80, 85, 86, 92, 94], "singl": [1, 4, 7, 8, 15, 18, 25, 28, 30, 35, 40, 41, 42, 44, 45, 47, 48, 55, 56, 61, 63, 64, 66, 74, 76, 77, 78, 79, 80, 81, 85, 91], "imper": [1, 7, 9, 10, 13, 19, 20, 23, 25, 30, 42, 43, 44, 45, 46, 47, 48, 59, 67, 71, 74, 75, 79, 92, 94], "assign": [1, 5, 7, 47, 64, 72, 85, 88, 89, 92, 93], "arrai": [1, 40, 41, 43, 44, 50, 64, 65, 89, 92, 93], "index": [1, 5, 7, 13, 16, 33, 42, 44, 46, 88, 93], "pointer": [1, 4, 7, 8, 32, 46, 49, 57, 74, 91, 93], "derefer": [1, 92, 93], "arithmet": [1, 6, 7, 8, 15, 45, 67, 78, 84, 92], "oper": [1, 2, 4, 6, 9, 10, 11, 13, 14, 15, 16, 18, 19, 20, 21, 22, 24, 25, 28, 30, 33, 35, 37, 40, 41, 42, 45, 46, 47, 48, 51, 53, 55, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 74, 76, 77, 78, 79, 80, 81, 84, 85, 88, 89, 91, 92, 95], "choos": [1, 2, 4, 7, 9, 12, 15, 20, 28, 33, 42, 47, 48, 53, 55, 56, 64, 80, 81, 83, 95], "branch": [1, 7, 8, 13, 19, 28, 30, 32, 36, 46, 48, 51, 55, 62, 63, 64, 65, 67, 69], "match": [1, 13, 14, 15, 18, 21, 22, 24, 25, 28, 29, 31, 32, 33, 35, 36, 37, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 55, 58, 62, 63, 64, 65, 66, 67, 69, 71, 74, 77, 78, 79, 80, 81, 84, 85, 86, 91, 92, 95], "realiti": [1, 8, 20, 47, 64, 74], "all": [1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24, 27, 28, 30, 32, 33, 34, 35, 36, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 55, 56, 57, 58, 59, 61, 62, 63, 64, 65, 66, 67, 69, 72, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 92, 94, 95], "realli": [1, 4, 5, 7, 8, 9, 13, 14, 16, 17, 22, 24, 25, 27, 30, 31, 35, 36, 40, 41, 45, 47, 49, 55, 56, 57, 58, 62, 64, 66, 67, 77, 80, 84, 85, 86, 87, 92, 95], "practic": [1, 16, 23, 24, 32, 42, 45, 56, 60, 64, 65, 67, 69, 72, 73, 74, 80, 82, 85, 95], "predict": [1, 13, 20, 41, 71, 89], "g": [1, 6, 7, 8, 13, 14, 16, 19, 20, 25, 27, 30, 33, 35, 39, 41, 44, 45, 46, 47, 49, 53, 56, 62, 63, 64, 65, 66, 67, 74, 76, 77, 85, 87, 92, 95], "matrix": [1, 38, 53, 89], "text": [1, 10, 47, 87, 94, 95], "document": [1, 2, 3, 4, 7, 8, 10, 11, 13, 15, 17, 19, 20, 21, 23, 24, 26, 30, 33, 38, 49, 55, 66, 68, 77, 78, 89, 92, 94], "bit": [1, 2, 7, 8, 11, 18, 30, 33, 42, 45, 47, 84, 86], "row": [1, 53], "column": [1, 53, 95], "represent": [1, 7, 8, 12, 13, 14, 15, 22, 23, 41, 46, 47, 48, 49, 51, 53, 65, 67, 68, 76, 77, 78, 79, 86, 89], "context": [1, 11, 33, 63, 66, 68, 69, 72, 85, 92], "structur": [1, 6, 7, 8, 14, 15, 18, 20, 26, 28, 30, 35, 36, 37, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 55, 56, 57, 58, 59, 60, 62, 63, 65, 66, 70, 74, 77, 78, 80, 81, 82, 83, 84, 85, 86, 90, 92, 93, 96], "element": [1, 5, 8, 13, 14, 15, 18, 19, 20, 22, 25, 28, 30, 32, 35, 37, 40, 41, 42, 46, 48, 49, 53, 54, 55, 56, 58, 59, 60, 64, 65, 76, 77, 78, 79, 80, 81, 85, 88, 91, 92], "maintain": [1, 18, 23, 45, 66, 67, 72, 74, 76, 83, 86, 95], "node": [1, 15, 22, 25, 28, 36, 37, 41, 42, 44, 46, 48, 49, 51, 63, 65, 66, 67, 78, 79, 80, 91, 92], "edg": [1, 13, 48, 49], "graph": [1, 70], "multipli": [1, 6, 8, 19, 53], "faster": [1, 19, 49, 77, 95], "arbitrari": [1, 7, 15, 16, 19, 20, 28, 30, 31, 78, 86], "exact": [1, 6, 30, 33, 41, 80, 95], "too": [1, 4, 7, 8, 12, 13, 16, 18, 20, 21, 22, 24, 30, 33, 40, 42, 45, 46, 48, 49, 55, 62, 64, 66, 67, 76, 79, 80, 81, 82, 83, 84, 85, 92, 95], "rel": [1, 4, 8, 13, 14, 16, 19, 23, 24, 40, 41, 48, 56, 73, 94], "term": [1, 4, 5, 7, 8, 9, 18, 19, 25, 30, 35, 40, 41, 45, 49, 52, 53, 55, 56, 63, 67, 74, 78, 83, 85, 92], "object": [1, 7, 8, 9, 10, 11, 23, 30, 32, 36, 41, 42, 49, 50, 57, 60, 64, 70, 72, 73, 75, 77, 80, 81, 82, 83, 85, 86, 92, 93, 94], "reli": [1, 3, 16, 23, 24, 27, 29, 30, 42, 47, 63, 67, 68, 95], "subject": 1, "notion": [1, 8, 19, 41, 45, 67, 79, 85, 86], "constitut": [1, 9, 30, 67, 82], "sort": [1, 13, 15, 20, 28, 41, 79, 80, 84, 85], "okai": [1, 10, 40, 41, 42, 92], "beat": 1, "brute": [1, 50], "forc": [1, 4, 8, 10, 16, 17, 21, 25, 27, 30, 32, 41, 42, 45, 46, 47, 49, 50, 64, 67, 81], "search": [1, 14, 15, 28, 37, 41, 42, 77, 78, 80, 94, 95], "enumer": [1, 25], "permut": 1, "version": [1, 2, 3, 5, 8, 12, 15, 16, 18, 19, 28, 30, 33, 37, 41, 44, 45, 47, 48, 52, 53, 54, 55, 56, 58, 59, 62, 63, 70, 71, 79, 81, 85, 92, 94, 95], "terribl": [1, 8, 20, 42, 92], "certainli": [1, 14, 17, 26, 45, 67], "quicksort": 1, "simpl": [1, 4, 14, 19, 20, 21, 25, 29, 33, 40, 42, 43, 44, 45, 47, 48, 54, 55, 56, 63, 64, 65, 72, 74, 79, 90, 91], "dumb": [1, 8], "nearli": [1, 6, 7, 51, 54, 62, 66], "huge": [1, 36, 42, 44, 92], "space": [1, 8, 9, 13, 18, 19, 28, 30, 33, 36, 42, 46, 49, 53, 58, 59, 66, 77, 79, 95], "exponenti": [1, 6, 15, 19, 41, 44, 48, 50, 64, 78], "less": [1, 4, 5, 8, 13, 15, 16, 18, 19, 21, 24, 29, 30, 37, 41, 42, 43, 44, 46, 48, 55, 58, 60, 64, 78, 79, 88], "polynomi": [1, 15, 50], "immedi": [1, 4, 10, 14, 18, 19, 20, 22, 27, 29, 33, 42, 45, 46, 47, 49, 55, 63, 64, 65, 95], "come": [1, 4, 5, 6, 7, 8, 9, 11, 16, 17, 21, 25, 28, 30, 33, 35, 42, 45, 47, 52, 56, 58, 62, 64, 66, 67, 69, 71, 72, 73, 77, 79, 81, 82, 83, 85, 90, 93, 95], "100": [1, 8, 13, 15, 20, 28, 30, 40, 47, 53, 67, 78], "non": [1, 8, 13, 14, 19, 20, 25, 27, 28, 30, 32, 36, 42, 44, 45, 47, 48, 50, 55, 58, 63, 66, 67, 69, 73, 79, 81, 85, 89, 91, 92], "02": [1, 74], "log": [1, 2, 33, 41, 42, 45, 46, 48, 79, 95], "adequ": [1, 13, 42], "job": [1, 2, 13, 16, 17, 21, 36, 47, 64, 65, 71, 80, 81, 82, 85], "fine": [1, 7, 18, 20, 25, 40, 45, 47, 55, 64, 77, 80, 85], "combin": [1, 15, 22, 26, 36, 41, 42, 45, 51, 53, 56, 74, 80, 86, 92], "maximum": [1, 13, 28, 32, 41, 44], "execut": [1, 3, 8, 9, 13, 16, 20, 24, 33, 41, 47, 50, 64, 65, 67, 72, 74, 88, 92, 94, 95], "isn": [1, 8, 12, 14, 16, 17, 20, 22, 26, 30, 32, 39, 48, 49, 57, 58, 62, 64, 66, 67, 72, 77, 78, 79, 80, 81, 92, 95], "perfect": [1, 41, 48], "insan": 1, "tediou": [1, 10, 16, 17, 30, 63], "author": [1, 5, 17, 45, 48, 96], "develop": [1, 4, 7, 9, 18, 21, 23, 24, 27, 30, 36, 41, 45, 47, 51, 66, 67, 70, 73, 76, 82], "insert": [1, 4, 10, 13, 15, 26, 28, 40, 41, 42, 44, 45, 46, 76, 77, 79, 91, 92], "c_1": [1, 15], "c_2": 1, "c_4": 1, "c_5": 1, "sum_": [1, 40, 41], "j": [1, 30, 46, 59, 60, 72, 89], "t_j": 1, "c_6": 1, "c_7": 1, "c_8": 1, "explain": [1, 5, 7, 8, 11, 15, 16, 17, 18, 22, 24, 28, 41, 53, 62, 63, 74, 76, 78, 79, 85, 92], "complic": [1, 8, 10, 22, 24, 32, 33, 40, 41, 45, 55, 56, 64, 67, 74, 77, 79, 80, 90, 92], "heart": [1, 11, 28, 57], "poor": [1, 5, 18, 42, 64, 81], "grad": 1, "who": [1, 5, 9, 18, 21, 24, 42, 44, 47, 54, 58, 71, 72, 81, 82, 83, 92, 94, 96], "introduct": [1, 11, 36, 50, 60, 70, 75, 86, 93, 94], "3rd": [1, 34], "edit": [1, 3, 12, 23, 47, 78, 80, 94, 95, 96], "2009": [1, 70], "cormen": 1, "leiserson": 1, "rivest": 1, "stein": 1, "tell": [1, 3, 6, 12, 13, 14, 18, 20, 28, 33, 46, 47, 64, 78, 85, 87], "precis": [1, 7, 8, 16, 19, 44, 56, 64, 69, 84, 94], "like": [1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 28, 29, 30, 31, 32, 33, 35, 39, 40, 41, 42, 45, 46, 47, 48, 49, 51, 53, 54, 55, 56, 57, 58, 62, 63, 64, 65, 66, 67, 69, 71, 72, 74, 76, 77, 78, 79, 80, 81, 82, 83, 85, 86, 87, 88, 91, 92, 93, 94, 95], "exhaust": [1, 8, 13, 25, 30, 36, 40, 65, 67], "find": [1, 3, 4, 6, 7, 8, 12, 13, 14, 15, 16, 20, 21, 22, 24, 28, 30, 33, 40, 41, 42, 44, 46, 47, 48, 53, 55, 63, 64, 67, 69, 78, 80, 91, 94, 95], "somewhat": [1, 8, 22, 28, 30, 39, 48, 59, 76, 77], "meaningless": [1, 4], "25": [1, 4, 13, 24, 30, 80, 92], "java": [1, 3, 4, 5, 7, 8, 9, 10, 12, 18, 19, 20, 23, 29, 30, 32, 33, 35, 39, 41, 42, 45, 47, 54, 57, 58, 60, 64, 65, 68, 70, 71, 72, 73, 74, 76, 77, 79, 80, 81, 82, 83, 85, 86, 89, 92, 94], "down": [1, 2, 3, 4, 6, 7, 8, 11, 16, 18, 19, 40, 45, 46, 48, 55, 57, 62, 63, 64, 74, 79, 92, 94], "risc": 1, "250": [1, 30], "ye": [1, 30, 42, 49, 81, 95], "fli": 1, "airplan": 1, "control": [1, 3, 12, 42, 45, 47, 62, 64, 95], "nuclear": 1, "reactor": 1, "care": [1, 3, 8, 10, 11, 17, 18, 19, 24, 25, 33, 34, 38, 41, 45, 47, 55, 59, 66, 67, 77, 95], "real": [1, 9, 11, 16, 18, 22, 25, 36, 40, 50, 55, 60, 63, 64, 65, 68, 74, 75, 78, 82, 86, 90, 93, 94, 95], "otherwis": [1, 2, 6, 7, 8, 13, 16, 17, 20, 26, 27, 28, 30, 34, 41, 42, 46, 47, 63, 64, 66, 67, 77, 79, 85, 88, 92, 95], "broad": 1, "similar": [1, 3, 7, 8, 9, 10, 12, 13, 14, 18, 22, 24, 25, 27, 29, 30, 33, 35, 37, 41, 42, 45, 46, 47, 51, 53, 55, 56, 58, 63, 64, 66, 67, 70, 73, 76, 77, 78, 79, 80, 81, 83, 85, 86, 88, 91, 92, 94], "perform": [1, 7, 8, 9, 18, 20, 21, 26, 30, 39, 40, 41, 42, 43, 44, 46, 47, 48, 50, 53, 58, 65, 74, 79, 95], "62": [1, 7, 30], "ignor": [1, 13, 18, 27, 28, 33, 40, 41, 42, 45, 47, 62, 65, 69, 73, 77, 79, 92, 95], "low": [1, 42, 65, 92], "factor": [1, 33, 40, 41, 42, 44, 45, 48, 50, 54, 55, 56, 58, 59, 60, 66, 67, 69, 72, 79, 81], "highest": [1, 3, 28], "tabl": [1, 6, 35, 41, 43, 44, 48, 50, 65, 68, 79, 93], "microsecond": 1, "estim": [1, 30], "univers": [1, 14, 42, 50, 56, 64, 67, 70, 72, 79, 95, 96], "10": [1, 6, 8, 13, 15, 20, 25, 27, 28, 30, 35, 36, 41, 42, 47, 49, 53, 56, 58, 63, 67, 75, 77, 78, 80, 85, 86], "sec": [1, 41], "1017": 1, "000": [1, 8, 20, 30, 58], "18": [1, 30, 47, 50, 77], "min": [1, 41], "12": [1, 6, 7, 23, 25, 28, 30, 33, 42, 45, 76, 77, 80, 85, 86], "dai": [1, 6, 25, 28, 30, 33, 35, 39, 40, 47, 62, 72, 78, 85], "hour": [1, 4, 24], "32": [1, 8, 20, 30, 42, 77, 85], "104": [1, 30], "seriou": [1, 73], "complet": [1, 5, 7, 8, 13, 16, 20, 22, 24, 28, 38, 41, 45, 47, 58, 62, 63, 64, 66, 67, 69, 76, 85, 92, 95], "domin": [1, 9], "my": [1, 40, 47, 85], "laptop": 1, "2x": 1, "bought": 1, "interest": [1, 8, 9, 10, 13, 19, 20, 27, 33, 45, 46, 47, 48, 56, 67, 85, 92], "properti": [1, 13, 15, 18, 19, 22, 28, 40, 44, 45, 49, 56, 64, 67, 69, 79, 82, 85, 91], "pseduocod": 1, "1620": 1, "assembl": [1, 45, 65, 83], "1000": [1, 20, 28, 63, 67, 78], "1000x": 1, "longer": [1, 30, 33, 42, 46, 48, 55, 64, 65, 67, 72, 76, 77, 90, 92, 95], "tune": 1, "employ": 1, "twice": [1, 19, 20, 40, 42, 47, 48, 49, 53, 56, 58, 77], "argu": [1, 16, 48], "imprecis": 1, "abstract": [1, 14, 15, 16, 19, 21, 23, 24, 33, 41, 42, 44, 45, 47, 55, 58, 60, 64, 65, 66, 67, 68, 69, 70, 72, 74, 76, 78, 80, 81, 82, 83, 84, 86, 92], "noth": [1, 7, 8, 13, 21, 22, 32, 45, 47, 49, 58, 64, 66, 67, 85, 92], "pm": [1, 41], "quantiti": [1, 19], "scienc": [1, 17, 23, 56, 73, 94], "review": [1, 4, 23, 24, 33, 55, 64], "natur": [1, 3, 5, 7, 9, 10, 20, 23, 30, 36, 39, 41, 49, 56, 64, 65, 69, 79, 82, 83], "ess": 1, "equal": [1, 6, 7, 8, 12, 13, 14, 22, 28, 30, 33, 35, 40, 41, 42, 64, 66, 67, 77, 78, 79, 80, 81, 84, 89, 93], "henc": [1, 3, 6, 12, 19, 20, 25, 27, 35, 42, 45, 47, 49, 56, 64, 77, 81, 85, 90, 92, 95], "mid": [1, 70], "0": [1, 4, 5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 20, 22, 25, 28, 30, 31, 33, 35, 37, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 54, 55, 59, 62, 63, 64, 66, 67, 76, 77, 78, 79, 80, 81, 84, 85, 87, 88, 89, 91, 92, 95, 96], "leq": [1, 20, 48, 66, 67, 69], "pose": 1, "question": [1, 14, 16, 27, 46, 54, 62, 67, 85], "honest": [1, 17, 62, 67], "interpret": [1, 9, 12, 17, 22, 57, 61, 62, 63, 64, 66, 68, 69, 70, 92], "yield": [1, 7, 14, 15, 19, 30, 34, 53, 55, 58, 64, 67, 89], "proper": [1, 42, 48], "subset": [1, 13, 28, 67, 85, 90], "subseteq": 1, "tight": 1, "former": [1, 8, 30, 41, 45, 47, 69, 85, 87], "relat": [1, 16, 19, 29, 30, 47, 55, 62, 63, 64, 68, 69, 77, 83, 85, 86], "fewest": 1, "wherea": [1, 4, 6, 7, 8, 22, 24, 30, 35, 37, 49, 51, 55, 56, 67, 74, 76, 79, 80, 81, 85, 87, 92], "loos": [1, 21, 29], "needlessli": [1, 5], "concret": [1, 18, 19, 23, 33, 45, 47, 65, 66, 67, 68], "9": [1, 8, 23, 25, 26, 30, 33, 40, 41, 42, 46, 49, 53, 56, 63, 64, 66, 77, 81, 86], "1989": [1, 70], "graham": 1, "knuth": 1, "patashnik": 1, "easili": [1, 12, 18, 30, 62, 66, 69, 73, 74, 78, 90], "o_1": 1, "type": [1, 3, 4, 5, 6, 8, 9, 10, 11, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 53, 55, 58, 60, 62, 63, 65, 66, 67, 68, 71, 72, 73, 74, 75, 76, 78, 79, 81, 83, 86, 87, 88, 89, 91, 93, 95], "mathbb": [1, 8], "rightarrow": [1, 66], "upgrad": [1, 2, 15, 21, 41, 45, 47, 67, 95], "Of": [1, 3, 13, 17, 20, 22, 33, 34, 42, 43, 45, 48, 49, 56, 58, 59, 60, 67, 70, 79, 80, 85, 87, 92, 95], "foral": [1, 15, 19, 22, 56], "mathrel": 1, "math": [1, 7, 17, 23, 40, 59, 66, 69, 74, 77, 85], "2n": [1, 40, 59], "proceed": [1, 63, 67, 95], "frac": [1, 40, 41, 42, 44, 59, 89], "3n": 1, "notin": 1, "recal": [1, 7, 8, 14, 15, 19, 20, 22, 30, 37, 41, 45, 49, 51, 53, 56, 58, 62, 64, 65, 67, 69, 77, 78, 79, 80, 81, 84, 87], "toward": [1, 20, 30, 41, 42], "end": [1, 3, 7, 10, 12, 13, 14, 15, 18, 20, 24, 27, 30, 32, 33, 40, 41, 42, 44, 45, 46, 47, 49, 53, 62, 64, 65, 66, 67, 68, 69, 72, 76, 77, 78, 79, 80, 81, 84, 85, 87, 91, 92, 94, 95], "o_2": 1, "exist": [1, 8, 13, 16, 25, 28, 38, 42, 45, 53, 54, 56, 58, 60, 62, 63, 64, 65, 67, 69, 70, 79, 80, 83, 85, 87, 92, 95], "c": [1, 3, 4, 5, 6, 7, 8, 10, 14, 16, 19, 23, 25, 27, 29, 30, 34, 35, 39, 41, 42, 45, 47, 48, 49, 51, 52, 55, 56, 57, 58, 63, 64, 65, 66, 68, 71, 74, 76, 77, 78, 80, 84, 85, 86, 87, 89, 91, 92, 95, 96], "gt": [1, 80], "existenti": [1, 56], "quantifi": [1, 14, 19, 56], "posit": [1, 8, 15, 28, 35, 41, 49, 67, 78, 79, 80, 81, 94], "bump": 1, "larger": [1, 3, 7, 22, 24, 33, 41, 42, 45, 63, 66, 67, 69, 82], "analyz": [1, 40, 44, 64, 65, 74], "happen": [1, 5, 6, 7, 8, 10, 12, 13, 16, 22, 26, 27, 33, 40, 41, 42, 44, 45, 47, 48, 49, 55, 64, 67, 78, 81, 85, 92, 94, 95], "slower": [1, 16], "hardcod": [1, 12, 20, 95], "lookup": [1, 26, 28, 48, 69, 79], "o_3": 1, "n_0": 1, "geq": [1, 48], "smaller": [1, 4, 14, 19, 20, 21, 22, 42, 46, 64, 67, 79, 85], "temporarili": [1, 7, 85], "pick": [1, 3, 10, 13, 19, 44, 47, 48, 51, 64, 67, 92, 95], "power": [1, 2, 6, 8, 11, 12, 20, 24, 25, 29, 36, 39, 40, 41, 42, 44, 45, 55, 56, 74, 77, 93, 95], "repeat": [1, 12, 15, 17, 18, 20, 24, 33, 41, 44, 47, 53, 58, 64, 77, 95], "memor": [1, 49], "abl": [1, 3, 9, 18, 27, 30, 41, 44, 45, 47, 55, 66, 67, 71, 74, 77, 80, 82, 85, 92, 95], "recreat": 1, "scratch": [1, 58, 66, 71, 95], "anytim": [1, 64, 67, 77], "asymptot": [1, 44, 50, 58, 79, 90], "upper": [1, 7, 15, 22, 25, 66, 70, 85], "least": [1, 8, 9, 14, 15, 18, 20, 25, 28, 30, 40, 41, 42, 47, 48, 53, 54, 57, 58, 62, 63, 64, 69, 78, 85, 90], "inflat": [1, 40], "goal": [1, 7, 9, 14, 16, 19, 21, 24, 33, 40, 50, 61, 65, 66, 67, 69, 78, 84, 95], "explicitli": [1, 5, 7, 8, 18, 32, 53, 63, 87], "ask": [1, 5, 6, 8, 12, 13, 47, 95], "tightest": 1, "ldot": [1, 40, 42, 89], "parameter": [1, 36, 41, 56, 74, 77, 79, 80, 81, 86], "badli": [1, 94], "mislead": 1, "moral": [1, 25, 64], "stori": [1, 25, 64], "hideou": 1, "inexcus": 1, "abus": [1, 83, 93], "allow": [1, 8, 12, 14, 16, 18, 19, 20, 21, 25, 27, 30, 31, 40, 41, 42, 47, 48, 49, 56, 64, 73, 74, 77, 78, 80, 82, 83, 85, 92, 95], "perman": [1, 4], "infect": 1, "conscious": 1, "defens": [1, 11, 23], "patent": 1, "ridicul": 1, "grace": [1, 72], "admit": [1, 47, 90], "nonsens": 1, "sometim": [1, 4, 7, 8, 9, 13, 14, 16, 19, 22, 24, 25, 27, 32, 35, 40, 42, 44, 45, 47, 52, 63, 64, 65, 66, 67, 73, 76, 77, 79, 85, 92, 94, 95], "becom": [1, 3, 8, 9, 10, 18, 21, 25, 27, 28, 30, 35, 36, 40, 41, 42, 43, 45, 46, 47, 48, 55, 60, 62, 63, 64, 66, 67, 70, 75, 79, 80, 81, 82, 84, 85, 88, 92, 95], "stuck": [1, 14, 19, 22, 51, 63, 68, 69, 95], "mistak": [1, 3, 10, 16, 21, 27, 32, 40, 81, 92, 95], "ancestor": [1, 66], "Be": [1, 15, 41, 66, 95], "direct": [1, 4, 12, 20, 41, 42, 47, 50, 53, 55, 77, 78, 87, 95], "ever": [1, 3, 4, 7, 8, 9, 18, 27, 35, 40, 42, 45, 47, 49, 64, 67, 69, 79, 81, 85, 92], "chanc": [1, 4, 27, 47, 85], "teach": [1, 70, 75], "intellectu": [1, 96], "children": [1, 37, 44, 48, 51, 65], "By": [1, 8, 9, 13, 14, 17, 18, 19, 22, 24, 30, 41, 42, 45, 48, 49, 55, 56, 58, 64, 67, 70, 78, 85, 92, 95], "pretti": [1, 8, 12, 13, 47, 63, 84], "thing": [1, 4, 5, 8, 9, 10, 12, 16, 20, 25, 27, 31, 32, 33, 45, 47, 49, 64, 67, 74, 79, 92, 94, 95], "longest": [1, 28, 48], "euphem": 1, "emphas": [1, 5, 16, 33, 55, 85], "featur": [1, 7, 8, 9, 11, 19, 25, 29, 30, 33, 35, 36, 43, 45, 46, 47, 49, 60, 62, 65, 66, 67, 71, 75, 77, 80, 81, 83, 86, 88, 90, 92, 94], "linear": [1, 6, 8, 18, 26, 37, 38, 40, 41, 42, 44, 46, 55, 58, 59, 63, 64, 77, 78, 79], "familiar": [1, 14, 22, 24, 29, 30, 42, 54, 58, 61, 66, 92, 95], "tail": [1, 11, 19, 28, 36, 41, 46, 49, 51, 59, 67, 77, 79, 91, 92], "insid": [2, 3, 5, 7, 8, 9, 10, 22, 25, 27, 30, 32, 35, 41, 44, 45, 47, 48, 49, 62, 63, 65, 66, 67, 76, 77, 80, 81, 83, 84, 85, 92, 95], "With": [2, 8, 16, 18, 20, 41, 46, 47, 55, 62, 64, 65, 67, 69, 77, 80, 81, 90, 95], "system": [2, 3, 4, 8, 9, 10, 16, 21, 24, 45, 46, 47, 63, 64, 67, 68, 72, 73, 74, 77, 80, 81, 82, 85, 86, 87, 92, 95], "host": 2, "os": [2, 47, 65, 95], "guest": 2, "nativ": [2, 3], "vm": [2, 68], "provid": [2, 3, 5, 6, 7, 8, 9, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 27, 32, 33, 35, 36, 41, 42, 45, 46, 47, 48, 55, 57, 58, 60, 63, 65, 66, 72, 74, 76, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 94, 95], "pre": [2, 26, 27, 30, 40, 55, 95], "ubuntu": [2, 95], "free": [2, 4, 16, 28, 64, 66, 67, 68, 74, 75, 94, 95], "linux": [2, 16], "ancient": 2, "african": 2, "process": [2, 8, 13, 20, 24, 30, 33, 36, 47, 48, 51, 55, 58, 64, 66, 67, 79, 80, 87, 95], "download": [2, 12, 13, 62, 63, 65, 66, 67, 69, 78, 94, 95], "vmware": 2, "workstat": 2, "pro": 2, "person": [2, 5, 13, 21, 82], "account": [2, 25, 40, 53, 62, 95], "broadcom": 2, "amd64": 2, "save": [2, 3, 4, 40, 42, 44, 56, 62, 69, 95], "ova": 2, "wherev": [2, 64], "launch": [2, 12, 47, 63, 76, 87, 94, 95], "select": [2, 13, 65, 84, 95], "open": [2, 3, 13, 27, 30, 32, 33, 41, 42, 47, 63, 66, 67, 69, 77, 78, 79, 80, 86, 87, 94, 95], "click": [2, 13, 47, 94, 95], "cs": [2, 4, 6, 23, 37, 47, 68, 94, 95, 96], "minut": [2, 8, 64, 94], "gui": [2, 8, 23, 47, 94, 95], "appear": [2, 4, 8, 14, 18, 24, 28, 30, 34, 35, 39, 41, 42, 43, 45, 47, 53, 63, 64, 65, 66, 67, 77, 79, 80, 85, 86, 87, 95], "skip": [2, 12, 15, 45, 66, 67, 69, 95], "fusion": 2, "appl": [2, 78], "silicon": 2, "m1": [2, 80], "m2": [2, 80], "m3": [2, 80], "arm": [2, 65], "intel": 2, "drag": 2, "custom": [2, 14, 18, 33, 77, 79, 85], "64": [2, 7, 8, 30], "plai": [2, 15, 16, 30, 45, 85], "icon": [2, 12, 94, 95], "middl": [2, 13, 22, 46, 49, 64, 65, 77], "black": [2, 15, 19, 23, 41, 43, 50], "automat": [2, 4, 7, 8, 17, 39, 64, 66, 74, 76, 77, 80, 81, 83, 85, 95], "usernam": [2, 95], "camel": [2, 10, 47, 92, 94, 95], "password": [2, 95], "termin": [2, 3, 7, 10, 12, 27, 41, 47, 64, 66, 68, 77, 85, 88, 92, 94, 95], "firefox": 2, "web": [2, 12, 13, 30, 43, 47, 94], "browser": [2, 12, 13, 47, 65, 94, 95], "hand": [2, 3, 7, 8, 18, 21, 24, 30, 34, 35, 41, 45, 48, 49, 55, 58, 62, 64, 65, 66, 67, 69, 71, 77, 80, 85, 92, 95], "launcher": 2, "bar": [2, 30, 65, 69, 95], "updat": [2, 20, 21, 25, 33, 44, 47, 74, 79, 80, 88, 91, 92, 95], "opam": [2, 3, 8, 47, 66], "sudo": [2, 95], "apt": [2, 95], "switch": [2, 47, 62, 67, 70, 79], "semest": [2, 94, 95], "instruct": [2, 8, 45, 47, 65, 70, 95], "default": [2, 3, 8, 13, 20, 42, 47, 48, 49, 66, 77, 86, 89, 95], "recent": [2, 26, 43, 46, 57, 62, 79, 95], "platform": [2, 3, 7, 94, 95], "option": [2, 3, 12, 14, 20, 25, 26, 27, 28, 29, 30, 36, 41, 42, 44, 45, 63, 64, 66, 77, 80, 81, 85, 91, 92, 95], "chang": [2, 3, 4, 7, 8, 10, 13, 14, 17, 18, 19, 20, 21, 25, 30, 33, 34, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 55, 58, 62, 63, 64, 67, 70, 71, 72, 74, 77, 78, 79, 81, 82, 85, 87, 88, 90, 91, 92, 95], "passwd": 2, "prompt": [2, 12, 87, 95], "welcom": [2, 95], "user": [2, 20, 24, 32, 47, 49, 92, 95], "awar": [2, 16, 40, 47, 76, 83], "won": [2, 3, 4, 9, 16, 25, 28, 41, 45, 49, 64, 66, 67, 69, 72, 74, 76, 77, 80, 81, 85, 87, 92, 95], "kind": [3, 4, 5, 8, 9, 12, 15, 16, 18, 19, 20, 21, 22, 25, 27, 29, 30, 32, 36, 39, 40, 41, 42, 43, 45, 47, 48, 49, 51, 52, 60, 64, 65, 67, 68, 74, 76, 80, 84, 85, 86, 92, 95], "interact": [3, 9, 12, 13, 14, 24, 41, 47, 49, 64, 66, 87, 92, 94], "calcul": [3, 12, 41, 44], "far": [3, 4, 5, 7, 8, 13, 17, 18, 19, 20, 22, 24, 25, 27, 34, 35, 40, 42, 45, 47, 55, 58, 62, 63, 64, 66, 69, 72, 76, 77, 79, 82, 85, 90, 92], "directori": [3, 13, 33, 76, 87, 95], "command": [3, 7, 12, 41, 47, 66, 74, 87, 94, 95], "mkdir": [3, 95], "hello": [3, 6, 25, 35, 41, 65, 77, 94], "cd": [3, 95], "root": [3, 6, 10, 13, 16, 25, 28, 41, 44, 48, 51, 64, 66, 95], "unix": [3, 16, 20, 41, 47], "home": [3, 95], "place": [3, 7, 8, 13, 18, 21, 22, 24, 25, 30, 33, 42, 47, 48, 51, 63, 67, 69, 76, 77, 85, 89, 92, 94, 95], "soon": [3, 4, 8, 21, 25, 39, 45, 55, 67, 74, 79, 81, 83, 85], "subdirectori": [3, 87, 95], "_": [3, 10, 14, 16, 18, 19, 20, 25, 27, 28, 30, 31, 33, 34, 37, 38, 41, 42, 44, 45, 46, 47, 48, 49, 51, 55, 63, 67, 69, 76, 77, 79, 80, 84, 85, 92], "print_endlin": [3, 6, 10, 47, 94], "intend": [3, 17, 24, 27, 30, 41, 45, 51, 66, 67, 77, 85, 95], "session": [3, 12, 20], "blank": 3, "underscor": [3, 10, 30, 33], "ocamlc": [3, 78, 87], "output": [3, 4, 6, 8, 10, 12, 13, 15, 16, 18, 19, 21, 23, 28, 30, 41, 42, 45, 47, 48, 49, 50, 53, 54, 56, 57, 58, 64, 65, 66, 69, 74, 77, 78, 79, 80, 84, 85, 86, 91, 92, 94, 95], "bytecod": [3, 45, 65, 68, 87], "cmi": 3, "cmo": [3, 78, 87], "concern": [3, 4, 18, 30, 74, 77, 82, 83], "print": [3, 4, 11, 12, 20, 28, 33, 41, 45, 47, 49, 54, 58, 64, 78, 84, 90, 92, 94], "string": [3, 5, 6, 7, 8, 10, 15, 18, 20, 25, 26, 27, 28, 32, 33, 34, 35, 41, 42, 44, 45, 47, 53, 55, 56, 58, 63, 64, 66, 69, 76, 77, 78, 79, 80, 84, 85, 87, 91, 92, 94, 95], "recompil": [3, 63, 78], "rerun": 3, "multipl": [3, 6, 7, 8, 10, 11, 15, 18, 19, 22, 25, 26, 35, 40, 41, 42, 45, 46, 47, 49, 53, 61, 64, 65, 67, 77, 78, 79, 84, 92], "cycl": [3, 25, 42, 45, 49, 50, 91, 92], "feel": [3, 8, 9, 24, 29, 45, 66, 72, 85, 95], "unfamiliar": [3, 6], "id": [3, 8, 9, 30, 45, 63, 64, 66, 79, 80, 81, 94, 95], "eclips": [3, 9], "worri": [3, 4, 7, 8, 17, 30, 33, 47, 58, 64, 67, 76, 77, 78, 93, 95], "clean": [3, 73, 95], "rm": [3, 6, 13, 95], "unlik": [3, 7, 29, 42, 64, 85, 92], "invok": [3, 13, 20, 47, 77, 81, 85, 92], "idiom": [3, 9, 11, 30, 77], "last": [3, 4, 7, 13, 18, 20, 22, 28, 40, 41, 42, 44, 45, 46, 47, 49, 52, 64, 66, 67, 69, 80, 85], "serv": [3, 19, 21, 24, 47, 72], "kick": [3, 8], "off": [3, 4, 8, 18, 24, 30, 32, 40, 47, 49, 58, 64, 77, 84, 85, 92, 94], "librari": [3, 4, 5, 7, 8, 9, 10, 11, 13, 18, 20, 21, 25, 26, 27, 28, 30, 33, 34, 36, 37, 41, 45, 47, 48, 49, 52, 53, 54, 57, 58, 60, 66, 67, 76, 77, 78, 79, 80, 81, 85, 89, 92], "legaci": [3, 87], "ocamlbuild": [3, 87], "newer": [3, 95], "gradl": 3, "maven": 3, "ant": 3, "hierarchi": [3, 64], "extern": [3, 47], "packag": [3, 20, 47, 83, 85, 95], "instal": [3, 8, 15, 18, 20, 47, 77, 78, 84, 94], "manag": [3, 13, 17, 25, 40, 47, 74, 82, 95], "descend": [3, 13, 16, 19, 28, 48, 64], "lisp": [3, 8, 30, 46, 62, 67, 71, 73, 75], "parenthes": [3, 7, 8, 12, 25, 35, 47, 55, 59, 63, 65, 66, 79, 80, 85, 88], "nest": [3, 6, 7, 10, 13, 19, 30, 31, 32, 63, 67, 77, 84, 85, 92], "html": [3, 5, 12, 13, 23, 30, 75, 76, 94], "declar": [3, 5, 8, 16, 25, 47, 63, 64, 66, 76, 77, 78, 80, 81, 82, 84, 85, 86, 91], "lang": [3, 33, 64], "sourc": [3, 4, 5, 12, 13, 16, 17, 18, 20, 24, 30, 47, 55, 62, 65, 68, 74, 76, 80, 81, 82, 87, 90, 91, 94, 95], "ex": [3, 13, 30, 33, 41, 47, 95], "extens": [3, 4, 19, 25, 30, 47, 66, 70, 76, 80, 86, 94, 95], "window": [3, 12, 33, 41], "_build": [3, 33, 66, 87], "benefit": [3, 21, 24, 42, 47, 56, 75, 83], "over": [3, 7, 8, 9, 14, 15, 16, 17, 19, 20, 25, 37, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 55, 56, 60, 61, 62, 64, 66, 67, 69, 70, 74, 77, 78, 80, 94, 95, 96], "pollut": 3, "bunch": [3, 40], "cleanli": [3, 41], "separ": [3, 6, 7, 8, 10, 18, 30, 33, 53, 64, 65, 66, 67, 76, 79, 82, 84, 85, 92, 95], "buri": 3, "coupl": [3, 4, 8, 9, 10, 14, 17, 20, 21, 25, 28, 32, 42, 45, 47, 48, 52, 55, 61, 66, 69, 80, 81, 85, 86, 92], "shortcut": [3, 95], "rememb": [3, 12, 16, 30, 32, 35, 44, 49, 55, 63, 67, 77, 80, 81, 92, 95], "To": [3, 4, 7, 8, 10, 13, 14, 18, 19, 20, 25, 27, 28, 31, 33, 34, 35, 40, 41, 42, 44, 46, 47, 48, 49, 51, 53, 55, 58, 62, 63, 64, 67, 69, 76, 77, 78, 79, 80, 82, 85, 88, 91, 92, 94, 95], "simpli": [3, 7, 8, 14, 16, 18, 19, 25, 26, 27, 28, 30, 39, 41, 42, 44, 45, 47, 48, 49, 54, 63, 66, 74, 77, 80, 81, 82, 85, 92, 94, 95], "exec": [3, 13, 33, 41, 47], "remov": [3, 14, 15, 18, 20, 21, 41, 42, 45, 47, 58, 65, 78, 79, 80, 82, 85, 91, 95], "cach": [3, 49, 50, 77, 79], "copi": [3, 4, 12, 18, 20, 30, 33, 35, 36, 40, 66, 77, 78, 79, 81, 83, 95], "accident": [3, 55, 58, 67, 76, 85], "loss": [3, 18], "recov": [3, 42], "git": 3, "advis": [3, 79], "error": [3, 4, 6, 7, 8, 10, 12, 13, 16, 20, 23, 24, 25, 27, 32, 33, 45, 49, 55, 63, 64, 65, 67, 69, 74, 76, 77, 78, 79, 80, 81, 85, 87, 91, 92, 94, 95], "attempt": [3, 13, 22, 24, 30, 36, 42, 47, 49, 58, 64, 65, 66, 67, 69, 74, 77], "init": [3, 30, 55, 77, 89, 95], "bin": 3, "ocamlformat": [3, 76, 95], "top": [3, 8, 12, 14, 15, 47, 48, 59, 77, 80, 81, 85, 91, 94, 95], "onc": [3, 10, 15, 18, 19, 20, 22, 27, 28, 30, 40, 41, 42, 44, 45, 47, 49, 53, 55, 56, 64, 65, 67, 69, 70, 77, 78, 79, 82, 85, 86, 88, 92, 94], "accomplish": [3, 7, 30, 42, 65, 67, 80, 84], "respond": [3, 7, 47, 85], "wait": [3, 14, 33, 47, 64, 94], "filesystem": [3, 95], "rebuild": [3, 33], "stop": [3, 4, 8, 41, 42, 47, 63, 67, 95], "press": [3, 12, 41, 47, 50, 79, 86, 95], "resort": 4, "everyth": [4, 5, 8, 57, 67, 69, 74, 80, 82, 87], "els": [4, 6, 7, 8, 13, 14, 15, 16, 18, 19, 26, 30, 42, 44, 45, 46, 47, 48, 49, 51, 54, 55, 56, 58, 59, 62, 63, 64, 66, 67, 69, 77, 78, 79, 80, 81, 92, 95], "fail": [4, 7, 13, 16, 17, 18, 19, 20, 21, 22, 27, 33, 41, 47, 48, 64, 72, 77, 87, 94, 95], "accord": [4, 7, 14, 17, 19, 20, 28, 30, 41, 42, 46, 49, 55, 62, 64, 65, 80, 85, 92], "rob": 4, "miller": 4, "four": [4, 13, 28, 31, 45, 46, 48, 63, 64, 66, 70, 77, 86, 94, 95], "erad": 4, "memori": [4, 8, 9, 12, 17, 30, 36, 40, 45, 47, 49, 62, 65, 74, 92, 93], "safeti": [4, 8, 17, 68, 74, 75, 92, 93], "access": [4, 7, 8, 9, 32, 35, 36, 39, 46, 47, 49, 65, 77, 78, 79, 81, 85, 87, 88, 92, 95], "refer": [4, 7, 8, 10, 15, 19, 20, 25, 32, 39, 40, 45, 47, 52, 56, 64, 66, 79, 87, 89, 91, 92, 93], "region": [4, 13, 92], "inconsist": [4, 18], "prevent": [4, 8, 21, 24, 30, 64, 67, 74, 77, 83, 92], "buffer": [4, 10, 66, 74], "overflow": [4, 6, 8, 49, 72, 74], "ad": [4, 8, 12, 13, 15, 16, 18, 19, 20, 40, 41, 42, 47, 48, 58, 66, 67, 69, 77, 78, 79, 80, 81, 83, 84, 85], "boolean": [4, 7, 14, 22, 34, 41, 42, 56, 64, 66, 67, 69, 92], "float": [4, 6, 7, 10, 13, 25, 28, 32, 38, 41, 42, 53, 76, 78, 79, 80, 84, 88, 89], "tool": [4, 5, 9, 11, 12, 13, 16, 24, 30, 61, 65, 66, 95], "autom": [4, 24, 33], "analysi": [4, 9, 14, 22, 43, 50, 65, 67, 68, 69, 70, 79], "findbug": 4, "slam": 4, "devic": 4, "driver": [4, 24], "subfield": 4, "verif": [4, 14, 19, 23, 24], "social": [4, 17, 23, 24, 85], "ibm": [4, 24], "1970": [4, 48, 66, 73], "1990": [4, 56, 60, 70, 71, 72], "remark": [4, 24, 67], "effect": [4, 7, 8, 9, 10, 13, 19, 24, 39, 40, 41, 42, 43, 44, 45, 47, 49, 50, 66, 74, 75, 76, 77, 80, 81, 82, 85, 87, 88, 90, 94, 95], "jone": [4, 24], "1991": [4, 23, 24, 46, 73], "inspect": [4, 23, 24, 48], "found": [4, 7, 8, 15, 18, 19, 20, 23, 24, 41, 42, 46, 48, 64, 74, 87, 93, 94, 95], "65": [4, 7, 24, 30], "20": [4, 7, 24, 26, 27, 30, 40, 41, 42, 45, 47, 63, 64, 85, 92, 96], "none": [4, 5, 8, 10, 20, 24, 25, 26, 27, 28, 30, 32, 41, 42, 44, 45, 47, 49, 55, 63, 67, 77, 79, 81, 91, 92], "visibl": [4, 30, 44, 77, 81, 85, 86, 94], "easier": [4, 15, 16, 18, 24, 28, 30, 40, 45, 47, 62, 64, 65, 67, 72, 74, 79, 81, 82, 86, 87, 95], "diagnos": [4, 45, 85, 95], "fix": [4, 8, 10, 12, 20, 21, 22, 24, 35, 40, 42, 47, 48, 58, 63, 64, 85, 88, 95], "past": [4, 12, 14, 17, 33, 58, 63, 81, 83, 84, 95, 96], "point": [4, 6, 7, 8, 13, 16, 18, 19, 25, 28, 33, 34, 35, 38, 42, 45, 47, 49, 54, 55, 58, 61, 62, 63, 64, 65, 66, 67, 76, 77, 79, 83, 85, 91, 92, 95], "obscur": [4, 16, 47, 64, 86], "loudli": 4, "fourth": [4, 41, 53, 56, 66, 92, 95], "expos": [4, 5, 17, 18, 45, 47, 72, 77, 80, 81, 84, 92], "confirm": [4, 13], "modul": [4, 7, 8, 10, 13, 14, 15, 20, 21, 24, 26, 28, 30, 33, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 53, 55, 57, 59, 60, 66, 67, 69, 74, 76, 77, 78, 79, 82, 86, 88, 89, 91, 92], "especi": [4, 8, 30, 40, 42, 43, 47, 64, 66, 90, 94], "break": [4, 23, 40, 42, 48, 64, 65, 74, 77, 79, 95], "distil": 4, "hard": [4, 5, 14, 16, 21, 22, 24, 30, 35, 42, 45, 48, 55, 67, 76, 80, 81, 82, 90, 92], "lurk": [4, 12, 85], "spent": [4, 16, 40, 44], "until": [4, 7, 17, 27, 32, 33, 45, 46, 47, 49, 58, 65, 67, 71, 72, 74, 76, 78, 81, 92, 95], "emploi": [4, 24], "scientif": [4, 23, 24], "formul": [4, 15, 19, 22, 24, 41, 45, 69], "notebook": [4, 94], "chemistri": 4, "lab": [4, 95], "clarifi": [4, 71], "mind": [4, 6, 15, 36, 57, 76, 86, 95], "keep": [4, 15, 18, 19, 20, 21, 22, 24, 31, 36, 40, 41, 42, 45, 46, 47, 48, 55, 58, 62, 64, 67, 69, 77, 79, 80, 82, 86, 87, 95], "track": [4, 22, 31, 42, 47, 55, 64, 67], "hypothes": [4, 22], "experi": [4, 9, 17, 20, 24, 62, 63, 72, 78, 79, 87, 94], "affirm": 4, "deni": 4, "reformul": 4, "ration": [4, 13, 78], "typo": [4, 85], "Or": [4, 8, 10, 13, 21, 25, 30, 35, 45, 54, 62, 64, 66, 67, 85, 94, 95], "flaw": [4, 58], "major": [4, 8, 18, 53, 67, 69, 95], "refactor": [4, 33, 56, 78], "suit": [4, 13, 15, 17, 20, 27, 28, 33], "creep": 4, "futur": [4, 7, 17, 18, 24, 25, 30, 41, 46, 47, 62, 86, 95], "guard": [4, 7, 64, 67, 69], "repeatedli": [4, 6, 44], "previou": [4, 5, 6, 8, 13, 14, 15, 19, 25, 28, 30, 33, 35, 41, 44, 47, 49, 54, 63, 64, 65, 67, 69, 78, 80, 92, 95], "regress": [4, 23], "tip": [4, 94, 95], "ascertain": 4, "inc": [4, 8, 12, 41, 45, 85, 87, 89], "print_int": [4, 10, 58], "trace": [4, 27], "fib": [4, 6, 15, 44, 49], "untrac": 4, "debugg": [4, 9], "ocamldebug": 4, "tutori": [4, 13, 95], "websit": [4, 73, 95], "unless": [4, 8, 20, 63, 67, 72, 79, 87, 95], "emac": [4, 62, 94, 95], "section": [4, 5, 16, 18, 23, 28, 30, 33, 35, 41, 44, 45, 46, 47, 50, 54, 55, 56, 61, 63, 66, 67, 69, 77, 80, 81, 85, 92, 94], "precondit": [4, 8, 11, 13, 14, 15, 16, 18, 19, 21, 23, 41, 76], "random_int": [4, 5], "random": [4, 5, 15, 23, 42, 92, 95], "inclus": [4, 5, 6, 30, 53, 87], "exclus": [4, 5, 57], "greater": [4, 5, 6, 13, 16, 24, 30, 46, 48, 53, 67, 78, 79, 80], "30": [4, 5, 28, 30, 47, 49, 85], "pass": [4, 5, 8, 10, 13, 19, 20, 21, 30, 33, 38, 42, 45, 52, 55, 56, 57, 58, 59, 64, 67, 75, 78, 80, 85, 92], "violat": [4, 13, 16, 18, 20, 21, 24, 40, 42, 44, 47, 48, 64, 67, 84, 92], "claus": [4, 5, 23, 30], "whatsoev": [4, 45, 69], "bet": [4, 92], "didn": [4, 8, 30, 33, 49, 55, 60, 69, 71, 80, 81, 92, 93], "implementor": [4, 80], "lsl": 4, "invalid_arg": [4, 13, 47, 92], "built": [4, 6, 7, 8, 10, 14, 18, 20, 26, 29, 30, 31, 33, 36, 40, 41, 42, 45, 46, 47, 49, 54, 55, 58, 64, 66, 69, 73, 78, 79, 83, 84, 85, 92, 95], "invalid_argu": [4, 7, 13, 46, 47, 88, 92], "situat": [4, 13, 22, 40, 46, 48, 49, 62, 65, 69, 76, 87], "invalid": [4, 16, 53, 66, 78], "computation": [4, 67], "cheap": [4, 18, 40, 42], "prefer": [4, 9, 12, 42, 47, 48, 76, 92, 95], "inexpens": [4, 40], "approxim": [4, 7, 13, 18, 41, 42, 49, 64, 79], "unnecessarili": 4, "expens": [4, 18, 24, 37, 40, 42, 46, 58], "cost": [4, 18, 24, 40, 48, 58, 77, 79], "initi": [4, 8, 15, 20, 23, 24, 40, 41, 42, 46, 51, 55, 64, 65, 69, 88, 89, 92], "paid": [4, 40], "These": [4, 7, 8, 16, 19, 23, 24, 30, 36, 45, 49, 56, 66, 76, 83, 87, 92, 94, 95], "often": [4, 5, 7, 8, 10, 13, 16, 18, 20, 24, 33, 35, 37, 42, 43, 45, 48, 56, 59, 64, 77, 80, 85, 87, 88, 95], "misplac": 4, "monei": [4, 40], "societi": 4, "repair": [4, 48], "fault": [4, 19, 23, 24, 45, 90], "restat": 4, "postcondit": [4, 8, 11, 16, 19, 21, 23], "big": [4, 7, 8, 30, 35, 42, 44, 50, 62, 63, 66, 68, 69, 70, 77, 78, 87], "savvi": [4, 42], "anywai": [4, 12, 40, 45, 47, 62, 85], "spend": [4, 24, 40, 95], "ocamldoc": [5, 76], "javadoc": [5, 30], "comment": [5, 8, 15, 18, 19, 21, 23, 24, 30, 47, 55, 63, 64, 77, 84, 85], "render": [5, 30, 33, 47], "easi": [5, 8, 9, 10, 14, 17, 18, 19, 24, 26, 30, 35, 39, 41, 42, 45, 48, 51, 58, 64, 67, 69, 72, 74, 77, 79, 81, 85, 94, 95, 96], "sum": [5, 19, 25, 30, 33, 35, 36, 40, 41, 49, 53, 55, 59, 84], "lst": [5, 15, 16, 18, 20, 22, 26, 28, 30, 42, 49, 53, 54, 55, 58, 65, 79, 80, 81, 85, 91, 92], "asterisk": 5, "recogn": [5, 27, 32, 40, 45, 56, 60, 66, 86, 95], "squar": [5, 6, 7, 8, 13, 15, 16, 25, 28, 30, 48, 49, 53, 56, 59, 65, 89, 95], "bracket": [5, 7, 25, 28, 30, 48, 65, 77], "around": [5, 7, 8, 16, 18, 22, 27, 40, 41, 46, 48, 49, 57, 62, 63, 64, 76, 79, 80, 87, 95], "typewrit": [5, 30], "font": 5, "regular": [5, 8, 63, 66, 68, 86], "support": [5, 7, 8, 10, 18, 19, 20, 25, 30, 42, 47, 57, 60, 62, 66, 74, 77, 78, 79, 80, 82, 83, 84, 95], "deprec": 5, "param": 5, "netid": [5, 95], "full": [5, 18, 19, 32, 34, 35, 41, 45, 48, 63, 64, 65, 72, 73, 80, 94], "rang": [5, 7, 20, 42, 59], "markup": 5, "manual": [5, 6, 7, 8, 27, 34, 41, 47, 55, 64, 77, 84, 85, 92, 95], "cover": [5, 7, 8, 9, 13, 18, 20, 24, 25, 27, 29, 30, 39, 43, 47, 60, 64, 65, 66, 67, 70, 78, 85, 90, 94], "enough": [5, 6, 8, 13, 14, 16, 17, 18, 21, 30, 33, 41, 58, 65, 66, 67, 82, 92], "style": [5, 7, 12, 16, 18, 35, 45, 46, 47, 52, 60, 67, 85, 86], "favor": 5, "resembl": [5, 19, 62, 64, 66, 67, 80, 86], "revisit": [5, 33, 34, 40, 78], "descript": [5, 16, 19, 30, 33, 38, 55, 66, 69, 82, 95], "redundantli": 5, "paramet": [5, 8, 16, 25, 33, 55, 57, 64, 80, 81], "said": [5, 9, 13, 27, 47, 72, 77, 92], "strongli": [5, 7, 19], "discourag": [5, 7], "limpid": 5, "lowercase_ascii": [5, 85], "lowercas": [5, 8], "ascii": [5, 7], "occurr": [5, 7, 15, 22, 30, 42, 45, 51, 62, 63, 66, 67, 79], "not_found": [5, 44, 69, 78, 79, 80], "satisfi": [5, 13, 16, 18, 19, 20, 21, 23, 28, 33, 40, 41, 45, 46, 48, 53, 56, 77, 80, 82, 83, 84], "sentenc": [5, 16, 18, 35, 80], "dynam": [5, 7, 8, 9, 11, 25, 27, 30, 34, 35, 39, 49, 63, 64, 67, 68, 69, 70, 74, 75, 81, 84, 85, 88, 91, 92], "python": [5, 7, 8, 10, 12, 20, 29, 30, 54, 57, 58, 59, 60, 65, 71, 72, 74, 85, 94], "frequent": [5, 13, 47, 65, 94], "regard": [5, 7, 17, 19, 35, 40, 67, 79], "ensur": [5, 9, 10, 13, 14, 17, 18, 20, 30, 42, 47, 48, 55, 58, 64, 67, 69, 78, 79, 80, 85], "wrong": [5, 16, 21, 25, 27, 58, 62, 67, 72, 82, 83, 92, 95], "although": [5, 7, 8, 9, 18, 19, 20, 25, 26, 37, 40, 41, 42, 44, 64, 65, 66, 67, 79, 80, 89, 92], "english": [5, 7, 14, 19], "helpfulli": 5, "reader": [5, 8, 12, 16, 18, 31, 45, 54, 55, 58, 66, 85, 94], "highli": [5, 7, 36, 49, 65], "unidiomat": 5, "puzzl": [5, 20, 28, 92], "wrote": [5, 8, 25, 26, 28, 30, 33, 45, 58, 64, 66, 69, 74, 77, 80], "Is": [5, 14, 17, 40, 42, 46, 77, 95], "am": 5, "miss": [5, 14, 16, 18, 66, 67, 76, 85], "string_of_int": [6, 7, 28, 32, 33, 42, 53, 67, 78, 84], "hint": [6, 7, 12, 13, 15, 18, 19, 28, 41, 47, 53, 63, 78, 79, 87, 89], "examin": [6, 7, 21, 29, 41, 42, 63, 74], "scroll": [6, 7], "page": [6, 7, 8, 12, 47, 49, 94, 95], "42": [6, 7, 8, 12, 19, 30, 32, 41, 42, 47, 56, 62, 63, 64, 65, 67, 77, 80, 81, 84, 85, 87, 91, 92], "divid": [6, 13, 19, 42, 67, 76, 78, 79, 89], "14": [6, 7, 8, 10, 25, 28, 30, 63, 68, 76, 77, 79, 85, 92], "seventh": [6, 66], "nor": [6, 8, 10, 16, 27, 47, 53, 55, 63, 85, 90], "cpu": [6, 47], "hi": [6, 25, 32, 44, 53, 56, 70, 72, 73, 79, 94], "physic": [6, 7, 9, 89, 93], "2110": [6, 37, 42, 70], "increment": [6, 7, 8, 12, 30, 33, 40, 45, 47, 49, 66, 88, 92], "cube": [6, 44, 53], "sign": [6, 8, 25, 28, 30, 33, 35, 66, 79, 80, 84], "circl": [6, 17, 25], "radiu": [6, 25], "bear": [6, 22, 57, 80, 95], "1e": 6, "worthwhil": [6, 8, 24, 30], "averag": [6, 15, 40, 42], "avg3": 6, "z": [6, 7, 8, 13, 15, 19, 22, 34, 35, 41, 47, 48, 63, 64, 66, 67, 80, 85, 89, 92], "sqrt": [6, 13, 44, 89], "date": [6, 28, 78, 95], "month": [6, 17, 28, 78], "abbrevi": [6, 25], "jan": [6, 79], "feb": 6, "mar": 6, "apr": 6, "mai": [6, 7, 8, 13, 14, 15, 16, 18, 21, 24, 25, 27, 28, 30, 34, 35, 41, 42, 45, 47, 48, 53, 63, 64, 67, 69, 79, 82, 85, 92], "jun": 6, "jul": 6, "aug": 6, "sept": 6, "oct": 6, "nov": 6, "dec": [6, 45], "minimum": [6, 13, 28], "31": [6, 8, 20, 28, 30, 41, 78, 80, 81, 85], "28": [6, 7, 28, 30, 85], "ters": [6, 53, 78, 79], "short": [6, 7, 13, 16, 24, 30, 37, 41, 42, 54, 62, 67, 68, 76, 85, 90, 92], "fewer": [6, 10, 24, 28, 48], "th": 6, "fibonacci": [6, 49], "sequenc": [6, 7, 10, 14, 19, 20, 30, 40, 41, 43, 45, 46, 63, 64, 65, 66, 88, 93], "13": [6, 20, 28, 30, 33, 41, 49, 50, 77, 80, 81, 85, 86, 93], "50th": [6, 78], "instantan": 6, "congratul": 6, "hang": 6, "indefinit": 6, "obviou": [6, 18, 42, 45, 49, 56, 67], "subproblem": [6, 22], "redon": 6, "fib_fast": 6, "helper": [6, 8, 28, 41, 45, 46, 47, 58, 69, 77, 79, 81, 91, 92], "h": [6, 14, 15, 18, 19, 22, 23, 25, 28, 30, 32, 34, 35, 41, 44, 45, 48, 49, 51, 54, 55, 58, 64, 77, 79, 80, 81], "pp": [6, 77], "forward": [6, 41, 95], "neg": [6, 16, 19, 22, 25, 28, 31, 40, 42, 46, 79, 80, 81, 85], "indic": [6, 7, 8, 10, 12, 30, 33, 39, 41, 42, 47, 48, 49, 55, 56, 57, 64, 65, 66, 77, 84, 85, 92, 95], "poli": [6, 8, 15, 23, 25, 28], "numer": [6, 16, 41, 78, 79], "denomin": [6, 41, 78], "associ": [6, 9, 14, 15, 18, 19, 22, 23, 28, 29, 30, 35, 36, 39, 44, 45, 46, 47, 50, 53, 55, 60, 63, 65, 66, 68, 69, 78, 79, 80, 95], "decid": [6, 18, 19, 21, 30, 35, 51, 55, 67, 80], "infix": [6, 8, 19, 22, 41, 45, 47, 64, 69, 79], "print_str": [6, 10], "primari": [7, 30, 46, 47, 65, 69, 70, 96], "primarili": [7, 8, 9, 47, 56, 74], "21": [7, 12, 30, 46, 49, 77, 85, 92], "cryptic": 7, "overview": 7, "remain": [7, 8, 14, 17, 33, 40, 46, 47, 49, 51, 53, 55, 62, 63, 64, 67, 69, 78, 80, 91], "yai": 7, "mostli": [7, 13, 47, 91, 94], "recogniz": 7, "mod": [7, 15, 20, 41, 42, 54, 87], "divis": [7, 41, 45, 47, 76, 78], "modulu": 7, "60": [7, 30], "division_by_zero": 7, "modern": [7, 13, 17, 42, 47, 62, 66, 68, 73, 75, 85], "regist": [7, 45, 47, 65, 77], "stolen": 7, "63": [7, 8, 13, 30], "int64": 7, "zarith": [7, 8], "purpos": [7, 16, 18, 20, 22, 45, 47, 55, 62, 65, 67, 69, 71], "suffic": [7, 19, 20, 33, 77, 79, 80, 85], "offer": [7, 40, 42, 43, 46, 48, 52, 70, 80, 85, 93, 95], "ieee": 7, "754": 7, "dot": [7, 30, 35, 53, 64, 77, 85, 95], "deliber": [7, 16, 33, 42, 77], "overload": [7, 10, 85], "expect": [7, 8, 10, 14, 16, 20, 24, 33, 35, 36, 38, 39, 40, 42, 45, 47, 48, 55, 63, 64, 66, 67, 72, 76, 77, 79, 80, 81, 85, 92], "convert": [7, 8, 10, 14, 15, 16, 18, 20, 31, 32, 40, 41, 42, 44, 49, 52, 58, 78, 84, 85], "int_of_float": 7, "float_of_int": [7, 15, 42], "round": [7, 40], "300000000000000044": 7, "behavior": [7, 8, 9, 13, 16, 18, 21, 22, 24, 41, 45, 47, 53, 78, 80, 85, 92, 95], "encount": [7, 45, 48, 51, 64, 67, 74, 76, 77, 86, 91, 92], "bool": [7, 8, 10, 13, 14, 15, 18, 20, 22, 25, 28, 30, 31, 37, 41, 42, 47, 48, 51, 53, 54, 55, 56, 64, 66, 67, 69, 76, 77, 79, 80, 81, 85, 89, 92], "circuit": [7, 41, 67, 68], "char": [7, 20, 53, 78, 80, 85], "quot": [7, 8, 41, 95], "iso": 7, "8859": 7, "latin": 7, "encod": [7, 16, 65, 69, 92], "half": [7, 41, 52, 74], "char_of_int": 7, "int_of_char": 7, "abc": [7, 55], "concaten": [7, 28, 45, 47, 55, 58], "def": [7, 59], "abcdef": 7, "orient": [7, 8, 9, 23, 70, 80, 81, 82, 83, 85, 86, 94], "overrid": [7, 42, 83], "tostr": [7, 10, 18, 33, 77, 78], "__str__": 7, "string_of_float": [7, 84], "string_of_bool": 7, "strang": [7, 8, 27, 47, 64, 80, 85, 92], "string_of_char": 7, "int_of_str": [7, 25, 66], "float_of_str": 7, "bool_of_str": 7, "123": [7, 30], "char_of_str": 7, "correspond": [7, 8, 18, 20, 22, 41, 42, 44, 45, 47, 51, 63, 66, 67, 76, 85], "inequ": [7, 48], "tricki": [7, 28, 40, 67, 80, 92], "curiou": [7, 77, 85], "yourself": [7, 8, 9, 10, 12, 13, 17, 20, 22, 30, 33, 41, 42, 47, 48, 49, 72, 75, 78, 92, 94, 95], "seri": [7, 13, 40, 41, 89], "input1": 7, "output1": 7, "input2": 7, "output2": 7, "input3": 7, "output3": 7, "forth": [7, 22, 41, 42, 47, 56, 57, 76, 77, 79, 85], "handl": [7, 13, 16, 25, 27, 30, 33, 41, 45, 47, 48, 62, 64, 66, 67, 69, 77, 79, 80, 81], "e3": [7, 8, 27, 30, 62, 64, 66, 67, 69, 88], "boo": 7, "anywher": [7, 8, 30, 38, 63, 64, 67, 74, 94], "ternari": [7, 51, 62, 63, 69], "pleasant": [7, 23, 30, 49, 57, 79], "e4": [7, 8, 27, 64], "e5": 7, "e6": 7, "en": [7, 8, 27, 30, 35, 63, 67, 88, 92], "mandatori": [7, 8, 35, 85, 88], "regardless": [7, 14, 28, 30, 42, 45, 47, 67, 78, 81, 92, 95], "omit": [7, 8, 12, 16, 18, 25, 30, 42, 45, 67, 76, 77, 79, 85, 90, 95], "messag": [7, 8, 17, 20, 33, 45, 64, 76, 81, 85, 95], "inscrut": 7, "letter": [7, 8, 17, 34, 39, 64, 66, 69, 76, 85, 87], "metavari": [7, 8, 11, 30, 66, 68], "certain": [7, 9, 19, 21, 40, 45, 47, 67, 69, 77, 86, 90], "curious": 7, "compact": [7, 53], "notat": [7, 19, 22, 28, 30, 35, 42, 45, 49, 62, 63, 66, 67, 69], "colon": [7, 30, 35, 64, 85], "pronounc": [7, 8, 10, 12, 25, 30, 45, 63, 77], "usag": [7, 8, 9, 27, 32, 41, 45, 63, 74, 77, 89], "consist": [7, 8, 9, 12, 56, 62, 64], "43": [7, 8, 30, 67, 80, 92], "24": [7, 30, 45, 48, 77], "11": [7, 8, 28, 30, 36, 41, 42, 44, 50, 77, 79, 80, 85, 86, 87], "permit": [7, 8, 10, 16, 34, 41, 47, 49, 64, 67, 79, 81, 85, 92], "On": [7, 18, 30, 40, 41, 45, 55, 67, 77, 81, 92, 95], "bodi": [7, 8, 10, 11, 16, 25, 27, 34, 41, 45, 49, 58, 62, 63, 64, 65, 67, 69, 80, 81, 85, 88, 92], "implicitli": [7, 8, 13, 14, 16, 32, 64, 86], "red": [7, 25, 41, 43, 50, 85, 91, 95], "idiomat": [7, 8, 9, 10, 30, 35, 39, 77, 85, 92], "begin": [7, 8, 10, 11, 12, 14, 16, 22, 30, 32, 33, 36, 39, 41, 48, 49, 53, 55, 60, 65, 66, 67, 69, 75, 77, 79, 81, 84, 85, 86, 92, 93], "lower": [7, 18, 25, 41, 48, 64, 66, 85], "snake_cas": [7, 85], "camelcas": [7, 85], "v1": [7, 8, 30, 34, 35, 42, 62, 63, 67, 79, 88, 91, 92], "substitut": [7, 8, 11, 30, 34, 62, 63, 64, 68, 70, 74, 85, 92, 95], "v2": [7, 30, 34, 42, 62, 63, 67, 88, 91, 92], "clariti": [7, 16, 18, 55, 59, 67], "inferenc": [7, 64, 68], "meaning": [7, 8, 42, 65, 85], "overlap": [7, 39, 44, 47], "darn": 7, "confus": [7, 9, 16, 30, 47, 64, 66, 77, 84, 85, 92], "ambigu": [7, 65, 79], "pronoun": 7, "guess": [7, 8], "principl": [7, 15, 19, 23, 32, 44, 45, 55, 58, 60, 62, 64, 67, 70, 71, 81, 85, 92, 95], "irrelev": [7, 8, 35, 48, 62, 67, 92], "shouldn": [7, 55, 62, 92, 95], "align": [7, 22, 82], "commonli": [7, 8, 35, 62, 69, 85], "alpha": [7, 8, 77, 78], "renam": [7, 45, 55, 70], "convers": [7, 8, 10, 18, 52, 64, 77, 92], "histor": [7, 54, 80], "unimport": 7, "embed": [7, 47, 94, 96], "shadow": [7, 62, 63, 64, 65, 67, 85], "old": [7, 17, 25, 30, 35, 40, 46, 47, 55, 62, 65, 69, 72, 79, 80, 83, 95], "metaphor": [7, 8, 12, 32, 41, 45, 52, 81], "cast": [7, 65, 85], "eventu": [7, 8, 17, 19, 41, 42, 45, 46, 47, 57, 58, 64, 66, 67, 73, 79], "reappear": 7, "reced": 7, "mutabl": [7, 19, 23, 25, 30, 42, 47, 48, 50, 58, 67, 74, 75, 79, 88, 89, 93], "transcript": [7, 47], "22": [7, 12, 25, 30, 47, 55, 63, 64, 68, 85, 95], "worth": [7, 13, 42, 72, 95, 96], "mutat": [7, 35, 42, 46, 47, 64, 88, 89, 91, 92, 93], "summar": 7, "immut": [7, 15, 30, 42, 72, 74, 75, 79, 90, 93], "superfici": [7, 14], "quit": [7, 8, 10, 12, 14, 18, 19, 20, 21, 22, 24, 30, 42, 43, 45, 47, 49, 59, 64, 66, 73, 74, 78, 80, 81, 86, 91, 92, 95], "27": [7, 30, 33, 45, 55, 68], "debug": [7, 8, 11, 16, 18, 23, 32, 45, 66, 72, 79], "forgotten": [7, 59, 85], "cannot": [7, 8, 14, 16, 18, 27, 32, 41, 45, 47, 48, 49, 63, 64, 67, 69, 72, 74, 77, 80, 85, 87, 88, 91, 93, 95], "tri": [7, 8, 34, 40, 73, 80, 92], "clear": [7, 8, 16, 21, 33, 37, 45, 48, 54, 64, 79, 82, 84, 94], "silli": [7, 74], "tini": [7, 61, 66, 67, 79, 80], "techniqu": [7, 8, 17, 19, 20, 22, 23, 24, 40, 42, 43, 44, 45, 50, 51, 61, 65, 81, 82], "awai": [7, 8, 10, 16, 17, 18, 25, 40, 47, 48, 55, 58, 64, 67, 81, 83, 87, 92, 95], "receiv": [8, 21, 33, 47, 66, 72, 73, 85, 92], "keyword": [8, 9, 12, 25, 28, 30, 32, 33, 47, 49, 53, 55, 63, 65, 66, 69, 79, 80, 84, 85, 88, 92], "self": [8, 38, 44, 55, 66, 85], "quibbl": 8, "distinct": [8, 13, 18, 30, 35, 44, 65, 80, 82, 83, 85, 95], "procedur": [8, 48, 64, 74, 95], "background": [8, 47, 94], "terminolog": [8, 23, 24, 47, 64], "strictli": [8, 10, 30, 32, 33, 41, 53, 56, 64, 67, 78, 80], "group": [8, 45, 65, 66, 83, 94], "titl": [8, 96], "scheme": [8, 20, 35, 64, 68, 70], "factori": [8, 14, 19, 58, 77, 92], "limit": [8, 20, 47, 65, 74, 78, 85, 86, 90], "architectur": 8, "grown": 8, "garbag": [8, 71, 74], "collector": [8, 54, 58], "runtim": [8, 30, 64], "steal": 8, "flag": [8, 13, 18], "pow": [8, 67], "solv": [8, 14, 22, 28, 37, 41, 42, 44, 48, 55, 63, 67, 77, 80, 81, 95], "algorithm": [8, 16, 19, 37, 40, 41, 44, 47, 50, 51, 55, 60, 63, 64, 68, 70, 76, 78, 91], "ourselv": [8, 13, 17, 19, 20, 25, 40, 47, 58, 77, 82, 85, 90, 92], "mental": [8, 62, 64], "deduct": [8, 19, 53], "particularli": [8, 13, 16, 24, 25, 33, 42, 48, 75, 92], "x1": [8, 15, 19, 25, 34, 62, 67, 79, 89], "x2": [8, 19, 25, 34, 62, 67, 79], "xn": [8, 15, 34, 79, 89], "augment": [8, 45, 65, 67, 85], "week": [8, 17, 40], "mutual": [8, 11, 25, 31, 36, 37, 82, 85], "y1": [8, 25], "yn": 8, "odd": [8, 9, 15, 20, 31, 53, 54, 85], "u": [8, 18, 22, 25, 34, 41, 47, 49, 63, 84], "tn": [8, 25, 34, 35], "scope": [8, 16, 33, 63, 65, 67, 68, 69, 80, 81, 83, 86, 87, 92], "without": [8, 9, 12, 13, 16, 18, 19, 21, 27, 30, 33, 35, 41, 42, 44, 45, 46, 47, 49, 51, 55, 56, 58, 61, 62, 65, 66, 67, 74, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 91, 93, 95], "e0": [8, 34, 88], "vn": [8, 30, 35, 42, 79, 92], "vi": [8, 30, 35, 79, 88], "xi": [8, 34], "essenc": [8, 19, 57, 63, 71, 74], "imagin": [8, 16, 17, 33, 42, 45, 47, 48, 49, 56, 59, 92], "depict": [8, 18, 48], "triangl": 8, "sent": [8, 17, 47], "36": [8, 30, 85, 92], "send": [8, 77], "nice": [8, 30, 45, 48, 64, 79, 80, 85], "arguabl": [8, 16, 29, 35, 81, 84], "eleg": [8, 48, 53, 72], "ey": [8, 30, 45], "jump": [8, 65], "move": [8, 18, 24, 30, 33, 46, 47, 48, 49, 58, 63, 79, 85], "linearli": 8, "scale": [8, 94], "grow": [8, 19, 40, 42, 48], "1444": 8, "weird": [8, 66, 84], "chain": [8, 10, 19, 41, 47, 50], "stand": [8, 12, 19, 30, 55, 58, 64, 73, 92], "typic": [8, 13, 16, 23, 42, 47, 65, 66, 67, 69, 77, 88, 92, 94, 95], "greek": [8, 20, 25, 69], "beta": 8, "gamma": [8, 69], "bigr": [8, 28, 85, 87], "morph": [8, 25], "id_int": 8, "took": [8, 18, 22, 24, 40, 70, 79, 92], "promis": [8, 21, 41, 43, 45, 50, 92], "thrown": [8, 21], "lost": [8, 17, 79], "broken": [8, 13, 16, 18, 33, 63, 92], "safe": [8, 25, 28, 30, 45, 48, 64, 74, 92, 95], "someon": [8, 16, 17, 56, 64], "potenti": [8, 10, 24, 32, 39, 40, 46, 47, 48, 50, 58, 79, 84, 85, 95], "instanti": [8, 19, 64, 65, 68, 80, 85], "mechan": [8, 27, 47, 82, 83, 86], "unappli": 8, "backward": [8, 54, 58], "among": [8, 42, 47, 48, 64, 65, 72, 74, 83], "first_int": 8, "bad_first": 8, "19": [8, 27, 30, 45, 85], "compat": [8, 45, 66, 77, 81, 85], "substr": 8, "consult": [8, 18, 28, 40], "name1": 8, "arg1": 8, "name2": 8, "arg2": 8, "shorthand": 8, "tast": [8, 72], "convei": [8, 77], "clutter": [8, 64], "explicit": [8, 16, 34, 58, 85], "addx": [8, 80], "add5": 8, "normal": [8, 20, 22, 27, 28, 39, 40, 45, 76, 80, 84, 86, 89, 92], "multi": [8, 30, 44], "readi": [8, 22, 27, 47, 64, 76, 95], "breath": 8, "t3": [8, 41, 52, 64], "t4": 8, "implicit": [8, 55, 64, 68], "intuit": [8, 14, 30, 45, 47, 49, 55, 63, 67, 79, 84, 85, 92], "grab": [8, 95], "prefix": [8, 20, 22, 39, 41, 49, 64, 69, 85, 92, 95], "add3": 8, "unnecessari": [8, 30, 59], "bewar": [8, 25, 60], "pars": [8, 35, 45, 47, 61, 63, 64, 65, 67, 69, 84, 85, 92], "max": [8, 15, 28, 32, 44, 51, 53], "punctuat": [8, 9, 51, 65], "preced": [8, 15, 30, 63, 66, 68], "seemingli": [8, 85], "uninterest": 8, "100_000": 8, "100000": 8, "stack": [8, 18, 19, 27, 28, 36, 43, 45, 47, 49, 58, 65, 66, 77, 80, 85], "issu": [8, 12, 18, 20, 24, 30, 46, 48, 57, 77, 78, 87, 94, 95], "introductori": [8, 70, 72, 94], "store": [8, 12, 30, 40, 41, 42, 44, 46, 47, 48, 49, 57, 64, 65, 78, 80, 88, 92, 95], "local": [8, 18, 21, 23, 33, 36, 48, 81, 82, 85, 86, 94], "push": [8, 14, 16, 22, 42, 45, 66, 76, 77, 79, 80, 85, 91], "pop": [8, 14, 45, 66, 76, 77, 79, 80, 85, 91], "success": [8, 15, 17, 23, 41, 94], "eat": [8, 40], "harm": 8, "count_forev": 8, "sake": [8, 31, 49, 58, 62, 69, 77], "manifest": [8, 49], "1977": [8, 30, 60, 70], "steel": 8, "cooper": [8, 47, 50], "trick": [8, 16, 19, 40, 92], "count_aux": 8, "acc": [8, 19, 22, 30, 37, 42, 51, 54, 55, 58, 77], "count_tr": 8, "almost": [8, 16, 19, 29, 46, 81, 91], "accumul": [8, 15, 16, 17, 19, 22, 33, 37, 40, 41, 55, 60], "arriv": 8, "somewher": [8, 13], "tr": 8, "went": [8, 19, 27, 55, 62, 73, 94, 95], "effort": [8, 16, 33, 42, 95], "frame": [8, 36], "reus": [8, 73, 78, 80, 81, 83, 86], "finish": [8, 13, 14, 15, 19, 33, 40, 41, 47, 48, 49, 66, 67, 92, 95], "wast": [8, 13, 30, 42, 44, 59], "alloc": [8, 30, 40, 42, 74, 92], "recycl": 8, "beyond": [8, 9, 17, 24, 30, 35, 36, 42, 49, 74, 94, 95], "suitabl": [8, 65, 81], "calle": 8, "deal": [8, 14, 16, 42, 47, 55, 64, 66, 67, 77], "reduc": [8, 13, 14, 42, 44, 46, 64, 67, 78, 79], "1_000_000": [8, 30], "1000000": 8, "patholog": 8, "fixat": 8, "upon": [8, 16, 21, 22, 42, 45, 47, 66, 67, 70, 77, 80, 94], "draft": 8, "rethink": 8, "iter": [8, 14, 15, 23, 28, 42, 47, 60, 78, 79, 80, 88], "thousand": [8, 25], "inde": [8, 10, 14, 19, 20, 29, 35, 45, 47, 58, 62, 64, 65, 67, 73, 85, 92], "notabl": [8, 9, 49], "recip": [8, 16], "nutshel": 8, "main": [8, 9, 16, 24, 41, 47, 58, 62, 63, 66, 67, 77], "ingenu": 8, "fact_aux": [8, 77], "fact_tr": [8, 19], "exercis": [8, 13, 14, 23, 55, 94], "suffer": [8, 64], "50": [8, 30, 49, 78], "3258495067890909184": 8, "hopefulli": [8, 17, 68, 79, 86, 95], "along": [8, 9, 13, 14, 17, 19, 20, 25, 33, 41, 45, 48, 51, 64, 66, 71, 77, 83, 94, 95], "zfact_aux": 8, "pred": [8, 31], "mul": [8, 78], "zfact_tr": 8, "of_int": [8, 78], "30414093201713378043612608166064768844377641568960512000000000000": 8, "load": [8, 20, 40, 41, 42, 47, 50, 65, 66, 76, 78, 94], "symbol": [8, 12, 42, 65, 66, 68, 69, 92], "comparison": [8, 14, 22, 41, 49, 77, 79, 80, 94], "predecessor": 8, "subtract": [8, 45, 55, 65], "dive": [9, 50, 56, 61, 66, 85], "talk": [9, 16, 18, 30, 64, 66, 82, 85, 92], "secondari": 9, "skill": [9, 65, 70], "five": [9, 28, 40, 63, 94], "essenti": [9, 13, 17, 22, 33, 37, 42, 46, 47, 54, 61, 79, 80, 82, 83, 91, 92, 95], "textual": [9, 87], "whitespac": [9, 12, 65, 66, 85], "annoi": [9, 10, 16, 81, 87], "accept": [9, 12, 18, 45, 64, 66, 69, 85, 87], "wish": [9, 95], "unusu": [9, 27, 92], "apl": 9, "keyboard": [9, 47, 62, 69, 95], "tab": [9, 41, 42, 66, 95], "newlin": [9, 10, 47], "speak": [9, 40, 67, 75], "plural": 9, "singular": 9, "legal": [9, 25, 35, 39, 62, 77, 79, 92], "challeng": [9, 12, 14, 17, 23, 41, 47, 60, 61, 64, 77, 80, 94], "hurdl": 9, "overcom": 9, "approach": [9, 13, 14, 16, 18, 19, 23, 24, 47, 64, 70, 71], "fluent": 9, "mode": [9, 41, 70], "paradigm": [9, 11, 47], "bundl": [9, 72, 80], "lazi": [9, 41, 43, 44, 50], "virtu": [9, 79, 84], "core": [9, 22, 25, 27, 45, 47, 60, 63, 64, 74, 79, 83], "unabl": [9, 45], "integr": 9, "appar": [9, 18, 42, 58, 72, 76, 86, 95], "exposur": [9, 75], "ounit": [9, 13, 15, 20, 28, 29, 80, 87], "framework": [9, 29, 30, 33, 47, 80], "junit": [9, 33], "hunit": [9, 33], "besid": [9, 56, 65, 95], "abil": [9, 16, 17, 20, 21, 36, 47, 57, 74, 76, 79, 81], "print_char": 10, "print_float": 10, "bae": [10, 47, 94], "undon": 10, "boilerpl": [10, 45], "discard": [10, 33, 79], "depend": [10, 13, 14, 21, 25, 28, 33, 40, 42, 45, 47, 48, 57, 64, 66, 67, 70, 74, 80, 82, 85, 92, 95], "surround": [10, 30, 64, 65, 85], "warn": [10, 12, 21, 25, 27, 30, 63, 66, 92, 95], "truli": [10, 20, 28, 34, 48, 69], "intent": [10, 15, 16, 17, 23], "statist": [10, 20, 41, 42], "print_stat": 10, "num": 10, "print_newlin": [10, 58], "84": [10, 30], "39": [10, 30, 35, 81, 92], "shorten": 10, "println": [10, 45], "inherit": [10, 17, 80, 81, 83], "fortran": [10, 71, 85], "invent": [10, 13, 15, 17, 19, 32, 33, 42, 44, 45, 47, 48, 64, 67, 69, 78, 79, 80, 85, 92], "plain": [10, 25], "dozen": 10, "apart": [10, 30, 73], "content": [10, 32, 41, 45, 46, 47, 58, 70, 76, 77, 79, 87, 88, 91, 92, 94, 95], "flush": 10, "sit": [10, 64], "detect": [10, 12, 15, 18, 24, 30, 64, 67, 74, 95], "34": [10, 28, 30, 49, 80, 81], "37": [10, 30, 81], "sprintf": [10, 45, 78], "collect": [10, 13, 18, 20, 25, 37, 45, 51, 54, 58, 63, 64, 66, 71, 74, 80, 85], "string_of_stat": 10, "throughout": [11, 21, 25, 56, 64, 67, 68, 74, 77, 94], "deepen": 11, "pipelin": [11, 30, 53, 56, 60, 79, 85], "caml": [11, 36, 50, 60, 73, 75, 86, 93], "music": [11, 47], "javascript": [11, 47, 64], "cute": 11, "anim": [11, 64], "disnei": 11, "song": [11, 70], "interfac": [12, 14, 15, 18, 20, 21, 41, 42, 45, 46, 47, 74, 76, 77, 78, 79, 80, 81, 82, 83, 86, 91, 92, 94, 95], "jshell": [12, 54, 58, 77], "handi": 12, "reliant": 12, "repl": 12, "eval": [12, 14, 15, 95], "exit": [12, 20, 41, 47, 65], "kei": [12, 15, 20, 24, 26, 28, 41, 42, 44, 46, 47, 48, 50, 53, 62, 74, 78, 79, 82, 85], "dissect": 12, "infrastructur": [12, 47], "translat": [12, 14, 65, 67], "pdf": [12, 75, 94], "indent": [12, 47, 63, 77], "view": [12, 18, 22, 47, 77, 79, 82, 85, 94, 95], "md": 12, "myst": [12, 94], "markdown": [12, 94], "stai": [12, 40, 48], "dear": [12, 78], "arrow": [12, 64, 67, 80, 91, 95], "visual": [12, 13, 18, 47, 94], "amen": 12, "placehold": [12, 92], "unprint": [12, 77], "vocabulari": [12, 22, 24], "strategi": [12, 42, 49, 63, 65, 67], "mycod": 12, "unbound": [12, 16, 33, 35, 49, 64, 65, 67, 69, 77, 80, 81, 85, 87], "incr": [12, 47, 67, 87, 92], "bug": [12, 13, 15, 16, 18, 19, 21, 23, 24, 30, 32, 33, 47, 67, 74], "tempt": [12, 16, 17, 20, 24, 58, 64, 74, 76, 80, 85], "resist": 12, "temptat": 12, "stale": 12, "infeas": 13, "plu": [13, 15, 22, 40, 63, 64, 66, 69, 78], "sig": [13, 14, 15, 18, 20, 41, 42, 44, 45, 46, 47, 49, 69, 76, 77, 78, 79, 80, 81, 84, 85, 87, 91], "r1": [13, 78, 92], "r2": [13, 78, 92], "struct": [13, 14, 18, 29, 35, 41, 42, 44, 45, 46, 47, 49, 69, 76, 77, 78, 79, 80, 81, 84, 85, 87, 91], "af": [13, 14, 15, 18, 24, 42, 46, 49, 89, 91], "ri": [13, 14, 15, 18, 24, 41, 42, 47, 49, 89, 91, 92], "q1": [13, 40], "q2": [13, 40], "252": [13, 30], "nanosecond": 13, "59": [13, 30], "carefulli": [13, 16, 18, 24, 30, 33, 44, 47, 48, 73], "convinc": [13, 17, 24, 30, 48, 82], "correctli": [13, 18, 19, 20, 24, 27, 28, 42, 45, 47, 67, 92, 95], "126": [13, 30], "across": [13, 42, 49, 52, 74, 82], "whole": [13, 47, 48, 49, 61, 64, 95], "compris": 13, "fashion": [13, 47], "achiev": [13, 15, 30, 40, 42, 46, 48, 51, 58, 74, 78, 79, 80, 81, 86], "coverag": [13, 15, 23], "surfac": [13, 95], "boundari": [13, 21, 23], "corner": [13, 18, 25, 27], "elicit": 13, "path": [13, 18, 23, 28, 41, 46, 48, 95], "min_int": [13, 32], "max_int": 13, "quadrant": [13, 28], "evenli": 13, "advertis": 13, "list_max": [13, 28, 32], "spec": [13, 15, 16, 18, 21, 24], "realiz": [13, 16, 17, 25, 72], "arrang": [13, 42, 62], "ascend": 13, "accuraci": [13, 16], "signific": [13, 18, 64], "digit": [13, 66, 70], "consum": [13, 23, 94], "mem": [13, 14, 15, 18, 37, 48, 78, 79, 80, 81], "iff": [13, 48], "unchang": [13, 19, 25, 34, 42, 46, 48, 62, 67, 78, 79, 91], "increas": [13, 24, 28, 30, 40, 41, 44, 48, 57, 78], "white": [13, 66, 91], "condition": [13, 56], "unexecut": 13, "explor": [13, 30, 62, 95], "max3": 13, "trigger": [13, 15, 23, 24, 42], "absenc": [13, 19, 37, 74, 85], "against": [13, 22, 25, 27, 28, 30, 34, 45, 49, 51, 55, 58, 63, 64, 66, 67], "invari": [13, 15, 23, 28, 41, 44, 47, 48, 76, 78, 85], "rep": [13, 18, 23, 41, 42, 46], "advantag": [13, 16, 18, 49, 55, 77], "parallel": [13, 47, 50], "rewritten": [13, 62, 85], "caught": [13, 18, 74], "disadvantag": [13, 16], "high": [13, 14, 16, 20, 41, 42, 47, 58, 61, 64, 65, 66, 77], "aid": [13, 95], "assess": 13, "bisect_ppx": [13, 95], "instrument": 13, "mainli": 13, "ppx": 13, "report": [13, 69, 74, 94], "got": [13, 14, 17, 33, 47, 49, 66], "merg": [13, 64, 80], "test_sort": 13, "skeleton": 13, "dune": [13, 20, 33, 41, 47, 66, 76, 78], "ounit2": [13, 20, 27, 33, 87, 95], "backend": 13, "bisectnnnn": 13, "newli": [13, 35, 42, 80, 87, 92], "_coverag": 13, "percent": 13, "uncom": 13, "delet": [13, 33, 41, 48], "tradeoff": [13, 40, 42, 58, 59, 79], "nondeterminist": [13, 47, 50, 92, 93], "affect": [13, 41, 42, 64, 72, 74, 79, 92], "runner": 13, "sequenti": [13, 45, 47, 50, 64], "ceas": 13, "tackl": 14, "proof": [14, 17, 19, 22, 23, 24, 30, 47, 48, 73], "analog": [14, 46, 47, 48, 49, 65, 77, 83, 85, 89], "complex": [14, 16, 18, 24, 38, 40, 47, 50, 74, 78, 79, 82, 83], "effici": [14, 15, 18, 19, 26, 28, 30, 31, 40, 41, 42, 43, 46, 48, 49, 50, 53, 54, 56, 58, 59, 62, 64, 67, 78, 79, 90, 92, 93], "map": [14, 15, 18, 25, 26, 28, 29, 35, 39, 41, 43, 45, 49, 50, 53, 54, 55, 56, 59, 60, 62, 64, 65, 69, 74, 78, 85, 86, 88, 89], "balanc": [14, 16, 21, 53, 64, 66, 70, 79, 80], "binari": [14, 19, 22, 28, 36, 37, 41, 42, 44, 51, 62, 64, 65, 66, 67, 69, 78, 79, 80], "pursu": [14, 84], "algebra": [14, 19, 22, 23, 29, 36, 38, 45, 48, 60, 64, 74, 78, 79], "school": [14, 64], "is_empti": [14, 15, 76, 77, 79, 80, 85], "peek": [14, 33, 45, 76, 77, 79, 80, 85, 91], "cautious": 14, "relax": [14, 15, 41, 48, 66, 79, 92], "prohibit": 14, "alon": [14, 67, 95], "chosen": [14, 20, 67, 85], "liststack": [14, 76, 77, 79, 80, 85], "hd": [14, 27, 28, 30, 41, 49], "con": [14, 15, 18, 25, 26, 30, 36, 37, 40, 41, 42, 46, 49, 51, 55, 58, 76, 79, 80, 81], "tl": [14, 28, 30, 41, 49, 79], "front": [14, 17, 24, 26, 39, 58, 65, 68, 79, 87, 92, 95], "enq": 14, "deq": 14, "3a": 14, "3b": 14, "4a": 14, "4b": 14, "obvious": [14, 15, 16, 19, 49, 62, 66, 78, 92], "enqueu": [14, 40, 47, 78, 79], "dequeu": [14, 40, 78, 79], "listqueu": [14, 78, 79], "lemma": [14, 15, 19, 22, 48], "xs": [14, 22, 30, 33], "ys": [14, 22], "qed": [14, 19, 22], "batchedqueu": [14, 78, 79], "rev": [14, 15, 20, 28, 49, 54, 55, 58, 79], "abstractli": [14, 18, 42, 47, 82], "adopt": [14, 19, 47, 57, 64], "distribut": [14, 15, 41, 42, 48, 66, 74, 95], "unstuck": 14, "canon": [14, 23], "categor": [14, 15], "queri": [14, 15, 23, 42, 47], "subcas": [14, 64], "6a": 14, "6b": 14, "game": [15, 47, 49], "deviou": [15, 16], "num_vowel": 15, "is_sort": [15, 20], "is_prim": 15, "is_palindrom": 15, "second_largest": 15, "depth": [15, 28, 51], "c_n": 15, "dotsb": [15, 40], "c_0": 15, "dens": 15, "coeffici": 15, "incomplet": [15, 16], "3x": [15, 40], "subvert": 15, "impl": [15, 81], "interv": [15, 42], "rep_ok": [15, 18], "to_str": [15, 18, 24, 78, 84], "install_print": [15, 77, 78, 84], "dictionari": [15, 18, 26, 29, 35, 36, 42, 50, 53, 62, 65, 67, 79, 80], "k": [15, 19, 22, 26, 40, 41, 42, 46, 79], "heavi": [15, 77], "box": [15, 19, 23, 32, 41, 45, 47], "listset": [15, 18, 79, 80, 81], "glass": [15, 19, 23], "bisect": 15, "uniqlistset": [15, 18, 79, 80, 81], "qcheck": [15, 95], "gen": [15, 20, 67], "generate1": [15, 20], "length": [15, 16, 18, 20, 25, 28, 30, 40, 42, 44, 46, 48, 49, 53, 55, 64, 74, 77, 78, 79, 85, 88], "is_even": [15, 20], "divisor": [15, 45, 78], "buggi": [15, 24, 25, 33], "odd_divisor": 15, "exceed": 15, "smallest": [15, 24, 48], "avg": 15, "h1": [15, 20, 28, 49], "h2": [15, 20, 28, 44, 49], "exp": [15, 41], "induct": [15, 23, 30, 36, 48, 67, 69], "fibi": 15, "prev": 15, "curr": 15, "expsq": 15, "strong": [15, 79], "redo": [15, 64, 95], "mult": [15, 66, 67, 69], "append": [15, 22, 30, 36, 53, 58, 66, 79], "nil": [15, 25, 30, 36, 37, 46, 49, 51], "dist": 15, "revers": [15, 16, 20, 30, 40, 45, 54, 55, 58, 79, 87], "lst1": [15, 18, 22, 30, 54, 58, 92], "lst2": [15, 18, 22, 30, 54, 58, 92], "involut": [15, 20, 22], "reflect": [15, 22, 64, 71, 77, 81, 87], "leaf": [15, 22, 28, 36, 37, 41, 48, 51], "fold": [15, 18, 41, 53, 56, 60, 80, 88], "fold_left": [15, 16, 18, 22, 42, 51, 53, 55, 59, 88, 89], "fold_right": [15, 22, 51, 53, 55, 80, 81, 89], "commut": [15, 22, 23, 55], "concat": [15, 18, 28, 55], "concat_l": 15, "concat_r": 15, "proposit": [15, 67], "equat": [15, 22, 23, 45, 56, 64, 84], "strikingli": 15, "bag": 15, "multiset": 15, "blend": [15, 65, 67, 71], "signatur": [15, 18, 20, 41, 47, 69, 76, 77, 78, 80, 81, 83, 84, 85, 86], "decreas": [15, 20, 28, 40], "began": [16, 70], "audienc": [16, 23, 76], "verbos": [16, 58, 64, 76, 85], "commun": [16, 17, 23, 47, 72, 73, 94], "ingredi": 16, "forget": [16, 25, 27, 28, 30, 47, 65, 67, 95], "sqr": 16, "accur": [16, 85, 87], "Its": [16, 18, 30, 42, 47, 55, 60, 64, 80, 85], "wors": [16, 45, 48, 59, 81, 95], "0e": 16, "verbiag": 16, "plow": 16, "struck": 16, "breviti": 16, "partial": [16, 18, 19, 23, 25, 30, 45, 52, 55, 58, 64, 67, 81], "domain": [16, 18, 56, 65, 74], "straightforward": [16, 85, 94], "legitim": 16, "bad": [16, 18, 32, 40, 41, 42, 48, 59, 79, 81, 90], "establish": [16, 17, 23, 24, 44, 48, 69, 90], "contract": [16, 21, 82], "burden": [16, 74], "onto": [16, 30, 40, 42, 46, 49, 66, 77, 79, 85], "throw": [16, 44, 48, 55, 92], "constraint": [16, 18, 25, 42, 48, 63, 68, 86], "improperli": 16, "misbehav": 16, "recommend": [16, 75, 95], "tend": [16, 18, 24, 42, 67], "encourag": 16, "wrap": [16, 32, 40, 41, 45, 49], "complain": [16, 85], "silent": 16, "innumer": 16, "secur": [16, 20, 42, 74, 92], "met": [16, 21], "avoid": [16, 24, 25, 30, 44, 45, 47, 48, 56, 63, 66, 68, 72, 77, 79, 81, 84, 85], "necess": 16, "distract": [16, 66], "illustr": [16, 40, 49, 77, 85, 92], "meet": [16, 22, 85], "refin": [16, 24], "settl": 16, "nth": [16, 28, 35, 41, 44, 49, 53], "her": [16, 58, 85], "advoc": [16, 24], "ruthless": 16, "561": 16, "quak": 16, "arena": 16, "engin": [16, 20, 23, 24, 64, 67, 80, 81, 94, 96], "shovel": 16, "wield": 16, "interspers": [16, 40], "necessari": [16, 18, 21, 30, 40, 41, 45, 55, 64, 65, 67, 79, 80, 95], "pictur": 16, "paragraph": [16, 47, 79, 94, 95], "mark": [16, 48, 63, 65, 66, 80], "brief": [16, 20, 65, 85], "number_of_zero": 16, "the_list": 16, "list_el": 16, "emb": [16, 65], "is0": 16, "zs": [16, 22], "i_count": 16, "hover": [16, 95], "hope": [17, 51], "thought": [17, 27, 56], "bore": 17, "altogeth": [17, 47], "postpon": 17, "matur": 17, "ground": 17, "oppos": [17, 22], "head": [17, 21, 25, 28, 30, 32, 36, 40, 41, 49, 51, 54, 55, 58, 67, 79, 82], "er": 17, "cognit": 17, "importantli": 17, "capsul": 17, "unreach": 17, "archeolog": 17, "evid": [17, 19, 22, 23, 33], "unintellig": 17, "empathi": 17, "commit": 17, "distant": 17, "fleet": 17, "somedai": [17, 58, 80], "todai": [17, 70, 71], "clue": [17, 35], "breadcrumb": 17, "scientist": [17, 24, 47], "demand": [17, 49, 54], "arrog": 17, "humil": 17, "beings": 17, "amazingli": [17, 29, 55], "delud": 17, "echo": [17, 47, 70, 78], "chamber": 17, "media": 17, "demonstr": [17, 31, 40, 41, 49, 63, 79, 92], "ten": 17, "absolut": [17, 19, 24, 40, 41, 67], "weren": 17, "clever": [17, 47, 48, 49, 58, 79], "replic": [17, 18], "crucial": [17, 18, 23, 33, 40, 74, 79, 80, 82], "captur": [17, 46, 63, 68], "furthermor": [17, 64], "craft": 17, "meanwhil": [17, 47, 58, 65], "critic": [17, 21, 24, 26, 95], "live": [17, 81, 94, 95], "intern": [18, 20, 44, 47, 55, 68, 76, 77, 96], "relev": [18, 66, 75], "inappropri": 18, "risk": 18, "evolv": [18, 47, 73, 74, 85], "sync": [18, 95], "categori": [18, 45, 51, 80], "aris": [18, 48, 78], "pure": [18, 19, 40, 45, 47, 48, 50, 79, 86, 90, 93], "signal": 18, "item": [18, 37, 77, 80, 81, 84, 85], "unord": 18, "member": [18, 37, 48, 83, 87], "rem": 18, "minu": [18, 35, 40, 64, 66, 78], "cardin": [18, 35, 80], "s1": [18, 45, 47, 64, 80, 85], "s2": [18, 45, 47, 64, 85], "inter": [18, 30], "simplic": [18, 79], "duplic": [18, 20, 41, 42, 45, 58, 66, 76, 78, 79, 80, 81], "filter": [18, 30, 41, 42, 53, 55, 56, 60, 80], "sort_uniq": [18, 42, 53, 79, 80, 81], "judg": [18, 30, 50], "rest": [18, 30, 33, 44, 45, 47, 62, 64, 65, 77, 79, 80, 81, 82, 91, 95], "lack": [18, 19, 77], "act": [18, 31], "ideal": 18, "invis": [18, 64], "belong": [18, 28, 76], "a1": [18, 41, 46, 49, 53, 55, 64], "b1": [18, 41, 49], "bm": 18, "reinforc": 18, "redund": [18, 30, 33, 44, 65], "hypothet": [18, 45, 85], "readabl": [18, 55, 69, 79, 85], "conveni": [18, 27, 30, 48, 49, 55, 64, 65, 69, 74, 79, 80], "queue": [18, 43, 58, 78], "heap": [18, 47], "string_of_v": 18, "uniq": 18, "interior": [18, 48], "to_list": [18, 79, 91, 92], "formatt": [18, 77, 78, 84], "encapsul": [18, 45, 74, 78, 83, 84, 86], "usabl": [18, 77, 85], "programmat": 18, "obtain": [18, 41, 48, 49, 63], "undefin": [18, 31], "preserv": [18, 48, 65, 68, 69, 80], "isol": [18, 82], "provabl": [18, 65], "incom": 18, "convent": [18, 30, 77, 85], "outsid": [18, 41, 44, 64, 77, 81, 85, 87, 92], "saniti": 18, "copiou": 18, "creation": [18, 48, 88, 92], "compare_length": 18, "linearithm": [18, 53, 79, 81], "destroi": [18, 42], "previous": [18, 45, 51, 56, 64, 69, 77, 80, 92], "appropri": [18, 19, 41, 42, 51, 80, 85], "macro": 18, "reinstat": 18, "rep_ok_expens": 18, "codebas": 18, "noassert": 18, "disabl": [18, 47, 95], "portion": 18, "assur": [19, 24], "presenc": [19, 30], "edsger": 19, "w": [19, 25, 63, 67, 68, 92], "dijkstra": [19, 23], "useless": [19, 21], "premis": 19, "straightforwardli": 19, "41": [19, 30, 85, 92], "token": [19, 63, 65, 66, 68, 96], "axiom": [19, 78], "extension": [19, 23], "polymorph": [19, 28, 36, 68, 74, 77, 85, 92], "refus": 19, "compos": [19, 45, 47, 56, 60, 82], "composit": [19, 35, 42, 47, 50, 53, 64], "sumto": 19, "summat": [19, 35, 41, 55], "claim": [19, 22, 28, 47, 73, 79, 85], "ih": [19, 22], "sumto_clos": 19, "corollari": 19, "se": 19, "elid": [19, 20, 55], "facti": [19, 22], "while": [19, 20, 42, 43, 46, 47, 48, 72, 73, 77, 80, 82, 83, 88, 89, 94, 95], "share": [19, 30, 36, 46, 47, 55, 76, 79, 80, 84, 86, 94, 95], "decrement": [19, 45, 88, 92], "unfortun": [19, 20, 42, 45, 49, 67, 76, 79, 80], "neither": [19, 45, 48, 51, 55, 79, 90], "abort": [19, 78], "astrai": 19, "moment": [19, 40, 85], "f_r": 19, "op": [19, 22, 45, 55, 63], "meant": [19, 20, 30, 62, 67, 69, 77, 91, 92, 95], "f_i": 19, "f_tr": 19, "fact_i": 19, "held": [19, 48], "sumto_r": 19, "sumto_i": 19, "sumto_tr": 19, "thank": [19, 55], "halt": [19, 41], "smart": 19, "heurist": 19, "despit": [19, 46, 79, 92, 95], "x0": 19, "x3": [19, 67], "finit": [19, 25, 41, 49, 65, 66, 88], "descent": 19, "bottom": [19, 48, 59, 77, 80, 81, 95], "hit": [19, 34, 35], "reach": [19, 22, 27, 40, 41, 42, 46, 47, 49, 63, 67, 69, 89], "ack": 19, "ackermann": 19, "famou": [19, 47], "lexicograph": 19, "fuzz": 20, "feed": 20, "behav": [20, 24, 41, 45, 47, 62, 63, 64, 77, 79, 86, 91], "believ": [20, 72, 74], "crash": [20, 92], "encrypt": [20, 45], "decrypt": [20, 45], "enigma": 20, "incred": [20, 72], "vulner": [20, 92], "digress": 20, "facil": 20, "unpredict": 20, "pseudorandom": [20, 41], "discern": [20, 69], "determinist": [20, 24, 50, 66, 92, 93], "seed": 20, "pseudo": 20, "pseud\u0113": 20, "prng": 20, "phrase": [20, 56, 78, 92], "44": [20, 28, 30], "85": [20, 30, 92], "82": [20, 30], "Not": [20, 40, 44, 46, 91, 92], "eh": 20, "cryptographi": 20, "simul": [20, 41, 67, 80], "Their": [20, 46, 48, 88], "get_stat": 20, "request": [20, 47, 49, 79, 87], "self_init": 20, "make_self_init": 20, "sampl": [20, 24, 89], "dev": 20, "urandom": 20, "96": [20, 30], "51": [20, 30], "rand": 20, "suppli": [20, 77, 85], "small_int": 20, "int_rang": 20, "list_siz": 20, "small_str": 20, "randomli": [20, 42, 48, 95], "characterist": [20, 30, 56], "pseudorandomli": 20, "shrink": 20, "stat": [20, 41, 42], "qcheck2": 20, "abstr": [20, 42, 47, 76, 77, 79, 80, 84], "qcheck_runn": 20, "run_test": 20, "2k": 20, "65051295": 20, "1mfailur": 20, "0m": 20, "anon_test_1": 20, "printer": [20, 33, 77, 78, 84], "ran": [20, 33, 95], "run_tests_main": 20, "run_test_tt_main": [20, 27, 33], "to_ounit2_test": 20, "told": 20, "properli": [20, 63, 85], "privat": [20, 47, 77, 81, 86, 94], "luckili": 20, "list_of_s": 20, "my_test": 20, "77": [20, 30], "double_check": 20, "1msuccess": 20, "drawn": 20, "bring": [20, 33, 40, 41, 85], "rev_involut": 20, "uniformli": [20, 42], "nat": [20, 22, 31, 41, 49], "bias": 20, "small_nat": 20, "anon_test_4": 20, "mli": [21, 76, 78, 80], "spell": [21, 49], "blame": [21, 82], "misus": [21, 42, 76], "deliv": [21, 47], "feasibl": 21, "team": [21, 24, 74, 82, 83, 94], "everyon": [21, 47, 82], "agre": [21, 67, 85], "slip": 21, "crack": 21, "conflict": 21, "suffici": [21, 42], "research": [21, 24, 64, 75, 80], "misunderstand": 21, "decis": [21, 51, 85], "obsolet": 21, "modular": [21, 70, 83, 86], "hide": [21, 47, 50, 77, 82, 83, 86, 92], "disclos": 21, "modifi": [21, 23, 28, 33, 40, 44, 48, 77, 78, 81, 86, 89, 91, 92, 94], "reimplement": [21, 54], "enhanc": 21, "bottleneck": 21, "barrier": 21, "vice": [21, 31, 38, 42, 52, 85], "versa": [21, 31, 38, 42, 52, 85], "enforc": [21, 47, 82], "promot": [21, 51], "hung": 22, "mismatch": [22, 67, 69, 77, 81, 85], "successor": [22, 31, 91], "unari": [22, 65, 84], "decim": 22, "trivial": [22, 26, 33, 41, 45, 47, 64], "concept": [22, 47, 66, 67, 85], "inner": [22, 30, 45, 77, 85], "outer": [22, 30], "interchang": [22, 80], "resum": [22, 95], "restart": [22, 47, 87], "succeed": [22, 49, 55, 81], "wasn": [22, 92], "fluke": 22, "subtre": [22, 37, 41, 44, 48, 51, 78, 80], "ih1": 22, "ih2": 22, "mirror": 22, "imag": 22, "styliz": 22, "expr": [22, 63, 66, 67, 69], "uop": 22, "uminu": 22, "bop": [22, 62, 64, 66, 67, 69], "bplu": 22, "bminu": 22, "bleq": 22, "unop": 22, "binop": [22, 66, 67, 69], "strike": [22, 64], "adt": [22, 48], "organiz": 22, "methodolog": [23, 24], "complementari": [23, 47], "orthogon": [23, 67], "hoar": [23, 32], "toni": [23, 32], "weakest": [23, 48], "walkthrough": [23, 24], "diagram": [23, 28, 46], "minim": [23, 24], "ok": [23, 33, 34, 45, 77], "satisfact": 23, "barbara": [23, 70, 85], "liskov": [23, 70, 85], "john": [23, 50, 60, 66, 70], "guttag": [23, 70], "cousineau": 23, "michel": 23, "mauni": 23, "cambridg": [23, 50, 79], "1998": [23, 70], "paulson": 23, "1996": [23, 70], "richard": 23, "bird": 23, "2015": 23, "foundat": [23, 72, 86, 95], "volum": [23, 48], "benjamin": [23, 68, 86], "pierc": [23, 68, 86], "et": 23, "al": 23, "http": 23, "softwarefound": 23, "ci": 23, "upenn": 23, "edu": [23, 95], "robert": [23, 79, 86, 96], "mccloskei": 23, "www": 23, "scranton": 23, "mcclosk": 23, "se507": 23, "alg_specs_lec": 23, "theori": [23, 35, 45, 51, 56, 60, 62, 64, 66, 68, 72, 80], "shari": 23, "lawrenc": 23, "pfleeger": 23, "joann": 23, "atle": 23, "prentic": 23, "hall": 23, "kenneth": 23, "slonneg": 23, "barri": 23, "kurtz": 23, "addison": [23, 60], "weslei": [23, 60], "1995": [23, 71], "muffi": 23, "thoma": 23, "david": [23, 79], "watt": 23, "ehrig": 23, "mahr": 23, "springer": 23, "verlag": 23, "1985": 23, "treatment": [23, 68, 86], "inspir": [23, 40, 51, 67, 78], "indebt": [23, 56, 60], "materi": [23, 70, 94], "princeton": [23, 42], "co": [23, 70, 95], "326": 23, "walker": 23, "confid": 24, "assist": [24, 60], "coder": 24, "hurt": 24, "drive": 24, "prepar": [24, 67, 71], "beforehand": [24, 95], "qualiti": 24, "blameless": 24, "role": [24, 82], "navig": [24, 47, 95], "devil": 24, "clearer": [24, 45, 47, 59, 81], "shorter": [24, 30, 42, 58, 67, 77], "partner": 24, "trade": 24, "conduct": 24, "fagan": 24, "1976": 24, "thorough": 24, "75": [24, 30, 41, 42], "inspector": 24, "li": [24, 74], "valuabl": 24, "concurr": [24, 41, 43, 50, 74], "subtl": [24, 35, 48, 49, 58], "increasingli": 24, "emul": 24, "significantli": [24, 60, 66], "cheaper": 24, "wander": 24, "discoveri": [24, 64, 75], "refut": 24, "crux": 24, "experiment": 24, "afraid": 24, "invalu": 24, "slap": 24, "danger": [24, 92, 95], "sun": [25, 35, 39], "mon": [25, 34, 35, 39], "tue": [25, 39], "wed": [25, 39], "fri": [25, 39], "sat": [25, 39], "ptype": [25, 28, 34, 35, 39], "tnormal": [25, 34, 35, 39], "tfire": [25, 34, 35, 39], "twater": [25, 34, 35, 39], "peff": [25, 39], "enorm": [25, 39], "enotveri": [25, 39], "esup": [25, 39], "shape": [25, 26, 28, 30, 48, 63, 74], "center": [25, 48], "rect": 25, "rectangl": [25, 26], "pi": [25, 30, 34, 35, 76, 79, 85], "y2": 25, "underli": [25, 35, 40, 42, 47, 55, 66, 67, 80, 81, 85, 94, 95], "tupl": [25, 29, 30, 36, 52, 63, 67, 88], "string_or_int": 25, "string_or_int_list": 25, "lst_sum": 25, "discrimin": 25, "double_right": 25, "c1": [25, 39, 44, 49, 64], "cn": [25, 39], "ti": [25, 34, 35, 48, 70], "color": [25, 41, 48, 91, 95], "blue": [25, 85], "string_of_color": 25, "green": [25, 85], "sudden": 25, "blind": 25, "wildcard": [25, 30, 36, 63], "robust": [25, 30, 55, 79], "life": [25, 63, 71], "alert": 25, "intlist": 25, "lst3": [25, 92], "lst123": 25, "mylist": [25, 37, 49, 51], "synonym": [25, 28, 36, 41, 45, 78, 80, 81], "cyclic": [25, 92], "circular": 25, "lst_hi": 25, "parametr": [25, 36, 64, 74], "perfectli": [25, 64, 85], "constrain": [25, 84], "occasion": [25, 40], "infti": 25, "fin_or_inf": 25, "infin": 25, "downsid": [25, 59], "backquot": 25, "neginfin": 25, "steer": 25, "nonagon": 26, "icosagon": 26, "bother": [26, 64, 79], "assoc": [26, 28, 42, 69, 79], "assoc_opt": [26, 42], "exn": [27, 28, 41, 47], "catch": [27, 32, 33, 36, 41, 47], "pn": [27, 30, 34, 35, 63], "pun": [27, 47], "packet": [27, 36], "oop": [27, 49, 85], "subexpress": [27, 35, 55, 58, 63, 64, 67, 69], "offici": 27, "nuanc": 27, "stipul": [27, 45, 76], "forgiven": 27, "propag": [27, 45, 47], "match_failur": [27, 30, 34], "p3": 27, "p4": 27, "assert_rais": 27, "succe": [27, 30, 33, 34, 50, 65, 67, 80, 87, 94], "thunk": [27, 43, 49, 50], "suspend": [27, 43, 49], "delai": [27, 41, 47, 49, 50, 64, 78, 85], "typecheck": [27, 69], "fifth": [28, 66, 95], "any_zero": 28, "drop": [28, 49, 64, 94], "revis": [28, 33, 37, 45, 63, 64, 70, 77], "unimod": 28, "is_unimod": 28, "monoton": 28, "segment": 28, "powerset": 28, "print_int_list": 28, "fill": [28, 41, 42, 44, 45, 47, 63, 78, 89], "first_nam": 28, "last_nam": 28, "gpa": [28, 89], "pokerecord": 28, "pok\u00e9mon": [28, 34, 39], "poketyp": 28, "fire": 28, "water": 28, "pokemon": [28, 34], "hp": [28, 34, 35], "charizard": 28, "78": [28, 30], "squirtl": 28, "safe_hd": 28, "safe_tl": 28, "pokefun": 28, "max_hp": 28, "tripl": [28, 34, 35, 36], "2013": [28, 70], "era": [28, 72], "is_befor": 28, "januari": 28, "februari": 28, "leap": 28, "earliest": [28, 30, 70], "card": 28, "deck": 28, "rank": 28, "jack": 28, "queen": 28, "king": 28, "ac": [28, 85], "club": 28, "diamond": 28, "seven": 28, "spade": 28, "borrow": 28, "wikipedia": 28, "lie": 28, "axi": [28, 48], "quad": [28, 40, 53, 56], "iii": [28, 95], "iv": 28, "po": 28, "quadrant_when": 28, "same_shap": 28, "list_max_str": 28, "is_bst": 28, "visit": [28, 37], "enum": [29, 39], "paus": [29, 45, 46, 49, 64], "couldn": [29, 77, 80, 90], "null": [29, 32, 92], "behind": [29, 45, 49, 62, 71, 74, 77, 94], "singli": [30, 35, 36, 58, 79], "statu": [30, 85], "mainstream": [30, 57, 71, 72, 80, 94], "elt": [30, 55], "prepend": [30, 36, 49], "truct": 30, "verb": 30, "sweeter": 30, "sweet": [30, 58], "desugar": [30, 35, 36, 63, 67, 68], "consequ": [30, 64], "ei": [30, 35, 88], "video": [30, 35, 61, 87, 94, 96], "uh": 30, "fit": [30, 67], "inc_first": 30, "proportion": 30, "saw": [30, 41, 44, 45, 60, 64, 65, 76, 79, 80, 84, 85], "vertic": 30, "illeg": [30, 67], "expand": [30, 94], "b_1": 30, "b_2": 30, "cup": [30, 72], "b_i": [30, 35], "bigcup_i": [30, 35], "justif": 30, "ta": [30, 70], "tb": 30, "emit": 30, "defend": 30, "sorri": 30, "cell": [30, 46, 47, 92, 93, 94], "split": [30, 77, 79, 80], "jupyterbook": 30, "unus": [30, 42, 67], "latent": 30, "length_i": 30, "face": [30, 47, 76], "highlight": [30, 94, 95], "typeset": [30, 69, 94], "npl": 30, "caller": [30, 32], "sum_tr": 30, "sum_plus_acc": 30, "entail": 30, "post": [30, 76, 94], "medium": [30, 36], "overhead": [30, 65], "long_list": 30, "16": [30, 40, 41, 42, 44, 55, 63, 85, 86], "23": [30, 41], "26": [30, 33, 46, 80, 85], "35": [30, 80, 85], "40": [30, 40, 96], "45": [30, 33, 47], "46": 30, "47": [30, 77], "48": 30, "49": 30, "53": 30, "54": 30, "55": [30, 49], "56": 30, "57": 30, "58": 30, "61": 30, "66": [30, 77], "67": 30, "68": 30, "69": 30, "70": 30, "71": 30, "72": 30, "73": 30, "74": 30, "76": 30, "79": 30, "80": [30, 73, 95], "81": 30, "83": [30, 33], "86": 30, "87": 30, "88": 30, "90": [30, 66], "91": 30, "92": 30, "93": 30, "94": 30, "95": 30, "97": 30, "98": 30, "99": 30, "101": 30, "102": 30, "103": 30, "105": 30, "106": 30, "107": 30, "108": 30, "109": 30, "110": [30, 63, 67], "111": 30, "112": 30, "113": 30, "114": 30, "115": 30, "116": 30, "117": 30, "118": 30, "119": 30, "120": [30, 92], "121": 30, "122": 30, "124": 30, "125": 30, "127": 30, "128": 30, "129": 30, "130": 30, "131": 30, "132": 30, "133": 30, "134": 30, "135": 30, "136": 30, "137": [30, 80], "138": 30, "139": 30, "140": 30, "141": 30, "142": 30, "143": 30, "144": 30, "145": [30, 46], "146": 30, "147": [30, 46], "148": 30, "149": 30, "151": 30, "152": 30, "153": 30, "154": 30, "155": 30, "156": 30, "157": 30, "158": 30, "159": 30, "160": 30, "161": 30, "162": 30, "163": 30, "164": 30, "165": 30, "166": 30, "167": 30, "168": 30, "169": 30, "170": 30, "171": 30, "172": 30, "173": 30, "174": 30, "175": 30, "176": 30, "177": 30, "178": 30, "179": 30, "180": 30, "181": 30, "182": 30, "183": 30, "184": 30, "185": 30, "186": 30, "187": 30, "188": 30, "189": 30, "190": 30, "191": 30, "192": 30, "193": 30, "194": 30, "195": 30, "196": 30, "197": 30, "198": 30, "199": 30, "200": [30, 40, 94, 96], "201": 30, "202": 30, "203": 30, "204": 30, "205": 30, "206": 30, "207": 30, "208": 30, "209": 30, "210": 30, "211": [30, 70], "212": [30, 70], "213": 30, "214": 30, "215": 30, "216": 30, "217": 30, "218": 30, "219": 30, "220": 30, "221": 30, "222": 30, "223": 30, "224": 30, "225": 30, "226": 30, "227": 30, "228": 30, "229": 30, "230": 30, "231": 30, "232": 30, "233": 30, "234": 30, "235": 30, "236": 30, "237": 30, "238": 30, "239": 30, "240": 30, "241": 30, "242": 30, "243": 30, "244": 30, "245": 30, "246": 30, "247": 30, "248": 30, "249": 30, "251": 30, "253": 30, "254": 30, "255": 30, "256": 30, "257": 30, "258": 30, "259": 30, "260": 30, "261": 30, "262": 30, "263": 30, "264": 30, "265": 30, "266": 30, "267": 30, "268": 30, "269": 30, "270": 30, "271": 30, "272": 30, "273": 30, "274": 30, "275": 30, "276": 30, "277": 30, "278": 30, "279": 30, "280": 30, "281": 30, "282": 30, "283": 30, "284": 30, "285": 30, "286": 30, "287": 30, "288": 30, "289": 30, "290": 30, "291": 30, "292": 30, "293": 30, "294": 30, "295": 30, "296": 30, "297": 30, "298": 30, "len": 30, "succ": [31, 64], "versu": [31, 42, 58], "iszero": 31, "n1": 31, "n2": 31, "pred_n": 31, "int_of_nat": 31, "nat_of_int": 31, "sensibl": 32, "sir": 32, "billion": 32, "dollar": 32, "monad": [32, 41, 43, 47, 50], "unconstrain": 32, "habit": [32, 40, 95], "workflow": 33, "assert_equ": [33, 80], "singleton": [33, 80], "two_el": 33, "configur": [33, 42, 62, 68, 95], "project": [33, 42, 47, 66, 74], "disappear": [33, 47, 62], "fff": 33, "01": [33, 41], "ounitassert": 33, "assert_failur": 33, "src": [33, 66], "lib": 33, "advanc": [33, 35, 40, 42, 50, 64, 71, 74, 75, 77, 79, 80, 86, 88, 95], "ounitrunn": 33, "run_one_test": 33, "ail": 33, "onetwo": 33, "label": [33, 48, 63], "tester": 33, "make_sum_test": 33, "expected_output": 33, "ahead": [33, 42, 47, 64, 73, 95], "tdd": [33, 36], "exceedingli": 33, "sundai": 33, "mondai": [33, 40], "tuesdai": [33, 40], "wednesdai": [33, 40], "thursdai": [33, 40], "fridai": [33, 40], "saturdai": 33, "next_weekdai": 33, "weekdai": 33, "unimpl": 33, "tue_after_mon": 33, "weekend": 33, "wed_after_tu": 33, "thu_after_w": 33, "fri_after_thu": 33, "make_next_weekday_test": 33, "mon_after_fri": 33, "mon_after_sat": 33, "mon_after_sun": 33, "rare": [33, 40, 42, 64, 69, 79], "liter": [34, 47, 66, 77], "ch1": 34, "ch2": 34, "ch": 34, "uppercas": [34, 39, 85], "get_hp": 34, "thrd": 34, "quadrupl": [34, 56], "great": [35, 42, 45, 46, 55, 61, 62, 67, 71, 74, 75, 78, 79, 92, 93, 95], "pok\u00e9": 35, "namespac": [35, 83, 85, 86, 87], "charmand": 35, "f1": [35, 49], "fn": 35, "fi": 35, "hash": [35, 41, 43, 44, 48, 50, 79, 93], "g1": 35, "gn": 35, "gi": 35, "disjoint": 35, "sigma": 35, "cartesian": 35, "lightweight": [36, 47], "lengthi": [36, 85], "exploit": [36, 56, 81], "workhors": 36, "theoret": 36, "driven": 36, "child": [37, 48, 51], "sublist": [37, 54], "travers": [37, 41, 55, 79], "preorder": [37, 41, 51], "beautifulli": 37, "quadrat": [37, 40, 41, 58, 78, 81], "unbalanc": [37, 41], "preorder_lin": 37, "pre_acc": 37, "vector": [38, 53, 89], "exchang": 38, "get_x": 38, "int_of_dai": 39, "win": [39, 46, 55, 90], "attack": 39, "consider": [39, 64, 69, 85, 86], "rehash": [40, 41, 42], "defeat": 40, "excus": 40, "acknowledg": 40, "undertak": 40, "spread": [40, 74], "creativ": [40, 96], "sushi": 40, "ramen": 40, "amus": 40, "lunch": 40, "occas": [40, 79], "budget": 40, "financi": [40, 74], "pai": [40, 42, 46, 48, 55, 79, 95], "debt": 40, "t_1": [40, 64], "t_2": [40, 64], "t_n": 40, "resiz": [40, 41, 50, 88], "proactiv": 40, "hashtbl": [40, 41, 44, 48], "exce": [40, 41, 42], "bucket": [40, 41, 42, 48, 50], "8th": 40, "pretend": [40, 64, 69], "price": [40, 46, 79], "reinsert": 40, "incur": 40, "geometr": 40, "400": 40, "300": 40, "600": 40, "500": 40, "800": 40, "700": 40, "200k": 40, "200i": 40, "came": [40, 47, 64, 70, 72], "outbox": [40, 79], "becam": [40, 45, 58, 70, 94], "inbox": [40, 79], "prepai": 40, "bookkeep": 40, "conceptu": [40, 65, 80], "bank": 40, "deposit": 40, "credit": [40, 46, 50], "withdraw": 40, "energi": [40, 50], "transit": [40, 67], "offset": 40, "analyt": 40, "friend": [40, 47], "opinion": [40, 72], "qn": 40, "okasaki": [40, 50, 79, 86], "collis": [41, 42, 50, 85], "load_factor": [41, 42], "functori": [41, 42], "insensit": [41, 78], "obei": [41, 45, 78, 81], "hashedtyp": [41, 42], "hashcod": [41, 42], "probe": [41, 42, 50], "altern": [41, 49, 59], "databas": 41, "functor": [41, 42, 74, 78, 81, 83, 86], "bst": [41, 78], "bstset": 41, "inord": 41, "postord": 41, "rb": 41, "height": [41, 48, 80], "pow2": 41, "alphabet": [41, 51, 64, 80], "endless": 41, "unend": 41, "coin": 41, "flip": [41, 42], "predic": [41, 53, 54, 56], "interleav": [41, 47, 50, 67], "a2": [41, 46, 49, 53, 55, 64], "a3": [41, 46, 49], "b2": [41, 49], "b3": [41, 49], "sift": 41, "siev": 41, "eratosthen": 41, "cdot": [41, 58, 64, 79, 89], "e_term": 41, "1666": 41, "041666": 41, "stream": [41, 42, 49, 50, 54, 57, 58, 66, 67], "66666666666666652": 41, "70833333333333304": 41, "ep": 41, "toler": 41, "875": 41, "9375": 41, "96875": 41, "71666666666666634": 41, "investig": [41, 47, 48, 53, 78, 95], "distanc": 41, "mathit": [41, 69, 85], "epsilon": [41, 66], "lazier": 41, "lazy_t": [41, 49], "AND": 41, "lb1": 41, "lb2": 41, "lazysequ": [41, 49], "resolv": [41, 45, 47, 50, 64, 95], "lwt": [41, 50], "lwt_io": [41, 47], "printf": [41, 45, 47, 77, 78], "lwt_unix": 41, "sleep": [41, 47], "delay_then_print": 41, "timing2": 41, "_t1": 41, "printl": [41, 47], "_t2": 41, "_t3": 41, "timing3": 41, "timing4": 41, "join": [41, 47], "monitor": 41, "stdout": 41, "eof": [41, 66], "starter": [41, 63], "input_channel": [41, 47], "openfil": 41, "o_rdonli": 41, "fd": 41, "of_fd": 41, "ic": 41, "todo": 41, "read_lin": [41, 47, 92], "printlf": 41, "handler": [41, 47, 62], "end_of_fil": 41, "lwt_main": [41, 47], "mkfifo": 41, "cat": [41, 94], "opt": [41, 48, 79], "shown": [41, 46, 76, 94, 95], "fmap": [41, 79], "extmonad": 41, "unbox": [41, 45], "fmapjoinmonad": 41, "bindmonad": 41, "makemonad": 41, "listmonad": 41, "law": [41, 50], "wide": [42, 47, 60], "k_1": [42, 78], "v_1": [42, 78], "k_2": 42, "v_2": 42, "k_n": [42, 78], "v_n": [42, 78], "oo": [42, 77, 85], "charter": 42, "harvard": 42, "1636": 42, "1746": 42, "penn": 42, "1740": 42, "1865": 42, "brace": [42, 45, 95], "admittedli": [42, 45, 55, 56, 85], "of_list": [42, 80, 81], "slightli": [42, 44, 47, 55, 63, 91], "listmap": 42, "k1": [42, 79, 80], "k2": [42, 80], "kn": [42, 79], "offic": 42, "occup": 42, "459": 42, "fan": [42, 78], "460": 42, "gri": [42, 79], "461": 42, "clarkson": [42, 70, 96], "462": 42, "muhlberg": 42, "463": 42, "capac": 42, "directaddressmap": 42, "_in": 42, "bounds_": 42, "arraymap": 42, "v0": 42, "bs": 42, "ref": [42, 44, 46, 47, 64, 67, 88, 89, 93], "add_bind": 42, "iteri": [42, 89], "moreov": [42, 45, 46, 48, 49, 64, 67, 72, 77, 80, 85, 86], "tablemap": 42, "inject": [42, 50, 76], "collid": [42, 83], "scan": 42, "confusingli": 42, "stride": 42, "entri": [42, 44, 46, 53, 77, 78], "cluster": 42, "rapidli": [42, 47, 71], "circuitri": 42, "k11": 42, "v11": 42, "k12": 42, "v12": 42, "k21": 42, "v21": 42, "k22": 42, "v22": 42, "mbox": 42, "therebi": [42, 64, 80, 83], "restor": [42, 45, 48, 63, 65, 79], "halv": 42, "ruin": 42, "hashmap": 42, "insert_no_res": 42, "old_bucket": 42, "remove_assoc": [42, 79], "mem_assoc": 42, "new_capac": 42, "land": 42, "rehash_bind": 42, "rehash_bucket": 42, "resize_if_need": 42, "lf": 42, "remove_no_res": 42, "phone": [42, 47], "art": 42, "extrem": [42, 71], "sabotag": 42, "diffus": [42, 50], "trust": 42, "hash_c": 42, "hash_i": 42, "serial": [42, 50], "compress": 42, "forthcom": 42, "fortun": [42, 49], "sic": 42, "capabl": [42, 47, 86], "arbitrarili": [42, 48, 80], "predetermin": 42, "635296333": 42, "822221246": 42, "degrad": 42, "hash_param": 42, "_weak1": [42, 47, 64, 92], "_weak2": [42, 92], "num_bind": 42, "num_bucket": 42, "max_bucket_length": 42, "bucket_histogram": 42, "histogram": 42, "pump": 42, "sound": [42, 47, 64], "amort": [43, 48, 50, 79], "batch": [43, 78, 79], "cool": 43, "aptli": 43, "persist": [43, 48, 50, 74, 79, 86, 91], "organ": [43, 66, 76], "popular": [43, 45, 70, 74, 80, 94], "recomput": [44, 49], "speed": 44, "phi": [44, 79], "golden": 44, "ratio": [44, 78], "fibm": 44, "memo": 44, "f_mem": 44, "exclud": 44, "progress": [44, 46, 68, 69], "formerli": 44, "speedup": 44, "million": 44, "storag": 44, "benign": 44, "curri": [44, 64], "uncurri": [44, 52, 53], "memo_rec": 44, "fib_memo": 44, "compani": 44, "org": [44, 94], "chart": 44, "employe": 44, "invit": 44, "superior": 44, "weight": [44, 47, 94], "party_in": 44, "party_out": 44, "unmemo": 44, "optimum": 44, "infun": 44, "innam": 44, "outfun": 44, "outnam": 44, "lfun": 44, "lname": 44, "rfun": 44, "rname": 44, "substructur": 44, "charg": [44, 75], "linebreak": 44, "wlen": 44, "contlen": 44, "clen": 44, "l1": 44, "lb": 44, "target": [44, 65, 67, 68], "c2": [44, 49, 64], "br": 44, "break_result": 44, "lb_mem": 44, "phd": [45, 70, 74, 79], "concentr": [45, 62], "screen": [45, 47], "teas": [45, 73, 96], "max_list": 45, "inabl": 45, "lose": 45, "composition": 45, "div": 45, "plus_opt": 45, "minus_opt": 45, "mult_opt": 45, "div_opt": 45, "tremend": 45, "dedupl": 45, "propagate_non": 45, "wrap_output": 45, "fair": [45, 70], "de": 45, "upgrade_binari": 45, "return_binari": 45, "collaps": [45, 95], "inc_log": 45, "dec_log": 45, "loggabl": 45, "dec_log_upgrad": 45, "f_log": 45, "inc_log_upgrad": 45, "inconveni": 45, "addition": [45, 62, 81], "debat": [45, 55], "comfort": 45, "hidden": [45, 62, 77, 81, 85, 87], "callback": [45, 50], "asynchron": [45, 50, 94], "impos": [45, 76], "mnemon": 45, "nop": 45, "elaps": 45, "curli": 45, "s3": 45, "embodi": [45, 86], "cleaner": 45, "ephemer": [46, 48, 79, 86], "persistentarrai": 46, "conchon": 46, "filli\u00e2tr": 46, "2007": 46, "easiest": [46, 64, 94], "copyonsetarrai": 46, "underneath": 46, "hood": 46, "a0": 46, "diverg": 46, "version_tre": 46, "diff": 46, "mere": [46, 79], "walk": [46, 48, 58], "degener": 46, "worsen": 46, "pull": [46, 66], "versiontreearrai": 46, "outermost": [46, 95], "perfrom": 46, "adjust": 46, "compens": 46, "indirect": [46, 78], "rebasing_tre": 46, "adapt": [46, 63, 71, 72], "old_x": 46, "modif": [46, 92], "rebasingversiontreearrai": 46, "sylvain": 46, "jean": 46, "christoph": 46, "acm": [46, 73], "workshop": 46, "henri": 46, "baker": 46, "shallow": 46, "cacm": 46, "1978": [46, 48, 64], "sigplan": 46, "durat": 47, "graphic": 47, "lock": 47, "action": [47, 66, 69, 92], "frustrat": [47, 72, 75], "spreadsheet": 47, "menu": [47, 94, 95], "network": [47, 49, 74, 95], "hyperlink": 47, "server": [47, 94, 95], "cm": 47, "depart": 47, "motor": 47, "vehicl": 47, "deli": 47, "player": 47, "millisecond": 47, "multicor": 47, "central": 47, "resourc": 47, "agreement": [47, 82], "corrupt": 47, "race": [47, 50], "notori": 47, "nondetermin": 47, "problemat": 47, "schedul": 47, "preemptiv": [47, 50], "relinquish": 47, "unrespons": 47, "preemption": 47, "timer": 47, "interrupt": 47, "3410": 47, "4410": 47, "defer": 47, "net": 47, "async": 47, "await": 47, "jane": 47, "street": 47, "ocsigen": 47, "acronym": 47, "light": 47, "misnom": 47, "pend": [47, 50], "fulfil": 47, "reject": [47, 50, 64, 66, 72, 85], "incorpor": [47, 70, 71], "writeabl": 47, "write_onc": 47, "demean": 47, "wakeup_lat": 47, "wakeup_later_exn": 47, "weak": [47, 64, 68], "nope": 47, "inher": [47, 79, 88], "synchron": [47, 50], "input_lin": 47, "in_channel": 47, "channel": [47, 50, 95], "stdin": 47, "adventur": 47, "opposit": [47, 55, 79], "mix": [47, 84], "latenc": [47, 50], "transfer": [47, 62, 79], "disk": 47, "excel": [47, 56, 60], "regain": 47, "show_val": 47, "set_auto_run_lwt": 47, "auto": 47, "ocamlinit": [47, 87], "print_the_str": 47, "str": [47, 53], "v5": 47, "activ": [47, 80, 95], "read2": 47, "resolut": [47, 50], "stringmi": 47, "lwt_ppx": 47, "fool": 47, "ps": 47, "counterpart": 47, "trickier": [47, 64, 66, 67], "st": 47, "fulfill_or_reject": 47, "input_promis": 47, "exc": 47, "output_promis": 47, "output_resolv": 47, "handler_of_callback": 47, "qualifi": [48, 87], "logarithm": [48, 79], "plenti": 48, "workload": 48, "largest": [], "kept": [67, 72, 73, 77], "surgeri": [], "rebal": [], "avl": 48, "1962": 48, "rbtree": 48, "adjac": [48, 65], "global": [48, 82], "bh": [], "shortest": 48, "membership": [], "chri": [48, 50, 79, 86], "1999": [48, 50, 70], "parent": [48, 51], "grandpar": 48, "bz": 48, "bx": 48, "ry": 48, "rx": 48, "rz": 48, "rotat": 48, "overal": 48, "cascad": 48, "recolor": 48, "ins": [48, 74], "rbt": 48, "rebalanc": 48, "nonleaf": 48, "splice": 48, "german": 48, "doubli": 48, "curs": 48, "journal": 48, "juli": 48, "2014": [48, 70, 92], "vari": [48, 60], "sword": 48, "winner": 48, "ones": [49, 64, 95], "entireti": 49, "socket": 49, "chess": 49, "tic": 49, "tac": 49, "toe": 49, "board": 49, "chase": 49, "forev": 49, "rid": [49, 85, 92], "f2": 49, "templat": 49, "map2": [49, 53], "30th": 49, "100th": 49, "memoiz": [49, 50], "subsequ": 49, "misspel": 49, "suspens": 49, "eager": [49, 50, 62], "strict": [49, 50, 67], "lazili": [49, 62, 67], "unpleas": 49, "fib30long": 49, "832040": 49, "fib30lazi": 49, "fib30": 49, "fib30fast": 49, "sped": 49, "fib29": 49, "514229": 49, "gotten": 49, "sequencefib": 49, "take_aux": 49, "h_a": 49, "t_a": 49, "h_b": 49, "t_b": 49, "nth_fib": 49, "lazyfib": 49, "banker": 50, "oh": 50, "physicist": 50, "thread": [50, 74], "writer": [50, 65], "divers": [50, 60], "whitington": [50, 60], "map_tre": 51, "fold_mylist": 51, "fold_tre": 51, "catamorph": 51, "hardest": 51, "reshap": 51, "prune": 51, "filter_tre": 51, "spicier": 52, "spice": 52, "uncurried_add": 52, "curried_add": 52, "product_left": 53, "product_right": 53, "listlabel": [53, 55], "sum_cube_odd": 53, "exists_rec": 53, "exists_fold": 53, "exists_lib": 53, "debit": 53, "uncurried_nth": 53, "sep": 53, "bye": 53, "comma": [53, 63, 79], "uniqu": [53, 79, 80, 81], "bmatrix": 53, "is_valid_matrix": 53, "add_row_vector": 53, "wise": 53, "unspecifi": [53, 66, 67, 78], "add_matric": 53, "matric": [53, 89], "multiply_matric": 53, "transposit": 53, "fanci": 54, "filter_aux": 54, "tolist": [54, 58], "unifi": [55, 63, 64, 68, 96], "led": 55, "succinct": 55, "motiv": [55, 84], "nicer": [55, 67, 80], "combine_tr": 55, "procrastin": 55, "invoc": [55, 92], "crastin": 55, "sub_tr": 55, "fold_x": 55, "uniform": [55, 56, 74], "experienc": [55, 72], "perus": 55, "incorrectli": 55, "lst_and": 55, "lst_and_rec": 55, "lst_and_fold": 55, "lst_and_lib": 55, "for_al": [55, 80], "toi": 56, "recod": 56, "bruce": [56, 60], "maclennan": [56, 60], "recur": 56, "square_then_doubl": 56, "ds": 56, "cond": 56, "quantif": [56, 64], "itertool": 57, "2011": 57, "wizard": 57, "closur": [57, 62, 63, 67, 68], "obviat": 57, "fuss": [57, 74], "reusabl": 57, "add1": 58, "concat_bang": 58, "salti": 58, "guis": [58, 64], "contriv": 58, "anyon": [58, 81], "predispos": 58, "astut": 58, "extent": [58, 60], "unavoid": 58, "aw": 58, "map_tr_aux": 58, "map_tr": 58, "alic": [58, 89], "bob": [58, 70], "him": 58, "rev_map": 58, "rev_map_aux": 58, "theme": 58, "sum_sq": 59, "uglier": 59, "intermedi": [59, 65, 67, 68], "sq_l": 59, "rubi": [60, 64], "sequel": 60, "liber": 60, "von": 60, "neumann": 60, "backu": [60, 68], "award": [60, 72, 73, 85], "elabor": 60, "publish": [60, 64], "articl": 60, "stanford": 60, "encyclopedia": 60, "philosophi": 60, "tour": [61, 75], "lex": [61, 63, 65, 66, 67, 69], "tightli": 61, "crawl": 62, "mapsto": [62, 69], "aim": [62, 69], "fragment": [62, 66, 67], "coincid": [62, 92], "consensu": 62, "decad": [62, 70], "norm": [62, 89], "latex": 62, "perl": 62, "racket": [62, 73, 74], "travel": 62, "delimit": [62, 66], "evok": 62, "defenv": 62, "zip": [62, 63, 66, 67, 69, 95], "v3": [62, 67, 88], "interp": [63, 66], "lexer": [63, 68], "parser": [63, 65, 68], "ast": [63, 65, 67], "mly": [63, 66], "reevalu": 63, "typ": [63, 69], "typeof": [63, 69], "unif": [63, 64, 68], "ctx": 63, "parenthet": 63, "omega": 63, "inexhaust": 63, "is_valu": [63, 67], "subst": [63, 67], "not_empti": 63, "grammar": [63, 66, 68], "meta": [63, 64, 73], "insight": 63, "forgot": 63, "unfold": 63, "fv": [63, 67], "const": [63, 77, 79], "lexic": [63, 64, 66], "hm": [63, 64, 68], "contrast": 64, "disagre": 64, "sophist": [64, 74, 77, 84], "gather": 64, "literatur": 64, "roger": 64, "indlei": 64, "robin": [64, 73], "ilner": 64, "rediscov": 64, "1950": 64, "1930": 64, "he": [64, 70, 72, 73, 94], "1967": 64, "1969": 64, "hindlei": [64, 68], "morri": 64, "1968": 64, "milner": [64, 68, 73], "realm": [64, 85], "tarski": 64, "1920": 64, "histori": [64, 75, 85], "blow": 64, "f0": [64, 92], "repetit": [64, 72], "layer": 64, "untyp": [64, 67], "simplif": 64, "quaternari": 64, "turnstil": [64, 69], "c3": 64, "fresh": [64, 67, 68, 95], "elsewher": [64, 78], "foobar": 64, "strip": 64, "5x": 64, "2y": 64, "toss": 64, "gaussian": 64, "i1": [64, 78], "o1": 64, "i2": [64, 78], "o2": 64, "typeabl": 64, "princip": 64, "lenient": 64, "judgment": 64, "ramif": 64, "downstream": 64, "permiss": 64, "contradictori": 64, "unsatisfi": 64, "ill": [64, 67, 69, 78], "mylen": 64, "uncompl": 64, "u1": 64, "env1": 64, "glean": 64, "mistakenli": 64, "disast": 64, "_weak": [64, 92], "pin": 64, "everywher": [64, 69, 74, 77, 92], "topic": [64, 86, 94], "eleph": 64, "rabbit": 64, "subtyp": [64, 68, 80, 83, 85, 86], "arraystoreexcept": 64, "ouch": 64, "bun": 64, "artisan": 65, "carpent": 65, "plane": 65, "chef": 65, "knive": 65, "pot": 65, "demystifi": 65, "career": 65, "dsl": 65, "mip": 65, "x86": 65, "mixtur": 65, "virtual": [65, 68, 95], "jvm": 65, "zinc": [65, 68], "hotspot": 65, "jit": 65, "phase": [65, 67, 69], "sensit": 65, "delin": 65, "foo": [65, 69, 76, 83], "operand": [65, 67, 69], "gratuit": 65, "unambigu": [65, 85], "ir": [65, 67], "opcod": [65, 67], "begun": [65, 79], "runnabl": 65, "yacc": 66, "ocamlyacc": 66, "automata": [66, 68], "automaton": 66, "reset": 66, "pushdown": [66, 68], "cfl": 66, "parenthesi": 66, "ss": 66, "nontermin": [66, 68], "inventor": 66, "peter": 66, "picki": 66, "adher": 66, "metasyntax": [66, 67], "var": [66, 67, 69], "allud": 66, "awhil": 66, "header": 66, "trailer": 66, "lparen": 66, "rparen": 66, "IN": 66, "IF": 66, "THEN": 66, "nonassoc": 66, "prog": 66, "production1": 66, "action1": 66, "production2": 66, "action2": 66, "sixth": 66, "eighth": 66, "mll": 66, "fyi": 66, "regexp1": 66, "regexp2": 66, "lexbuf": 66, "lexem": 66, "explanatori": 66, "folder": [66, 95], "from_str": 66, "from_channel": 66, "reflex": 67, "axiomat": 67, "bridg": 67, "gap": 67, "faith": 67, "circumst": 67, "toolkit": 67, "eagerli": 67, "slash": 67, "deleg": 67, "3000": 67, "step_bop": 67, "eval_smal": 67, "eval_big": 67, "eval_bop": 67, "eval_if": 67, "rudimentari": 67, "makefil": 67, "closest": 67, "surprisingli": 67, "suddenli": 67, "elud": 67, "mathematician": 67, "reserv": 67, "counter": [67, 84], "gensym": 67, "erat": 67, "sym": 67, "bol": 67, "caution": 67, "intersect": 67, "exot": 67, "studiou": 68, "heavili": [68, 95], "naur": 68, "preliminari": 68, "operatiohn": 68, "reconstruct": 68, "andrew": [68, 70, 96], "appel": 68, "dexter": [68, 70, 96], "kozen": [68, 70, 96], "frontend": 68, "webpag": 68, "hastyp": 69, "vdash": 69, "friendlier": 69, "machineri": 69, "tint": 69, "tbool": 69, "disambigu": 69, "staticenviron": 69, "ty": [69, 92], "hasn": [69, 87], "typeof_let": 69, "typeof_bop": 69, "typeof_if": 69, "taught": [70, 96], "mit": [70, 86], "001": 70, "sicp": 70, "tim": 70, "teitelbaum": 70, "1988": [70, 79], "dan": [70, 96], "huttenloch": [70, 96], "faculti": 70, "inaugur": 70, "infus": 70, "rigor": 70, "homegrown": 70, "dialect": [70, 73, 75], "regularli": 70, "ramin": [70, 96], "zabih": [70, 96], "spring": 70, "1994": 70, "surviv": 70, "onlin": [70, 95], "greg": [70, 96], "morrisett": [70, 96], "dylan": 70, "312": 70, "curriculum": 70, "2112": 70, "410": 70, "chose": [70, 95], "prerequisit": 70, "parcel": 70, "482": 70, "2001": 70, "myer": [70, 96], "2002": 70, "2008": [70, 85], "2010": 70, "nate": [70, 96], "foster": [70, 96], "2012": 70, "constabl": [70, 96], "michael": [70, 96], "georg": [70, 96], "grossman": [70, 96], "2003": 70, "decompos": 70, "cse": 70, "341": 70, "washington": 70, "mooc": 70, "2018": 70, "synthes": 70, "wall": 70, "yesterdai": 71, "pascal": [71, 85], "cobol": [71, 85], "tomorrow": 71, "transcend": [71, 75, 86], "opportun": [71, 72], "scala": [71, 73], "tendenc": 71, "brought": [71, 85], "1958": 71, "2004": 71, "announc": [], "plan": [], "2021": 96, "nan": 72, "\u5357\u96a0": 72, "japanes": 72, "master": [72, 77, 87], "meiji": 72, "1868": 72, "1912": 72, "inquir": 72, "zen": 72, "tea": 72, "pour": 72, "visitor": 72, "restrain": 72, "himself": 72, "overful": 72, "specul": 72, "freedom": [72, 74], "goodby": 72, "bloat": 72, "hate": 72, "love": [72, 95], "humbl": 72, "magic": [72, 92], "incant": 72, "perli": 72, "1922": 72, "recipi": 72, "aesthet": 72, "stylish": 72, "sanskrit": 72, "poetri": 72, "struggl": 72, "ugli": 72, "genealog": 73, "grandfath": 73, "clojur": [73, 75], "edinburgh": 73, "laboratori": 73, "scotland": 73, "late": 73, "1980": [73, 80, 85], "tradition": 73, "fledg": 73, "schism": 73, "french": 73, "british": 73, "brit": 73, "american": 73, "microsoft": [73, 95], "2005": [73, 86], "prais": 73, "articul": 73, "remix": 73, "influenc": 73, "linguist": 74, "stateless": 74, "fantasi": 74, "referenti": [74, 75], "transpar": [74, 75], "illus": 74, "immens": 74, "turkei": 74, "biggest": [74, 75], "emerg": 74, "cert": 74, "govern": 74, "agenc": 74, "cybersecur": 74, "due": 74, "reliev": 74, "dealloc": 74, "nowher": [74, 77], "strength": [74, 82], "yaron": 74, "minski": 74, "obstacl": 75, "freeli": 75, "gentl": 75, "cornellian": 75, "sml": 75, "essai": 75, "director": 75, "googl": [75, 95], "capit": [76, 87], "creator": 76, "placement": 76, "mystack": 76, "homework": 76, "lab1": 76, "rarer": 76, "everydai": 76, "customstack": [76, 77], "hpp": 76, "cpp": 76, "filenam": [76, 87], "gone": [77, 95], "opaqu": 77, "seal": [77, 78, 81, 86], "inaccess": 77, "mathcheck": 77, "c_public": 77, "cprivat": 77, "list_stack": [77, 85], "liststackcacheds": 77, "checkliststackcacheds": 77, "doubt": 77, "unawar": [77, 83], "overli": 77, "cap": [77, 85], "shout": [77, 85], "unwieldi": 77, "fairli": [77, 79], "angl": 77, "friendli": 77, "margin": [77, 94], "fprintf": [77, 78, 84], "kupo": 77, "kupo_pp": 77, "fmt": [77, 84], "uninstal": [77, 95], "remove_print": 77, "pp_val": 77, "pp_break": 77, "pp_print_list": 77, "pp_sep": 77, "lift": 77, "imaginari": 78, "complexsig": 78, "ctrl": [78, 95], "fill_listqueu": 78, "fill_batchedqueu": 78, "bstmap": 78, "fraction": 78, "to_float": 78, "euclid": 78, "gcd": 78, "greatest": 78, "charmap": 78, "orderedtyp": [78, 80], "sierra": 78, "victor": 78, "march": 78, "31st": 78, "june": 78, "calendar": 78, "datemap": 78, "event": 78, "birthdai": 78, "anniversari": 78, "print_calendar": 78, "is_for": 78, "k_i": 78, "v_i": 78, "fancier": 78, "first_aft": 78, "grr": 78, "argh": 78, "printint": 78, "printstr": 78, "mystr": 78, "albeit": 78, "super": [78, 85, 95], "stringwithprint": 78, "make_d": 78, "get_month": 78, "get_dai": 78, "reissu": 78, "arith": 78, "ring": [78, 84], "intr": [78, 84], "floatr": [78, 84], "intfield": 78, "floatfield": 78, "intrat": 78, "floatrat": 78, "advic": [78, 95], "coexist": 79, "peek_opt": 79, "pop_opt": 79, "melvil": 79, "dissert": 79, "1981": 79, "supersed": [79, 94], "718": 79, "618": 79, "assoclistmap": 79, "ki": 79, "willing": [79, 92], "uniqassoclistmap": 79, "morphism": 80, "intimid": 80, "quotat": 80, "stratifi": 80, "incx": 80, "add42": 80, "mn": 80, "sn": 80, "si": 80, "module_expression1": 80, "module_expression2": 80, "module_typ": [80, 85], "checkaddx": 80, "pair1": 80, "p0": 80, "pa": 80, "nameabl": 80, "difficulti": [80, 94], "fx": 80, "fz": 80, "lesser": 80, "lt": 80, "eq": 80, "ala": 80, "strcmp": 80, "intmap": 80, "filter_map": 80, "partit": 80, "min_bind": 80, "min_binding_opt": 80, "max_bind": 80, "max_binding_opt": 80, "choose_opt": 80, "find_opt": 80, "find_first": 80, "find_first_opt": 80, "find_last": 80, "find_last_opt": 80, "mapi": 80, "to_seq": 80, "seq": 80, "to_rev_seq": 80, "to_seq_from": 80, "add_seq": 80, "of_seq": 80, "stdlib__map": 80, "accordingli": 80, "v4": 80, "lightli": [80, 95], "ord": 80, "treemap": 80, "first1": 80, "last1": 80, "first2": 80, "last2": 80, "namemap": 80, "birth": 80, "kardashian": 80, "kourtnei": 80, "kimberli": 80, "k3": 80, "khloe": 80, "nm": 80, "1979": 80, "1984": 80, "reseal": 80, "unusablemap": 80, "variantstack": 80, "horribl": 80, "contempl": 80, "hundr": 80, "stacktest": 80, "liststacktest": 80, "variantstacktest": 80, "all_test": 80, "flatten": 80, "objection": 80, "newest": 80, "setoflist": [80, 81], "oflist": [80, 81], "uniqoflist": 80, "setwithoflist": 80, "setl": 80, "uniqsetl": 80, "necessit": 80, "grain": 80, "mixin": 80, "prolifer": 81, "prone": 81, "quicker": [81, 94], "neat": [81, 92], "parti": 81, "listsetextend": 81, "subclass": 81, "superclass": 81, "setextend": 81, "ah": 81, "workaround": 81, "listsetimpl": 81, "listsetextendedimpl": 81, "dispatch": 81, "subtli": 81, "consumpt": 81, "export": 81, "of_list_uniq": 81, "uniqlistsetextend": 81, "magnitud": 82, "colleg": 82, "plug": 82, "moder": 82, "industri": 82, "sole": 82, "serious": 82, "defici": 82, "decoupl": 82, "accompani": 83, "blissfulli": 83, "reassembl": 83, "intellig": 83, "imperfect": 83, "degre": 83, "extol": 84, "invers": 84, "pp_intr": 84, "pp_floatr": 84, "int_r": 84, "float_r": 84, "proxim": 84, "constraint1": 84, "constraint2": 84, "constraintn": 84, "xy": 84, "primary_color": 85, "mymodul": 85, "broaden": 85, "sight": 85, "vagu": 85, "let_modul": 85, "modulenam": 85, "module_item": 85, "module_express": 85, "alia": [85, 93, 95], "pervas": 85, "uppercase_al": 85, "uppercase_ascii": 85, "trim": 85, "lower_trim": 85, "eschew": 85, "moduletypenam": 85, "ls": [85, 87], "all_cap": 85, "older": [85, 95], "impolit": 85, "connot": 85, "liststackalia": 85, "opac": 85, "gain": 85, "she": 85, "twenti": [85, 94], "flavor": 85, "nomin": 85, "decre": 85, "mx": 85, "mz": 85, "xz": 85, "mxz": 85, "xstring": 85, "mxstring": 85, "intfun": 85, "idfun": 85, "iid": 85, "irrevoc": 85, "superset": 85, "ab": 85, "stackhistori": 85, "duck": 85, "un": 85, "brutal": 86, "equip": 86, "harper": 86, "ed": 86, "pragmat": 87, "topmost": 87, "ompil": 87, "odul": 87, "bject": 87, "ing": 87, "uncompil": 87, "downto": 88, "euclidean": 89, "dimension": [89, 91], "x_1": 89, "x_n": 89, "instinct": 89, "7071": 89, "make_matrix": 89, "init_matrix": 89, "till": 90, "analogu": 90, "mlist": [91, 92], "insert_first": [91, 92], "mutablestack": 91, "mutablerecordstack": 91, "0x3110bae0": 92, "forego": 92, "hick": 92, "dereferenc": 92, "allot": 92, "loc": 92, "next_val": 92, "decr": 92, "next_val_broken": 92, "malloc": 92, "segfault": 92, "deref": 92, "ptr": 92, "misunderstood": 92, "knowledg": [92, 94], "undocu": 92, "obj": 92, "circumv": 92, "fact_rec": 92, "fact0": 92, "rewrot": 92, "knot": 92, "tie": 92, "jacqu": 92, "garrigu": 92, "unequ": 92, "lst0": 92, "_weak3": 92, "linkedlist": 92, "_weak4": 92, "alias": 93, "heavier": 94, "fork": 94, "repositori": 94, "minor": 94, "uptak": 94, "prior": 94, "youtub": [94, 96], "pandem": 94, "overwhelmingli": 94, "profession": 94, "basement": 94, "ecosystem": 94, "2020": [94, 95], "alarm": 94, "plugin": 94, "ag": 94, "nearest": 94, "playlist": [94, 96], "collabor": 94, "hypoth": 94, "publicli": 94, "rocket": 94, "ship": 94, "binder": 94, "site": [94, 95], "mybind": 94, "cloud": 94, "servic": 94, "reproduc": 94, "shareabl": 94, "ui": 94, "jupyt": 94, "ipynb": 94, "narr": 94, "julia": 94, "analys": 94, "shift": [94, 95], "hotkei": 94, "scene": 94, "kernel": 94, "reload": 94, "studio": 94, "seamlessli": 94, "varieti": 94, "anaconda": 94, "rate": 94, "star": 94, "misjudg": 94, "tablet": 94, "epub": 94, "prefac": 95, "brush": 95, "sad": 95, "tower": 95, "solid": 95, "stranger": 95, "internet": 95, "beneath": 95, "maco": 95, "homebrew": 95, "macport": 95, "nudg": 95, "xcode": 95, "x11": 95, "subsystem": 95, "wsl": 95, "20262": 95, "novemb": 95, "bio": 95, "manufactur": 95, "hat": 95, "powershel": 95, "administr": 95, "reboot": 95, "reinstal": 95, "setup": 95, "wsl2": 95, "wsl1": 95, "04": 95, "app": 95, "bash": 95, "keystrok": 95, "unzip": 95, "your_ubuntu_user_nam": 95, "mnt": 95, "your_windows_user_nam": 95, "pc": 95, "brew": 95, "port": 95, "bare": 95, "profil": 95, "bashrc": 95, "sandbox": 95, "whenc": 95, "cs3110": 95, "2024fa": 95, "logout": 95, "shell": 95, "reinit": 95, "odoc": 95, "menhir": 95, "lsp": 95, "vim": 95, "slate": 95, "zsh": 95, "cmd": 95, "login": 95, "pane": 95, "palett": 95, "yeah": 95, "orang": 95, "squiggl": 95, "troubleshoot": 95, "band": 95, "cure": 95, "tweak": 95, "json": 95, "tabsiz": 95, "ruler": 95, "formatonsav": 95, "doc": 95, "voic": 95, "spin": 95, "zoom": 95, "email": 95, "your_netid": 95, "emphasi": 96, "2024": 96, "justin": 96, "hsu": 96, "daniel": 96, "radu": 96, "rugina": 96, "copyright": 96, "attribut": 96, "noncommerci": 96, "noderiv": 96, "licens": 96, "vanilla": 95, "eight": 48, "imbal": 48, "lowest": 48, "2b": 48, "log_2": 48, "strongest": 48, "hopcroft": 48, "adelson": 48, "velski": 48, "landi": 48, "guiba": 48, "sedgewick": 48, "equiv": 48}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"The": [0, 9, 12, 16, 45, 47, 56, 66, 67, 73, 74, 80], "curri": [0, 52], "howard": 0, "correspond": 0, "comput": 0, "evid": 0, "type": [0, 7, 12, 25, 29, 38, 64, 69, 77, 80, 84, 85, 92], "proposit": 0, "program": [0, 3, 4, 19, 49, 57, 72, 82, 96], "proof": 0, "evalu": [0, 62, 67], "simplif": 0, "what": [0, 3, 5], "It": 0, "all": [0, 22, 25], "mean": [0, 56], "exercis": [0, 6, 15, 28, 41, 53, 63, 78, 89], "big": [1, 67], "oh": 1, "notat": 1, "algorithm": [1, 48], "effici": [1, 96], "attempt": [1, 62], "1": 1, "2": 1, "ell": 1, "finish": [1, 2, 64], "warn": 1, "3": 1, "virtual": 2, "machin": 2, "start": 2, "instal": [2, 95], "window": [2, 95], "mac": [2, 95], "compil": [3, 76, 87], "ocaml": [3, 4, 9, 12, 62, 64, 67, 72, 73, 74, 95, 96], "store": 3, "code": [3, 12, 81, 95], "file": 3, "about": [3, 22, 94], "main": 3, "dune": [3, 87], "creat": [3, 95], "project": 3, "manual": 3, "automat": 3, "run": 3, "continu": 3, "debug": [4, 24], "defens": 4, "against": 4, "bug": 4, "how": [4, 5, 49, 80], "document": [5, 16, 18, 76], "precondit": 5, "postcondit": 5, "express": 7, "primit": 7, "valu": [7, 12], "more": 7, "oper": [7, 8], "assert": 7, "If": 7, "let": [7, 34, 64], "scope": [7, 39, 62, 85], "annot": 7, "function": [8, 12, 16, 18, 20, 34, 42, 44, 55, 56, 79], "definit": [8, 85], "anonym": 8, "applic": 8, "pipelin": [8, 59], "polymorph": [8, 25, 64], "label": [8, 55], "option": [8, 32, 79], "argument": [8, 55], "partial": 8, "associ": [8, 26, 42], "tail": [8, 30, 54, 55, 58], "recurs": [8, 19, 22, 25, 30, 54, 55, 58, 92], "basic": 9, "print": [10, 77], "unit": [10, 33, 76], "semicolon": 10, "ignor": 10, "printf": 10, "summari": [11, 23, 36, 50, 60, 68, 75, 86, 93], "term": [11, 23, 36, 50, 60, 68, 75, 86, 93], "concept": [11, 23, 36, 50, 60, 68, 75, 86, 93], "further": [11, 23, 36, 50, 60, 68, 75, 86, 93], "read": [11, 23, 36, 50, 60, 68, 75, 86, 93], "toplevel": [12, 87], "load": [12, 87], "workflow": 12, "black": [13, 48], "box": 13, "glass": 13, "test": [13, 20, 24, 33, 80], "data": [13, 25, 29, 43, 79], "abstract": [13, 18, 20, 56, 77], "vs": [13, 19, 35, 55, 62, 79, 81, 87, 95], "bisect": 13, "equat": [14, 19], "specif": [14, 16, 19, 21], "exampl": [14, 16, 31, 33, 34, 37, 45, 61, 66, 76, 80, 91, 92], "stack": [14, 76, 79, 91], "queue": [14, 40, 79], "batch": [14, 40], "design": 14, "return": 16, "claus": 16, "requir": [16, 87], "rais": 16, "game": 16, "comment": [16, 76], "correct": [17, 19, 96], "modul": [18, 80, 81, 83, 84, 85, 87], "remind": 18, "implement": [18, 42, 47, 55, 62, 67], "commut": 18, "diagram": 18, "represent": [18, 37, 42], "invari": 18, "prove": 19, "equal": [19, 92], "reason": 19, "induct": [19, 22], "natur": [19, 22, 31], "number": [19, 20, 31], "iter": 19, "termin": 19, "random": 20, "qcheck": 20, "gener": [20, 66], "properti": 20, "inform": 20, "output": [20, 33], "from": [20, 48], "structur": [22, 43, 79], "list": [22, 26, 30, 42, 51, 79, 91, 92], "A": [22, 55, 62, 69, 70], "theorem": 22, "fold": [22, 51, 55], "tree": [22, 37, 46, 48, 51], "principl": [22, 56], "variant": [22, 25, 27, 35, 39], "acknowledg": [23, 68], "valid": 24, "algebra": 25, "carri": 25, "syntax": [25, 30, 80, 92], "semant": [25, 27, 80, 81, 85, 92], "catch": 25, "case": 25, "parameter": 25, "built": 25, "except": [27, 33, 79], "ar": [27, 85, 91], "extens": 27, "pattern": [27, 30, 34, 39], "match": [27, 30, 34, 39], "ounit": [27, 33], "build": 30, "access": 30, "Not": [30, 49], "mutat": 30, "deep": 30, "immedi": 30, "ocamldoc": 30, "comprehens": 30, "an": [33, 62, 76, 80, 95], "explan": 33, "improv": 33, "driven": 33, "develop": [33, 95], "advanc": 34, "record": [35, 37], "tupl": [35, 37], "synonym": 38, "amort": 40, "analysi": 40, "hash": [40, 42], "tabl": [40, 42], "banker": 40, "physicist": 40, "persist": [40, 46], "map": [42, 48, 51, 58, 79, 80], "arrai": [42, 46, 88], "chain": 42, "resiz": 42, "standard": 42, "librari": [42, 55, 87], "hashtbl": 42, "memoiz": 44, "fibonacci": 44, "us": [44, 55, 80, 87, 95], "higher": [44, 56, 57], "order": [44, 56, 57], "just": 44, "fun": 44, "parti": 44, "optim": 44, "monad": 45, "signatur": 45, "mayb": 45, "writer": 45, "lwt": [45, 47], "law": 45, "composit": 45, "copi": 46, "On": 46, "set": [46, 48, 79, 95], "version": 46, "rebas": 46, "citat": 46, "promis": 47, "concurr": 47, "thread": 47, "make": 47, "our": 47, "own": 47, "asynchron": 47, "i": 47, "o": 47, "callback": 47, "full": 47, "red": 48, "binari": 48, "search": 48, "bst": 48, "sequenc": [49, 92], "defin": [49, 67], "correctli": 49, "lazi": 49, "beyond": 51, "filter": [51, 54], "other": [54, 55, 58], "languag": [54, 58], "combin": 55, "right": 55, "left": 55, "digress": 55, "famou": 56, "side": 58, "effect": [58, 92], "calcul": 61, "environ": [62, 95], "model": [62, 67], "lambda": 62, "calculu": 62, "lexic": 62, "dynam": 62, "second": 62, "core": [62, 67], "infer": 64, "reconstruct": 64, "constraint": [64, 80, 84], "base": 64, "solv": 64, "mutabl": [64, 90, 91, 92], "interpret": [65, 67], "pars": 66, "lexer": 66, "parser": 66, "backu": 66, "naur": 66, "form": 66, "simpl": [66, 67, 69], "ast": 66, "menhir": 66, "ocamllex": 66, "driver": 66, "substitut": 67, "singl": 67, "step": 67, "relat": 67, "multistep": 67, "done": 67, "captur": 67, "avoid": 67, "check": [69, 95], "system": [69, 83], "checker": 69, "safeti": 69, "brief": 70, "histori": 70, "cs": 70, "3110": 70, "look": 71, "your": 71, "futur": 71, "new": [], "flash": [], "better": 72, "through": 72, "past": 73, "present": 74, "featur": 74, "industri": 74, "incomplet": 76, "encapsul": [77, 81], "opac": 77, "pretti": 77, "functor": 80, "custom": 80, "kei": 80, "suit": 80, "extend": 80, "multipl": [80, 81], "includ": 81, "open": [81, 85], "modular": 82, "special": 84, "static": 85, "first": 85, "class": 85, "initi": [87, 95], "loop": 88, "field": 91, "ref": [91, 92], "singli": [91, 92], "link": [91, 92], "alias": 92, "counter": 92, "pointer": 92, "evil": 92, "secret": 92, "without": 92, "rec": 92, "weak": 92, "variabl": 92, "physic": 92, "thi": 94, "book": 94, "unix": 95, "linux": 95, "opam": 95, "switch": 95, "doubl": 95, "visual": 95, "studio": 95, "collabor": 95, "beauti": 96, "balanc": 48, "membership": 48, "insert": 48, "remov": 48, "okasaki": 48, "s": 48}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx": 56}}) \ No newline at end of file +Search.setIndex({"docnames": ["chapters/adv/curry-howard", "chapters/appendix/bigoh", "chapters/appendix/vm", "chapters/basics/compiling", "chapters/basics/debugging", "chapters/basics/documentation", "chapters/basics/exercises", "chapters/basics/expressions", "chapters/basics/functions", "chapters/basics/intro", "chapters/basics/printing", "chapters/basics/summary", "chapters/basics/toplevel", "chapters/correctness/black_glass_box", "chapters/correctness/eq_spec", "chapters/correctness/exercises", "chapters/correctness/function_docs", "chapters/correctness/intro", "chapters/correctness/module_docs", "chapters/correctness/proving_correctness", "chapters/correctness/randomized", "chapters/correctness/specifications", "chapters/correctness/structural_induction", "chapters/correctness/summary", "chapters/correctness/test_debug", "chapters/data/algebraic_data_types", "chapters/data/assoc_list", "chapters/data/exceptions", "chapters/data/exercises", "chapters/data/intro", "chapters/data/lists", "chapters/data/nats", "chapters/data/options", "chapters/data/ounit", "chapters/data/pattern_matching_advanced", "chapters/data/records_tuples", "chapters/data/summary", "chapters/data/trees", "chapters/data/type_synonym", "chapters/data/variants", "chapters/ds/amortized", "chapters/ds/exercises", "chapters/ds/hash_tables", "chapters/ds/intro", "chapters/ds/memoization", "chapters/ds/monads", "chapters/ds/parrays", "chapters/ds/promises", "chapters/ds/rb", "chapters/ds/sequence", "chapters/ds/summary", "chapters/hop/beyond_lists", "chapters/hop/currying", "chapters/hop/exercises", "chapters/hop/filter", "chapters/hop/fold", "chapters/hop/higher_order", "chapters/hop/intro", "chapters/hop/map", "chapters/hop/pipelining", "chapters/hop/summary", "chapters/interp/calculator", "chapters/interp/environment", "chapters/interp/exercises", "chapters/interp/inference", "chapters/interp/intro", "chapters/interp/parsing", "chapters/interp/substitution", "chapters/interp/summary", "chapters/interp/typecheck", "chapters/intro/3110", "chapters/intro/future", "chapters/intro/intro", "chapters/intro/past", "chapters/intro/present", "chapters/intro/summary", "chapters/modules/compilation_units", "chapters/modules/encapsulation", "chapters/modules/exercises", "chapters/modules/functional_data_structures", "chapters/modules/functors", "chapters/modules/includes", "chapters/modules/intro", "chapters/modules/module_systems", "chapters/modules/module_type_constraints", "chapters/modules/modules", "chapters/modules/summary", "chapters/modules/toplevel", "chapters/mut/arrays", "chapters/mut/exercises", "chapters/mut/intro", "chapters/mut/mutable_fields", "chapters/mut/refs", "chapters/mut/summary", "chapters/preface/about", "chapters/preface/install", "cover"], "filenames": ["chapters/adv/curry-howard.md", "chapters/appendix/bigoh.md", "chapters/appendix/vm.md", "chapters/basics/compiling.md", "chapters/basics/debugging.md", "chapters/basics/documentation.md", "chapters/basics/exercises.md", "chapters/basics/expressions.md", "chapters/basics/functions.md", "chapters/basics/intro.md", "chapters/basics/printing.md", "chapters/basics/summary.md", "chapters/basics/toplevel.md", "chapters/correctness/black_glass_box.md", "chapters/correctness/eq_spec.md", "chapters/correctness/exercises.md", "chapters/correctness/function_docs.md", "chapters/correctness/intro.md", "chapters/correctness/module_docs.md", "chapters/correctness/proving_correctness.md", "chapters/correctness/randomized.md", "chapters/correctness/specifications.md", "chapters/correctness/structural_induction.md", "chapters/correctness/summary.md", "chapters/correctness/test_debug.md", "chapters/data/algebraic_data_types.md", "chapters/data/assoc_list.md", "chapters/data/exceptions.md", "chapters/data/exercises.md", "chapters/data/intro.md", "chapters/data/lists.md", "chapters/data/nats.md", "chapters/data/options.md", "chapters/data/ounit.md", "chapters/data/pattern_matching_advanced.md", "chapters/data/records_tuples.md", "chapters/data/summary.md", "chapters/data/trees.md", "chapters/data/type_synonym.md", "chapters/data/variants.md", "chapters/ds/amortized.md", "chapters/ds/exercises.md", "chapters/ds/hash_tables.md", "chapters/ds/intro.md", "chapters/ds/memoization.md", "chapters/ds/monads.md", "chapters/ds/parrays.md", "chapters/ds/promises.md", "chapters/ds/rb.md", "chapters/ds/sequence.md", "chapters/ds/summary.md", "chapters/hop/beyond_lists.md", "chapters/hop/currying.md", "chapters/hop/exercises.md", "chapters/hop/filter.md", "chapters/hop/fold.md", "chapters/hop/higher_order.md", "chapters/hop/intro.md", "chapters/hop/map.md", "chapters/hop/pipelining.md", "chapters/hop/summary.md", "chapters/interp/calculator.md", "chapters/interp/environment.md", "chapters/interp/exercises.md", "chapters/interp/inference.md", "chapters/interp/intro.md", "chapters/interp/parsing.md", "chapters/interp/substitution.md", "chapters/interp/summary.md", "chapters/interp/typecheck.md", "chapters/intro/3110.md", "chapters/intro/future.md", "chapters/intro/intro.md", "chapters/intro/past.md", "chapters/intro/present.md", "chapters/intro/summary.md", "chapters/modules/compilation_units.md", "chapters/modules/encapsulation.md", "chapters/modules/exercises.md", "chapters/modules/functional_data_structures.md", "chapters/modules/functors.md", "chapters/modules/includes.md", "chapters/modules/intro.md", "chapters/modules/module_systems.md", "chapters/modules/module_type_constraints.md", "chapters/modules/modules.md", "chapters/modules/summary.md", "chapters/modules/toplevel.md", "chapters/mut/arrays.md", "chapters/mut/exercises.md", "chapters/mut/intro.md", "chapters/mut/mutable_fields.md", "chapters/mut/refs.md", "chapters/mut/summary.md", "chapters/preface/about.md", "chapters/preface/install.md", "cover.md"], "titles": ["The Curry-Howard Correspondence", "Big-Oh Notation", "Virtual Machine", "2.2. Compiling OCaml Programs", "2.7. Debugging", "2.5. Documentation", "2.9. Exercises", "2.3. Expressions", "2.4. Functions", "2. The Basics of OCaml", "2.6. Printing", "2.8. Summary", "2.1. The OCaml Toplevel", "6.5. Black-box and Glass-box Testing", "6.9. Equational Specification", "6.11. Exercises", "6.2. Function Documentation", "6. Correctness", "6.3. Module Documentation", "6.7. Proving Correctness", "6.6. Randomized Testing with QCheck", "6.1. Specifications", "6.8. Structural Induction", "6.10. Summary", "6.4. Testing and Debugging", "3.9. Algebraic Data Types", "3.8. Association Lists", "3.10. Exceptions", "3.14. Exercises", "3. Data and Types", "3.1. Lists", "3.12. Example: Natural Numbers", "3.7. Options", "3.3. Unit Testing with OUnit", "3.5. Advanced Pattern Matching", "3.4. Records and Tuples", "3.13. Summary", "3.11. Example: Trees", "3.6. Type Synonyms", "3.2. Variants", "8.2. Amortized Analysis", "8.10. Exercises", "8.1. Hash Tables", "8. Data Structures", "8.5. Memoization", "8.8. Monads", "8.6. Persistent Arrays", "8.7. Promises", "8.3. Red-Black Trees", "8.4. Sequences", "8.9. Summary", "4.5. Beyond Lists", "4.7. Currying", "4.9. Exercises", "4.3. Filter", "4.4. Fold", "4.1. Higher-Order Functions", "4. Higher-Order Programming", "4.2. Map", "4.6. Pipelining", "4.8. Summary", "9.1. Example: Calculator", "9.4. Environment Model", "9.8. Exercises", "9.6. Type Inference", "9. Interpreters", "9.2. Parsing", "9.3. Substitution Model", "9.7. Summary", "9.5. Type Checking", "1.4. A Brief History of CS 3110", "1.3. Look to Your Future", "1. Better Programming Through OCaml", "1.1. The Past of OCaml", "1.2. The Present of OCaml", "1.5. Summary", "5.5. Compilation Units", "5.4. Encapsulation", "5.11. Exercises", "5.6. Functional Data Structures", "5.9. Functors", "5.8. Includes", "5. Modular Programming", "5.1. Module Systems", "5.7. Module Type Constraints", "5.2. Modules", "5.10. Summary", "5.3. Modules and the Toplevel", "7.3. Arrays and Loops", "7.5. Exercises", "7. Mutability", "7.2. Mutable Fields", "7.1. Refs", "7.4. Summary", "About This Book", "Installing OCaml", "OCaml Programming: Correct + Efficient + Beautiful"], "terms": {"A": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 20, 21, 24, 25, 26, 27, 28, 31, 33, 34, 35, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 53, 60, 63, 64, 65, 66, 67, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 92, 94, 95, 96], "lagniapp": 0, "small": [0, 1, 3, 4, 12, 13, 14, 17, 18, 20, 24, 26, 30, 33, 36, 37, 42, 46, 52, 58, 62, 63, 65, 67, 68, 69, 78, 82, 85], "unexpect": [0, 49], "gift": 0, "littl": [0, 1, 4, 8, 12, 18, 20, 22, 33, 40, 42, 45, 46, 47, 49, 51, 55, 58, 61, 64, 66, 67, 69, 77, 80, 84, 85, 92, 94, 95], "someth": [0, 1, 3, 5, 7, 8, 11, 12, 13, 14, 16, 18, 21, 22, 24, 25, 27, 30, 32, 33, 41, 42, 45, 47, 51, 52, 54, 55, 56, 57, 58, 63, 67, 74, 76, 77, 79, 80, 82, 84, 85, 95], "extra": [0, 1, 8, 14, 16, 19, 24, 27, 30, 37, 39, 40, 42, 44, 45, 47, 48, 53, 57, 59, 64, 67, 74, 77, 79, 80, 84, 95], "pleas": [0, 6, 15, 28, 41, 53, 63, 78, 89, 94], "enjoi": [0, 7, 30, 75], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 90, 92, 95, 96], "chapter": [0, 1, 5, 8, 9, 11, 15, 16, 17, 23, 27, 29, 30, 33, 36, 43, 50, 57, 59, 60, 62, 64, 65, 67, 68, 74, 75, 76, 79, 85, 86, 90, 92, 93, 94], "which": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 53, 54, 55, 56, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 91, 92, 94, 95], "contain": [0, 3, 7, 8, 13, 15, 16, 18, 20, 25, 27, 28, 30, 32, 33, 35, 37, 41, 42, 44, 45, 46, 47, 49, 53, 54, 59, 62, 64, 66, 67, 69, 76, 77, 78, 79, 80, 81, 82, 85, 89, 91, 92, 94], "one": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 53, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 73, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 92, 94, 95], "most": [0, 1, 2, 4, 5, 6, 7, 8, 9, 12, 13, 15, 20, 21, 24, 26, 28, 29, 30, 33, 40, 41, 42, 45, 46, 47, 48, 53, 55, 56, 59, 60, 62, 63, 64, 65, 66, 67, 69, 74, 76, 78, 79, 82, 83, 85, 86, 88, 89, 94, 95], "beauti": [0, 50, 57, 72, 75], "result": [0, 1, 3, 4, 5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 20, 24, 25, 27, 28, 30, 33, 34, 36, 41, 42, 44, 45, 47, 48, 49, 51, 53, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 73, 74, 77, 78, 79, 80, 92, 95], "entir": [0, 4, 7, 8, 9, 12, 13, 14, 16, 20, 21, 27, 30, 35, 40, 41, 45, 46, 47, 48, 49, 51, 55, 62, 63, 64, 66, 79, 85, 94], "book": [0, 5, 9, 12, 17, 20, 22, 30, 41, 60, 65, 68, 70, 72, 74, 75, 79, 95, 96], "base": [0, 1, 2, 4, 7, 8, 13, 14, 15, 18, 19, 21, 22, 23, 24, 25, 29, 30, 33, 35, 40, 41, 42, 45, 46, 48, 56, 58, 66, 67, 68, 69, 70, 76, 77, 78, 79, 80, 85, 86, 92, 94, 95, 96], "paper": [0, 8, 48, 68, 74], "philip": 0, "wadler": 0, "you": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 47, 48, 49, 50, 51, 52, 53, 55, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 76, 77, 78, 79, 80, 81, 83, 85, 86, 87, 88, 89, 92, 94, 95], "can": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 30, 31, 32, 33, 34, 35, 36, 37, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 69, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 96], "watch": [0, 3, 24, 72, 94, 96], "an": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 53, 55, 56, 57, 58, 59, 61, 63, 64, 65, 66, 67, 69, 70, 72, 74, 75, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 92, 94, 96], "entertain": [0, 67], "record": [0, 4, 8, 13, 14, 25, 28, 29, 30, 34, 36, 40, 41, 44, 46, 47, 56, 64, 67, 69, 70, 80, 85, 89, 91, 92], "lectur": [0, 14, 25, 53, 60, 70, 75], "prof": [0, 79], "addit": [0, 1, 3, 6, 8, 12, 13, 15, 16, 18, 19, 20, 22, 24, 25, 27, 30, 32, 33, 34, 40, 41, 42, 45, 47, 48, 53, 55, 57, 61, 64, 65, 66, 67, 74, 77, 78, 79, 84, 89, 95], "our": [0, 1, 2, 3, 7, 8, 9, 11, 13, 14, 15, 16, 17, 18, 19, 22, 23, 24, 27, 29, 30, 31, 33, 34, 35, 37, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 54, 55, 57, 58, 60, 62, 64, 66, 67, 68, 69, 70, 75, 77, 78, 79, 80, 82, 85, 92], "below": [0, 2, 4, 6, 14, 20, 26, 28, 30, 31, 34, 35, 37, 41, 42, 45, 47, 48, 66, 67, 78, 79, 80, 81, 83, 84, 85, 87, 94, 95], "As": [0, 1, 4, 5, 7, 8, 10, 11, 14, 15, 16, 18, 19, 21, 22, 25, 27, 28, 30, 33, 34, 35, 40, 41, 42, 44, 45, 47, 48, 49, 54, 55, 57, 58, 62, 64, 65, 66, 67, 69, 70, 77, 80, 84, 85, 88, 92, 95], "we": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 88, 89, 90, 91, 92, 93, 94, 95], "observ": [0, 7, 12, 22, 24, 30, 40, 44, 47, 51, 77, 92, 95], "long": [0, 1, 3, 10, 16, 17, 19, 28, 30, 36, 41, 42, 45, 46, 48, 49, 57, 62, 63, 71, 79, 80, 82, 85, 94], "ago": [0, 1, 10, 17, 66], "ocaml": [0, 1, 2, 5, 6, 7, 8, 10, 11, 13, 15, 18, 19, 20, 22, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 42, 45, 46, 47, 48, 49, 50, 51, 52, 55, 56, 57, 58, 59, 60, 61, 63, 65, 66, 68, 69, 70, 71, 75, 76, 77, 79, 80, 81, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94], "languag": [0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 12, 18, 19, 20, 21, 23, 24, 25, 27, 29, 30, 32, 33, 35, 36, 39, 43, 45, 46, 47, 49, 52, 56, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 79, 80, 81, 82, 83, 85, 86, 89, 90, 92, 94], "ml": [0, 3, 7, 12, 13, 23, 27, 33, 41, 46, 47, 49, 62, 66, 67, 68, 70, 71, 73, 75, 76, 78, 80, 85, 86, 87, 92, 95], "famili": [0, 8, 71, 74, 75, 92], "wa": [0, 1, 3, 4, 7, 8, 10, 12, 14, 15, 17, 18, 25, 27, 30, 33, 35, 40, 41, 42, 44, 45, 46, 47, 48, 55, 58, 62, 63, 64, 66, 67, 69, 70, 71, 72, 73, 77, 79, 80, 81, 84, 85, 92, 94, 95, 96], "origin": [0, 8, 12, 14, 17, 19, 20, 22, 24, 25, 27, 41, 42, 44, 45, 46, 48, 49, 54, 55, 58, 59, 63, 64, 65, 73, 77, 81, 85, 92, 94], "design": [0, 1, 4, 8, 13, 15, 16, 21, 23, 24, 30, 32, 40, 42, 45, 47, 51, 62, 64, 65, 66, 69, 70, 73, 75, 79, 82, 83, 85, 86, 92], "m": [0, 1, 6, 14, 15, 16, 19, 23, 30, 31, 32, 34, 41, 42, 45, 64, 76, 77, 78, 79, 80, 81, 84, 85, 87, 89], "eta": 0, "l": [0, 1, 15, 22, 23, 25, 30, 37, 41, 42, 44, 48, 51, 59, 66, 80, 85, 96], "anguag": 0, "theorem": [0, 15, 19, 24, 48, 73, 74], "prover": [0, 24, 73, 74], "help": [0, 1, 4, 8, 13, 18, 20, 24, 30, 31, 40, 41, 45, 46, 47, 49, 51, 55, 58, 60, 63, 64, 65, 66, 67, 72, 75, 78, 79, 81, 82, 83, 84, 85, 86, 95], "prove": [0, 4, 14, 15, 17, 22, 23, 24, 33, 41, 47, 48, 64, 69, 74], "check": [0, 1, 4, 5, 6, 7, 8, 9, 11, 13, 15, 16, 18, 19, 20, 21, 26, 27, 30, 32, 33, 34, 35, 41, 42, 44, 45, 48, 63, 64, 65, 67, 68, 74, 77, 78, 79, 80, 81, 84, 85, 88, 89, 92, 94], "logic": [0, 15, 16, 17, 19, 23, 24, 31, 56, 60, 64, 83], "formula": [0, 1, 59], "when": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 24, 25, 27, 28, 30, 31, 32, 33, 34, 35, 36, 39, 40, 41, 42, 45, 46, 47, 48, 49, 53, 55, 58, 59, 62, 63, 64, 65, 66, 67, 72, 76, 77, 78, 79, 80, 81, 82, 83, 85, 86, 87, 88, 91, 92, 94, 95], "construct": [0, 7, 13, 14, 15, 19, 20, 22, 24, 25, 28, 33, 35, 37, 40, 44, 45, 49, 51, 59, 62, 63, 67, 73, 81, 82, 91, 92], "s": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 44, 45, 46, 47, 49, 50, 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 94, 95], "desir": [0, 7, 19, 20, 42, 49, 67, 85], "make": [0, 1, 3, 4, 5, 6, 7, 8, 9, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 27, 28, 30, 33, 35, 36, 37, 38, 40, 41, 42, 44, 45, 46, 48, 49, 51, 53, 54, 55, 58, 60, 61, 63, 64, 66, 67, 69, 70, 72, 74, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 93, 94, 95], "sure": [0, 1, 8, 15, 18, 30, 41, 45, 53, 55, 66, 67, 77, 79, 81, 84, 92, 95], "onli": [0, 3, 4, 6, 7, 8, 9, 10, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 30, 32, 33, 34, 37, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 54, 55, 56, 58, 62, 63, 64, 66, 67, 69, 73, 74, 77, 78, 79, 80, 81, 82, 84, 85, 92, 94, 95], "true": [0, 5, 6, 7, 8, 13, 14, 18, 20, 25, 28, 30, 31, 34, 35, 40, 41, 42, 45, 47, 48, 53, 54, 55, 62, 63, 64, 66, 67, 69, 74, 76, 77, 79, 80, 82, 85, 90, 92, 95], "don": [0, 1, 3, 4, 7, 8, 10, 12, 13, 14, 16, 18, 19, 20, 22, 25, 31, 32, 33, 35, 36, 42, 45, 47, 48, 49, 55, 58, 59, 62, 63, 64, 65, 67, 69, 74, 77, 78, 79, 81, 84, 86, 87, 91, 92, 94, 95], "t": [0, 1, 2, 3, 4, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 54, 55, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 69, 71, 72, 74, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 90, 91, 92, 93, 94, 95], "incorrect": [0, 7, 10, 67, 73, 92, 95], "argument": [0, 4, 5, 6, 7, 10, 13, 14, 15, 16, 18, 19, 20, 22, 27, 28, 30, 33, 37, 41, 44, 45, 47, 49, 51, 52, 53, 56, 57, 58, 62, 64, 65, 67, 77, 78, 79, 80, 87, 92], "etc": [0, 1, 5, 7, 8, 9, 12, 13, 14, 18, 21, 30, 33, 34, 35, 39, 41, 45, 47, 53, 56, 62, 63, 64, 66, 67, 74, 76, 78, 79, 80, 81, 83, 85, 92, 94], "dream": 0, "would": [0, 1, 4, 5, 6, 7, 8, 9, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 24, 25, 26, 27, 30, 35, 37, 39, 40, 41, 42, 45, 46, 47, 48, 49, 51, 53, 55, 56, 58, 59, 62, 63, 64, 65, 66, 67, 69, 73, 76, 77, 78, 79, 80, 81, 84, 85, 92, 95], "have": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 37, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 55, 56, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 93, 94, 95, 96], "determin": [0, 4, 7, 13, 15, 18, 20, 22, 27, 28, 30, 31, 37, 41, 42, 48, 53, 64, 65, 69, 80, 85], "truth": [0, 8, 17, 20, 23, 40], "falsiti": 0, "ani": [0, 1, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 16, 18, 19, 22, 24, 25, 27, 28, 30, 32, 33, 34, 35, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 53, 55, 56, 57, 60, 61, 62, 63, 64, 65, 67, 69, 71, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 90, 91, 92, 94, 95], "For": [0, 1, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 16, 18, 19, 20, 22, 25, 27, 28, 30, 31, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 53, 55, 58, 62, 63, 64, 65, 66, 67, 69, 76, 77, 78, 79, 80, 81, 84, 85, 87, 91, 92, 93, 94, 95], "some": [0, 1, 4, 5, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 47, 48, 49, 50, 51, 54, 55, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 72, 74, 75, 76, 77, 78, 79, 80, 81, 83, 85, 86, 87, 89, 90, 91, 92, 93, 94, 95], "possibl": [0, 1, 4, 5, 7, 8, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 28, 30, 32, 33, 35, 37, 39, 41, 42, 44, 45, 46, 47, 48, 49, 55, 57, 58, 62, 64, 65, 67, 69, 76, 77, 78, 79, 80, 81, 85, 89, 92, 94, 95], "But": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 25, 27, 30, 32, 33, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 68, 69, 72, 74, 75, 76, 77, 79, 80, 81, 82, 84, 85, 86, 87, 90, 92, 93, 94, 95], "groundbreak": 0, "earli": [0, 18, 21, 33, 41, 73, 79, 82], "20th": [0, 41], "centuri": [0, 67], "gener": [0, 1, 3, 8, 9, 13, 14, 15, 16, 17, 19, 21, 22, 23, 25, 27, 30, 34, 40, 44, 45, 48, 51, 53, 57, 58, 60, 63, 64, 65, 67, 68, 71, 76, 80, 82, 85, 86, 88], "do": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 28, 30, 32, 33, 35, 36, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 60, 62, 63, 64, 65, 66, 67, 69, 71, 72, 74, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 94, 95], "alonzo": 0, "church": [0, 67], "alan": [0, 72], "ture": [0, 8, 60, 67, 72, 73, 85], "independ": [0, 1, 8, 24, 36, 44, 64, 65, 73, 78, 80, 82, 85, 96], "show": [0, 1, 3, 7, 13, 14, 16, 19, 20, 22, 33, 40, 47, 48, 53, 63, 64, 67, 69, 72, 77, 78, 79, 80, 85, 92], "1936": 0, "us": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 51, 52, 53, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 69, 70, 73, 74, 76, 77, 78, 79, 81, 82, 83, 84, 85, 86, 88, 89, 90, 91, 92, 93, 94], "lambda": [0, 1, 8, 11, 54, 58, 64, 67, 68], "calculu": [0, 8, 23, 64, 67, 68], "model": [0, 8, 45, 63, 64, 68, 70, 74, 95], "now": [0, 1, 3, 4, 7, 8, 12, 13, 14, 16, 17, 18, 19, 20, 22, 25, 27, 29, 30, 31, 33, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 54, 55, 58, 60, 62, 63, 64, 66, 67, 69, 77, 78, 79, 80, 81, 84, 85, 87, 90, 91, 92, 94, 95, 96], "call": [0, 1, 3, 4, 5, 7, 8, 10, 11, 12, 13, 15, 16, 18, 19, 25, 27, 28, 29, 30, 32, 33, 35, 36, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 55, 56, 57, 58, 62, 63, 64, 65, 66, 67, 68, 69, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 84, 85, 87, 92, 95], "machin": [0, 1, 7, 8, 16, 17, 57, 62, 65, 67, 68, 72, 74, 78, 94, 95], "thesi": 0, "hypothesi": [0, 4, 19, 22, 23, 24, 67], "sai": [0, 1, 3, 5, 8, 9, 13, 16, 18, 19, 24, 25, 28, 30, 33, 42, 45, 46, 47, 54, 56, 58, 62, 64, 66, 67, 69, 72, 74, 77, 81, 85, 86, 90, 91, 95], "both": [0, 6, 7, 8, 10, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 25, 27, 28, 30, 34, 35, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 51, 52, 55, 56, 57, 58, 62, 64, 67, 69, 76, 77, 78, 79, 80, 81, 82, 83, 85, 87, 92, 95], "formal": [0, 1, 4, 17, 19, 23, 24, 63, 64, 66, 67, 69, 80, 92], "inform": [0, 4, 7, 8, 13, 16, 18, 21, 24, 27, 33, 35, 42, 64, 66, 74, 76, 77, 80, 82, 83, 86, 89, 92, 95], "instead": [0, 1, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 19, 20, 21, 22, 23, 25, 27, 28, 30, 33, 35, 36, 40, 41, 42, 45, 46, 47, 49, 51, 52, 53, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 69, 76, 77, 79, 80, 81, 84, 85, 88, 89, 92, 94, 95], "focus": [0, 75], "imposs": [0, 4, 8, 19, 25, 28, 45, 47, 74, 80], "task": [0, 7, 17, 19, 24, 30, 41, 65, 69, 74, 82, 96], "re": [0, 1, 3, 4, 5, 7, 8, 10, 11, 12, 13, 16, 17, 18, 19, 20, 22, 27, 30, 33, 35, 36, 39, 40, 41, 42, 45, 47, 49, 51, 58, 62, 63, 64, 65, 66, 67, 69, 74, 76, 77, 78, 79, 80, 81, 84, 85, 86, 87, 90, 92, 94, 95], "go": [0, 1, 2, 3, 4, 7, 8, 10, 12, 13, 14, 15, 16, 17, 19, 25, 30, 33, 35, 36, 40, 41, 42, 45, 46, 47, 48, 49, 51, 55, 58, 59, 61, 63, 64, 65, 66, 67, 71, 72, 74, 75, 77, 83, 84, 85, 92, 94, 95], "focu": [0, 4, 8, 9, 24, 48, 65, 83, 84, 94], "relationship": [0, 18, 30, 48, 69, 80, 83, 85, 92], "between": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 25, 28, 30, 33, 35, 41, 46, 47, 48, 49, 52, 53, 55, 56, 58, 59, 62, 64, 65, 66, 67, 69, 71, 74, 76, 79, 80, 82, 83, 85, 87, 88, 92, 95], "turn": [0, 6, 8, 10, 13, 15, 18, 19, 22, 27, 32, 40, 42, 44, 45, 47, 49, 55, 64, 67, 76, 80, 84, 85, 91, 95], "out": [0, 1, 4, 7, 8, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 27, 28, 30, 32, 33, 35, 40, 41, 42, 44, 45, 46, 47, 48, 49, 54, 55, 56, 58, 60, 63, 64, 65, 66, 67, 69, 70, 72, 74, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 91, 92, 94, 95, 96], "two": [0, 1, 2, 3, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 30, 31, 32, 33, 35, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 58, 60, 62, 63, 64, 65, 66, 67, 69, 70, 73, 76, 78, 79, 80, 81, 83, 84, 85, 86, 87, 89, 91, 92, 94, 95], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 86, 87, 88, 89, 90, 92, 94, 95, 96], "deepli": [0, 24, 30], "connect": [0, 4, 44, 94, 95], "surpris": [0, 5, 8, 12, 39, 55, 58, 60, 64, 66, 67, 71, 72, 74, 79, 85], "wai": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 16, 18, 19, 20, 24, 25, 30, 32, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 88, 91, 92, 94, 95], "accustom": [0, 85, 95], "manipul": [0, 8, 13, 14, 15, 18, 19, 20, 23, 31, 49, 55, 65, 74, 85], "data": [0, 1, 3, 8, 14, 15, 18, 20, 22, 23, 24, 26, 30, 33, 35, 36, 37, 39, 40, 42, 44, 45, 46, 47, 48, 49, 50, 51, 55, 56, 57, 58, 59, 60, 62, 65, 66, 70, 74, 77, 78, 80, 84, 85, 86, 90, 92, 93, 94, 96], "integ": [0, 1, 4, 5, 6, 7, 8, 13, 15, 16, 19, 20, 22, 28, 30, 32, 33, 34, 41, 42, 44, 45, 56, 58, 62, 64, 66, 67, 69, 74, 77, 78, 79, 80, 85, 88, 92, 95], "variant": [0, 10, 28, 29, 31, 36, 41, 44, 48, 51, 56, 63, 66, 67, 69, 73, 75, 79, 80, 85, 92], "function": [0, 1, 3, 4, 5, 6, 7, 9, 10, 11, 13, 14, 15, 19, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 36, 37, 40, 41, 43, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 74, 75, 76, 77, 78, 80, 81, 82, 83, 85, 86, 88, 89, 90, 91, 92, 94, 95, 96], "those": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13, 14, 18, 19, 20, 21, 22, 24, 25, 27, 29, 30, 32, 34, 35, 36, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 53, 55, 58, 59, 60, 63, 64, 65, 66, 67, 69, 72, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 91, 92, 94, 95], "valu": [0, 4, 5, 6, 8, 10, 11, 13, 14, 15, 16, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 55, 56, 57, 58, 59, 62, 63, 64, 66, 67, 68, 69, 72, 74, 75, 77, 78, 79, 80, 81, 84, 85, 86, 87, 88, 89, 90, 91, 92], "alwai": [0, 1, 7, 8, 10, 12, 14, 16, 17, 18, 19, 20, 30, 33, 40, 42, 45, 46, 47, 48, 49, 51, 55, 64, 69, 70, 74, 78, 79, 80, 81, 85, 88, 92, 94], "compil": [0, 1, 5, 7, 8, 9, 10, 12, 13, 16, 18, 20, 21, 23, 24, 27, 30, 31, 33, 41, 45, 47, 55, 57, 63, 64, 65, 66, 67, 68, 69, 70, 74, 77, 85, 86, 92, 94, 95, 96], "time": [0, 1, 3, 4, 7, 8, 9, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30, 33, 35, 37, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 50, 53, 54, 55, 56, 58, 59, 61, 62, 63, 64, 65, 66, 67, 69, 70, 72, 73, 74, 75, 77, 78, 79, 80, 85, 87, 88, 91, 92, 94, 95], "infer": [0, 7, 8, 11, 30, 35, 55, 63, 68, 69, 71, 74, 77, 80, 85, 92], "programm": [0, 4, 5, 7, 8, 9, 10, 12, 13, 15, 16, 17, 18, 19, 23, 24, 27, 30, 32, 35, 39, 47, 48, 55, 56, 60, 64, 65, 67, 71, 72, 74, 75, 76, 77, 79, 80, 82, 83, 84, 85, 92], "annot": [0, 8, 10, 16, 25, 31, 34, 38, 45, 47, 55, 63, 64, 66, 68, 76, 77, 80, 81, 84, 85, 94, 95], "express": [0, 1, 3, 6, 8, 9, 10, 11, 12, 13, 14, 16, 19, 20, 22, 25, 27, 28, 30, 31, 32, 34, 35, 36, 40, 41, 45, 47, 49, 52, 53, 55, 56, 58, 62, 63, 64, 65, 66, 67, 68, 69, 70, 72, 74, 77, 78, 79, 80, 81, 85, 86, 87, 88, 89, 92], "exampl": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 15, 18, 19, 20, 22, 23, 25, 26, 27, 28, 30, 32, 35, 38, 39, 40, 41, 42, 44, 46, 47, 48, 49, 51, 53, 55, 56, 57, 58, 62, 63, 64, 65, 67, 69, 73, 77, 78, 79, 81, 82, 84, 85, 86, 87, 88, 89, 93, 94, 95], "3110": [0, 2, 6, 7, 15, 28, 42, 63, 66, 67, 89, 94, 95, 96], "int": [0, 6, 7, 8, 10, 12, 13, 14, 15, 16, 18, 19, 20, 22, 25, 26, 27, 28, 30, 31, 32, 34, 35, 37, 39, 41, 42, 44, 45, 46, 47, 49, 51, 52, 53, 54, 55, 56, 58, 59, 62, 63, 64, 66, 67, 69, 76, 77, 78, 79, 80, 81, 84, 85, 87, 88, 89, 91, 92, 95], "list": [0, 1, 5, 8, 13, 14, 15, 16, 18, 20, 23, 25, 27, 28, 29, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 49, 50, 53, 54, 55, 56, 58, 59, 60, 63, 64, 65, 66, 67, 69, 76, 77, 78, 80, 81, 85, 87, 88, 89, 95], "learn": [0, 1, 4, 8, 9, 10, 11, 12, 14, 17, 19, 27, 29, 30, 33, 35, 40, 43, 46, 51, 58, 60, 64, 67, 69, 70, 71, 72, 74, 76, 77, 85, 86, 91, 92, 94], "read": [0, 1, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 21, 30, 34, 41, 45, 47, 48, 49, 55, 59, 63, 64, 65, 66, 67, 69, 72, 74, 76, 77, 84, 85, 92, 94, 96], "ha": [0, 1, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 24, 26, 27, 28, 30, 32, 33, 34, 35, 37, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 70, 71, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 88, 89, 91, 92, 94, 95], "let": [0, 1, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 25, 26, 27, 28, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 58, 59, 61, 62, 63, 66, 67, 68, 69, 72, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 87, 88, 89, 91, 92, 94, 95], "try": [0, 1, 3, 4, 7, 8, 12, 13, 14, 15, 16, 17, 19, 22, 24, 27, 35, 40, 41, 44, 45, 47, 49, 55, 63, 64, 67, 69, 76, 78, 80, 81, 85, 89, 93, 94, 95], "differ": [0, 1, 4, 6, 7, 8, 9, 10, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25, 30, 35, 37, 39, 40, 41, 42, 45, 46, 47, 48, 54, 55, 58, 60, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 74, 76, 78, 79, 80, 81, 82, 83, 85, 86, 87, 91, 92, 94, 95], "so": [0, 1, 3, 4, 5, 7, 8, 9, 10, 12, 13, 14, 16, 17, 18, 19, 20, 22, 24, 25, 26, 27, 30, 32, 33, 34, 35, 36, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 54, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 69, 72, 73, 74, 76, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 90, 92, 94, 95], "doe": [0, 1, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 25, 26, 27, 28, 30, 32, 33, 34, 35, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 52, 53, 54, 55, 57, 58, 63, 64, 65, 66, 67, 69, 70, 71, 74, 76, 77, 79, 80, 81, 82, 85, 87, 89, 90, 91, 92, 93, 94, 95], "think": [0, 1, 4, 5, 7, 8, 9, 12, 13, 14, 17, 18, 19, 20, 23, 24, 25, 28, 30, 32, 41, 42, 44, 45, 47, 48, 49, 51, 53, 55, 56, 58, 62, 63, 64, 65, 66, 67, 72, 76, 77, 80, 82, 83, 84, 85, 86, 90, 92, 94, 95], "set": [0, 1, 2, 9, 13, 14, 15, 18, 25, 28, 30, 33, 34, 35, 41, 42, 43, 44, 45, 47, 50, 52, 56, 64, 66, 67, 69, 70, 78, 80, 81, 83, 84, 85, 86, 92], "empti": [0, 5, 13, 14, 15, 18, 20, 22, 25, 27, 28, 30, 32, 33, 37, 40, 41, 42, 44, 45, 46, 47, 48, 49, 53, 55, 58, 62, 63, 64, 66, 69, 72, 76, 77, 78, 79, 80, 81, 85, 89, 91, 92], "likewis": [0, 1, 5, 7, 8, 19, 22, 30, 45, 64, 69, 77, 79, 80, 84], "inhabit": 0, "There": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 13, 14, 18, 19, 21, 22, 24, 25, 26, 27, 28, 30, 32, 33, 35, 39, 40, 41, 42, 44, 45, 46, 47, 48, 51, 53, 56, 58, 62, 63, 64, 66, 67, 69, 71, 74, 76, 77, 78, 79, 80, 84, 85, 86, 87, 92, 95, 96], "actual": [0, 1, 7, 8, 10, 12, 13, 14, 16, 17, 18, 20, 21, 22, 24, 25, 26, 27, 30, 32, 33, 34, 35, 36, 40, 41, 42, 44, 47, 48, 49, 52, 55, 56, 58, 62, 64, 65, 66, 67, 69, 76, 77, 79, 80, 81, 85, 86, 87, 91, 92, 94, 95], "though": [0, 2, 5, 7, 8, 9, 10, 12, 14, 19, 21, 22, 24, 25, 27, 30, 31, 35, 37, 39, 40, 42, 45, 46, 47, 48, 49, 56, 63, 64, 65, 66, 67, 69, 75, 77, 79, 80, 81, 84, 85, 90, 92, 95], "ve": [0, 4, 5, 7, 8, 9, 11, 13, 14, 17, 18, 19, 20, 22, 25, 27, 30, 33, 34, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 55, 56, 58, 59, 62, 63, 64, 66, 67, 68, 69, 72, 76, 77, 79, 80, 81, 83, 84, 85, 90, 91, 92, 94, 95], "never": [0, 1, 5, 7, 8, 10, 13, 14, 18, 19, 24, 25, 27, 30, 40, 41, 42, 44, 45, 46, 47, 49, 51, 54, 62, 64, 65, 67, 69, 71, 76, 77, 78, 79, 85, 90, 92, 95], "had": [0, 1, 7, 12, 14, 17, 25, 33, 40, 41, 44, 45, 46, 47, 51, 55, 57, 64, 67, 70, 71, 74, 77, 78, 79, 80, 81, 85, 87, 92, 94], "reason": [0, 1, 3, 7, 8, 10, 14, 18, 21, 22, 23, 24, 30, 33, 40, 42, 45, 47, 49, 58, 60, 62, 64, 66, 67, 74, 76, 77, 80, 81, 82, 85, 86, 90, 91, 92, 93, 94, 95], "mention": [0, 18, 25, 41, 44, 58, 67, 77, 81, 83, 92], "befor": [0, 1, 4, 5, 7, 8, 9, 10, 12, 13, 16, 18, 19, 20, 22, 24, 25, 27, 28, 29, 33, 34, 35, 37, 40, 41, 44, 45, 46, 47, 48, 49, 51, 55, 58, 63, 64, 65, 67, 71, 74, 76, 77, 78, 79, 80, 85, 90, 92, 93, 95], "defin": [0, 1, 6, 7, 8, 9, 12, 14, 15, 16, 18, 19, 22, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 37, 39, 40, 41, 42, 44, 45, 47, 52, 53, 55, 56, 58, 62, 63, 64, 65, 66, 69, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 89, 92], "constructor": [0, 22, 25, 27, 28, 30, 31, 32, 35, 36, 39, 41, 42, 48, 49, 51, 55, 63, 65, 66, 67, 69, 80, 83, 85, 88, 92], "could": [0, 1, 3, 4, 5, 7, 8, 9, 10, 13, 14, 15, 16, 18, 19, 20, 24, 25, 28, 30, 33, 35, 38, 40, 41, 42, 45, 46, 47, 48, 49, 51, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 68, 72, 73, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 87, 90, 92, 94, 95], "anyth": [0, 4, 8, 10, 12, 16, 21, 25, 30, 32, 33, 41, 45, 47, 62, 64, 67, 77, 95], "want": [0, 1, 2, 3, 4, 7, 8, 9, 10, 12, 13, 16, 17, 18, 19, 20, 22, 25, 27, 30, 32, 33, 35, 36, 41, 42, 44, 45, 46, 47, 49, 51, 52, 54, 55, 58, 59, 62, 63, 64, 65, 66, 67, 69, 71, 77, 78, 79, 80, 81, 85, 87, 92, 94, 95], "special": [0, 3, 5, 7, 10, 20, 29, 30, 34, 41, 47, 62, 64, 65, 66, 77, 78, 80, 85], "syntax": [0, 3, 7, 8, 9, 10, 11, 12, 22, 23, 27, 28, 32, 34, 35, 36, 39, 42, 45, 47, 49, 58, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 79, 84, 85, 88, 91, 95], "just": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 18, 19, 20, 22, 24, 25, 26, 27, 28, 30, 33, 34, 35, 39, 40, 41, 42, 45, 46, 47, 48, 49, 51, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 72, 74, 76, 77, 78, 79, 80, 81, 82, 83, 85, 86, 92, 94, 95], "write": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 28, 30, 31, 32, 33, 35, 37, 39, 41, 42, 44, 45, 47, 48, 49, 50, 51, 52, 53, 55, 56, 57, 58, 60, 62, 63, 64, 66, 67, 69, 72, 74, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 89, 91, 92, 94], "note": [0, 1, 3, 5, 6, 7, 8, 9, 12, 14, 15, 16, 18, 19, 20, 26, 27, 28, 30, 35, 41, 42, 46, 47, 48, 49, 51, 54, 59, 62, 63, 64, 66, 67, 69, 70, 76, 77, 78, 79, 80, 84, 85, 87, 91, 92, 94, 95, 96], "might": [0, 1, 3, 4, 5, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 22, 24, 25, 27, 29, 30, 31, 32, 33, 36, 38, 39, 40, 41, 42, 45, 46, 47, 48, 49, 55, 56, 57, 58, 59, 60, 62, 64, 65, 66, 67, 68, 69, 72, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 89, 90, 92, 94, 95], "give": [0, 1, 3, 8, 9, 10, 13, 16, 17, 24, 25, 28, 30, 33, 38, 40, 41, 47, 48, 55, 58, 64, 67, 72, 74, 76, 77, 78, 79, 82, 84, 89, 92, 95], "editor": [0, 3, 4, 16, 33, 47, 94, 95], "troubl": [0, 8, 12, 40, 64, 84, 95], "need": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 30, 31, 33, 34, 35, 36, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 55, 56, 57, 58, 62, 63, 64, 65, 66, 67, 69, 71, 74, 76, 77, 78, 79, 80, 81, 82, 84, 85, 92, 94, 95], "put": [0, 1, 3, 7, 8, 10, 12, 33, 41, 42, 45, 47, 55, 58, 64, 66, 69, 73, 75, 76, 78, 79, 85, 87, 90, 92, 95], "doubl": [0, 1, 3, 5, 6, 7, 10, 12, 18, 20, 30, 40, 41, 42, 48, 53, 56, 63], "semicolon": [0, 3, 12, 45, 65, 92, 95], "after": [0, 4, 5, 7, 8, 10, 16, 19, 20, 27, 28, 29, 30, 33, 35, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 55, 57, 61, 62, 65, 66, 67, 68, 69, 70, 71, 72, 76, 78, 79, 85, 88, 92, 94, 95], "get": [0, 1, 3, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 27, 28, 30, 33, 34, 35, 40, 41, 42, 45, 46, 47, 48, 49, 51, 55, 58, 59, 61, 63, 64, 66, 67, 69, 71, 74, 77, 78, 79, 80, 81, 83, 85, 86, 87, 88, 89, 92, 95], "format": [0, 3, 5, 9, 10, 15, 19, 24, 30, 66, 75, 77, 78, 84, 94], "right": [0, 1, 3, 7, 8, 9, 10, 12, 17, 18, 19, 20, 22, 25, 26, 27, 28, 30, 32, 34, 35, 37, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 58, 59, 62, 63, 64, 65, 66, 67, 72, 77, 78, 79, 80, 81, 85, 87, 89, 92, 94, 95], "exactli": [0, 4, 7, 8, 13, 18, 20, 25, 27, 28, 30, 35, 37, 40, 41, 42, 45, 47, 48, 55, 57, 63, 66, 67, 69, 76, 77, 78, 80, 85, 86, 87, 95], "becaus": [0, 1, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 35, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 55, 56, 58, 62, 63, 64, 65, 66, 67, 69, 72, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 91, 92, 94, 95], "under": [0, 5, 7, 8, 10, 15, 19, 20, 34, 42, 47, 55, 58, 64, 95, 96], "new": [0, 1, 2, 3, 7, 8, 9, 13, 14, 15, 17, 18, 20, 21, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 53, 55, 56, 58, 60, 62, 63, 64, 65, 67, 69, 70, 71, 72, 74, 75, 77, 78, 79, 80, 81, 83, 85, 86, 87, 88, 90, 91, 92, 93, 95], "about": [0, 1, 2, 4, 5, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 27, 28, 29, 30, 32, 33, 34, 35, 40, 41, 42, 43, 45, 47, 48, 49, 51, 53, 55, 56, 57, 58, 59, 61, 62, 64, 65, 66, 67, 69, 70, 71, 72, 74, 75, 76, 77, 78, 79, 80, 82, 83, 84, 85, 86, 90, 92, 93, 95, 96], "transform": [0, 8, 12, 19, 30, 33, 42, 45, 47, 48, 53, 55, 56, 58, 65, 66, 67], "alreadi": [0, 1, 2, 3, 4, 5, 8, 9, 12, 14, 18, 19, 25, 26, 27, 28, 30, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 52, 55, 58, 62, 64, 67, 69, 72, 76, 77, 78, 79, 80, 85, 87, 90, 91, 92, 94, 95], "follow": [0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 13, 14, 16, 18, 19, 20, 22, 24, 25, 27, 28, 30, 31, 33, 34, 35, 38, 39, 40, 41, 42, 45, 46, 47, 48, 49, 53, 56, 58, 62, 63, 64, 65, 66, 67, 70, 76, 77, 78, 79, 80, 81, 83, 85, 87, 88, 89, 91, 92, 94, 95], "destruct": [0, 62, 74, 79, 91], "pair": [0, 4, 13, 14, 15, 18, 19, 23, 24, 25, 26, 27, 28, 31, 34, 35, 36, 42, 45, 46, 52, 53, 56, 62, 63, 67, 76, 77, 78, 79, 80], "x": [0, 4, 6, 7, 8, 10, 12, 13, 14, 15, 16, 18, 19, 20, 22, 25, 27, 28, 30, 33, 34, 35, 37, 38, 39, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 58, 59, 62, 63, 64, 65, 66, 67, 69, 74, 76, 77, 78, 79, 80, 81, 84, 85, 87, 88, 89, 91, 92, 95], "y": [0, 6, 7, 8, 13, 14, 15, 16, 19, 22, 28, 33, 34, 35, 44, 45, 46, 47, 48, 52, 55, 56, 62, 63, 64, 66, 67, 74, 76, 77, 78, 80, 81, 84, 85, 87, 89, 91, 92, 95], "fst": [0, 34, 42, 52, 62, 63, 67, 79], "snd": [0, 34, 52, 62, 67, 77], "val": [0, 7, 8, 10, 12, 13, 14, 15, 16, 18, 19, 20, 22, 25, 26, 28, 30, 31, 32, 34, 35, 37, 38, 39, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 54, 55, 56, 58, 59, 64, 69, 76, 77, 78, 79, 80, 81, 84, 85, 87, 88, 89, 91, 92], "b": [0, 7, 8, 14, 15, 16, 19, 22, 23, 25, 26, 27, 28, 30, 34, 38, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 53, 55, 56, 58, 62, 63, 64, 66, 67, 69, 77, 79, 80, 81, 84, 85, 87, 89, 92], "fun": [0, 1, 3, 6, 7, 8, 10, 12, 13, 16, 17, 18, 19, 20, 22, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 37, 38, 39, 41, 42, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 58, 59, 62, 63, 64, 65, 67, 77, 79, 80, 81, 84, 85, 87, 89, 91, 92, 95], "take": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 15, 16, 17, 18, 20, 22, 24, 25, 28, 30, 32, 33, 36, 37, 40, 41, 42, 43, 44, 45, 46, 47, 49, 51, 52, 53, 55, 56, 57, 58, 59, 63, 64, 65, 66, 67, 69, 70, 71, 77, 78, 79, 80, 82, 84, 85, 86, 92, 94, 95], "back": [0, 4, 8, 11, 15, 17, 20, 22, 25, 30, 33, 35, 40, 41, 42, 45, 47, 48, 49, 55, 58, 62, 63, 64, 65, 67, 68, 69, 70, 76, 77, 79, 80, 85, 92, 95], "That": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 17, 18, 19, 20, 22, 23, 24, 25, 27, 30, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 45, 46, 47, 48, 49, 51, 53, 55, 58, 62, 64, 65, 66, 67, 69, 72, 74, 76, 77, 78, 79, 80, 81, 83, 85, 86, 87, 88, 92, 95], "latter": [0, 1, 6, 7, 8, 14, 18, 23, 24, 30, 40, 45, 47, 51, 58, 66, 69, 77, 84, 87, 94], "piec": [0, 3, 4, 7, 9, 12, 17, 18, 19, 20, 22, 23, 24, 25, 27, 30, 33, 35, 42, 49, 61, 64, 65, 66, 67, 79, 82, 83], "individu": [0, 4, 7, 18, 20, 25, 33, 34, 39, 40, 46, 55, 56, 64, 66, 67, 79, 94], "similarli": [0, 8, 14, 16, 18, 31, 42, 45, 47, 49, 56, 64, 66, 67, 79, 80, 85, 92], "extract": [0, 5, 28, 30, 32, 41, 45, 47, 49, 79, 80], "from": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 47, 49, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 91, 92, 93, 94, 95], "thu": [0, 5, 7, 8, 13, 14, 19, 22, 25, 30, 32, 33, 35, 39, 40, 41, 42, 44, 45, 47, 48, 51, 55, 58, 62, 64, 65, 66, 67, 69, 77, 79, 80, 83, 85, 87, 92, 93], "If": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 28, 30, 32, 33, 34, 35, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 55, 58, 62, 63, 64, 66, 67, 69, 71, 76, 78, 79, 80, 81, 82, 85, 86, 87, 88, 92, 94, 95], "produc": [0, 1, 3, 6, 7, 8, 12, 13, 18, 19, 20, 23, 25, 27, 30, 32, 33, 34, 35, 39, 41, 42, 45, 46, 47, 49, 53, 58, 59, 62, 63, 64, 65, 66, 67, 69, 74, 78, 79, 80, 83, 87, 89, 92, 94], "In": [0, 1, 3, 4, 5, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 27, 29, 30, 32, 33, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 53, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 90, 91, 92, 94, 95], "discret": [0, 17, 23, 66, 68, 69, 82, 94], "mathemat": [0, 1, 4, 5, 7, 8, 9, 16, 17, 18, 19, 22, 23, 24, 30, 31, 42, 45, 49, 53, 58, 62, 64, 66, 67, 68, 69, 73, 74, 76, 94], "class": [0, 1, 4, 8, 10, 13, 23, 30, 45, 47, 64, 66, 71, 72, 74, 75, 76, 77, 79, 80, 81, 82, 83, 86, 92], "order": [0, 1, 8, 13, 15, 19, 20, 27, 28, 30, 34, 35, 36, 37, 41, 42, 45, 47, 48, 49, 51, 52, 53, 55, 58, 59, 60, 63, 64, 65, 66, 77, 78, 79, 80, 81, 82, 85, 91, 92, 94], "statement": [0, 1, 4, 7, 10, 40, 45, 47, 72, 78, 81, 85], "hold": [0, 7, 14, 16, 18, 19, 20, 30, 34, 35, 40, 41, 42, 45, 47, 64, 67, 69, 78, 82, 85, 92], "each": [0, 1, 3, 6, 7, 8, 10, 13, 14, 15, 18, 19, 20, 22, 24, 25, 28, 30, 33, 35, 36, 37, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 55, 56, 58, 60, 63, 64, 65, 66, 67, 69, 77, 78, 79, 80, 81, 82, 85, 86, 87, 88, 89, 92, 94, 95], "conjunct": [0, 7, 15, 19, 88], "must": [0, 1, 4, 5, 6, 7, 8, 10, 12, 13, 14, 16, 18, 19, 21, 22, 24, 25, 27, 28, 30, 34, 35, 39, 40, 41, 42, 45, 46, 47, 48, 49, 53, 62, 64, 65, 66, 67, 69, 76, 79, 80, 81, 82, 84, 85, 91, 92, 95], "well": [0, 1, 4, 5, 7, 8, 9, 13, 15, 16, 18, 19, 20, 21, 23, 24, 30, 41, 42, 45, 46, 47, 49, 51, 55, 58, 63, 64, 66, 67, 68, 69, 71, 73, 74, 77, 78, 79, 80, 81, 82, 85, 92, 94, 95], "conclud": [0, 8, 14, 19, 34, 40, 64], "pattern": [0, 13, 20, 22, 25, 28, 29, 32, 35, 36, 37, 40, 41, 45, 48, 49, 50, 51, 52, 55, 56, 57, 58, 63, 64, 65, 67, 69, 71, 74, 77, 79], "denot": [0, 8, 25, 49, 62, 66, 67, 85], "implic": [0, 13, 15, 42, 95], "form": [0, 3, 6, 8, 9, 13, 14, 15, 18, 19, 21, 23, 25, 27, 30, 34, 35, 39, 42, 45, 46, 48, 53, 59, 60, 63, 64, 67, 68, 69, 78, 80, 82, 83, 85, 94, 96], "thei": [0, 1, 2, 3, 5, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 70, 73, 74, 76, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 90, 92, 94, 95, 96], "anoth": [0, 1, 2, 5, 7, 8, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 28, 30, 33, 35, 38, 40, 41, 42, 45, 46, 47, 48, 49, 52, 53, 56, 58, 59, 64, 66, 67, 70, 73, 76, 77, 79, 80, 81, 83, 85, 92, 94, 95], "notic": [0, 6, 8, 18, 20, 25, 27, 30, 33, 37, 40, 44, 45, 47, 48, 49, 55, 58, 64, 65, 76, 77, 78, 80, 84, 85], "how": [0, 1, 3, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 27, 28, 30, 31, 32, 33, 34, 35, 37, 39, 41, 42, 43, 44, 45, 46, 47, 48, 51, 52, 53, 54, 55, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 72, 74, 75, 76, 77, 78, 79, 81, 82, 84, 85, 87, 92, 94, 95], "given": [0, 6, 7, 8, 9, 12, 13, 14, 18, 20, 21, 26, 27, 28, 30, 32, 33, 34, 35, 39, 42, 44, 47, 48, 53, 56, 64, 67, 78, 80, 83, 84, 86, 91, 92, 95], "same": [0, 1, 3, 4, 5, 7, 8, 10, 11, 12, 14, 15, 16, 18, 19, 20, 22, 25, 26, 27, 28, 30, 34, 35, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 54, 55, 56, 58, 59, 62, 64, 65, 66, 67, 68, 69, 70, 74, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 91, 92, 94, 95], "fact": [0, 1, 4, 6, 7, 8, 13, 14, 16, 17, 19, 20, 22, 24, 25, 30, 33, 34, 40, 45, 47, 48, 49, 53, 58, 59, 62, 63, 64, 67, 72, 77, 79, 80, 81, 83, 84, 85, 90, 91, 92], "close": [0, 2, 6, 15, 18, 19, 20, 21, 32, 33, 40, 41, 42, 48, 55, 59, 66, 70, 81, 85, 94, 95], "look": [0, 4, 7, 9, 10, 12, 13, 14, 15, 16, 18, 19, 20, 22, 26, 30, 33, 35, 40, 41, 42, 43, 44, 45, 46, 47, 49, 55, 58, 62, 64, 65, 66, 67, 69, 77, 78, 79, 80, 81, 82, 85, 91, 92, 94, 95], "compar": [0, 1, 6, 8, 9, 18, 19, 20, 22, 24, 28, 37, 41, 42, 44, 45, 47, 48, 51, 53, 59, 63, 64, 78, 79, 80, 81, 83, 84, 85, 92], "describ": [0, 2, 3, 5, 7, 8, 14, 16, 18, 19, 21, 41, 42, 47, 66, 68, 76, 78, 83, 87, 95], "valid": [0, 4, 6, 14, 16, 18, 19, 23, 28, 34, 44, 53, 66, 73, 85], "replac": [0, 1, 7, 8, 19, 33, 42, 45, 48, 51, 53, 55, 64, 65, 66, 67, 69, 74, 77, 81, 84, 92], "ident": [0, 7, 8, 14, 18, 19, 23, 41, 45, 50, 51, 55, 64, 67, 80, 81, 92], "discov": [0, 4, 9, 15, 16, 19, 24, 33, 45, 49, 54, 55, 58, 64, 67, 85, 95], "accid": [0, 8, 30, 45, 47, 54], "occur": [0, 4, 5, 6, 7, 8, 12, 15, 17, 18, 22, 30, 37, 39, 40, 41, 42, 45, 46, 47, 48, 58, 62, 63, 64, 65, 66, 67, 69, 74, 78, 79, 81, 85, 92, 95], "three": [0, 1, 4, 5, 6, 7, 8, 13, 17, 18, 19, 20, 24, 27, 28, 30, 31, 33, 35, 40, 41, 42, 45, 46, 47, 51, 53, 55, 56, 63, 65, 66, 67, 78, 79, 88, 94, 95], "specif": [0, 4, 8, 13, 15, 17, 18, 20, 23, 24, 27, 28, 30, 33, 41, 44, 45, 47, 48, 49, 58, 65, 70, 71, 76, 77, 78, 80, 81, 82, 85, 86, 95], "rather": [0, 1, 2, 3, 4, 5, 7, 8, 9, 12, 15, 18, 19, 22, 24, 25, 27, 30, 33, 35, 36, 40, 42, 44, 45, 47, 49, 55, 58, 59, 61, 63, 64, 66, 67, 69, 70, 76, 77, 78, 80, 81, 82, 84, 85, 86, 87, 91, 92, 95], "deep": [0, 8, 10, 49, 50], "phenomenon": [0, 7, 48, 64], "link": [0, 3, 13, 23, 25, 30, 33, 35, 36, 42, 46, 49, 58, 79, 85, 95], "field": [0, 20, 28, 35, 36, 41, 45, 47, 65, 71, 77, 78, 79, 81, 89, 92, 93], "aspect": [0, 8, 9, 18, 46, 86], "been": [0, 1, 3, 5, 7, 8, 9, 12, 13, 14, 16, 17, 18, 19, 20, 24, 25, 34, 39, 40, 42, 44, 45, 46, 47, 48, 49, 50, 54, 57, 58, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 76, 77, 78, 80, 81, 83, 85, 87, 92, 94, 95], "mani": [0, 1, 3, 4, 8, 9, 10, 13, 14, 15, 16, 18, 20, 21, 23, 24, 25, 27, 28, 29, 30, 33, 35, 36, 40, 41, 42, 44, 45, 47, 49, 53, 54, 55, 56, 58, 63, 64, 65, 66, 67, 69, 70, 73, 74, 76, 79, 80, 82, 83, 85, 86, 88, 89, 90, 92, 94, 95], "peopl": [0, 1, 6, 16, 21, 24, 33, 52, 58, 64, 67], "work": [0, 1, 3, 4, 5, 6, 7, 8, 9, 13, 14, 15, 16, 18, 19, 20, 22, 23, 24, 25, 28, 30, 32, 33, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 55, 56, 58, 63, 64, 65, 67, 70, 73, 74, 76, 77, 78, 80, 81, 82, 83, 84, 85, 87, 92, 95, 96], "area": [0, 6, 25, 56, 64, 80], "goe": [0, 7, 8, 21, 25, 33, 40, 41, 42, 45, 47, 55, 65, 74, 76, 82], "name": [0, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 16, 18, 19, 20, 23, 25, 26, 27, 28, 30, 33, 34, 35, 37, 38, 39, 41, 42, 44, 45, 47, 52, 54, 55, 56, 58, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 76, 77, 78, 79, 80, 81, 83, 84, 85, 87, 89, 91, 95], "One": [0, 1, 7, 8, 9, 12, 13, 16, 17, 20, 21, 22, 24, 25, 26, 27, 28, 35, 40, 41, 42, 44, 45, 47, 48, 51, 55, 58, 63, 64, 66, 67, 76, 77, 79, 81, 82, 84, 85, 86, 87, 90, 92, 94], "common": [0, 1, 4, 9, 10, 12, 13, 16, 19, 21, 23, 24, 27, 28, 30, 42, 44, 48, 55, 58, 65, 72, 74, 77, 78, 81, 83, 85, 95, 96], "logician": [0, 52], "haskel": [0, 23, 30, 32, 33, 45, 47, 49, 52, 67, 71, 73, 74], "whom": 0, "william": 0, "idea": [0, 1, 4, 5, 6, 8, 9, 10, 11, 13, 14, 17, 18, 22, 24, 25, 40, 41, 42, 44, 45, 46, 47, 49, 54, 55, 56, 58, 59, 60, 62, 64, 66, 67, 69, 70, 72, 73, 77, 78, 79, 80, 81, 82, 84, 85, 86, 92, 94], "aka": [0, 3, 7, 13, 14, 15, 20, 29, 47, 49, 51, 66, 68, 69, 78, 79, 83, 87, 95], "seen": [0, 1, 8, 10, 11, 18, 19, 22, 25, 39, 41, 42, 44, 45, 46, 47, 48, 51, 52, 55, 56, 58, 62, 64, 67, 77, 79, 80, 84, 85, 86, 90, 91, 92], "first": [0, 1, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 16, 18, 19, 20, 21, 22, 24, 25, 27, 28, 30, 33, 34, 35, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 53, 55, 56, 58, 59, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 89, 91, 92, 94, 95], "themselv": [0, 7, 42, 49, 62, 67, 79, 85, 88, 92], "done": [0, 2, 3, 5, 7, 8, 9, 13, 17, 18, 30, 33, 40, 41, 42, 45, 46, 47, 48, 49, 51, 55, 60, 63, 64, 65, 73, 76, 78, 82, 84, 88, 95], "involv": [0, 2, 4, 8, 14, 19, 21, 22, 24, 25, 30, 33, 35, 41, 42, 45, 48, 62, 63, 64, 65, 74, 80, 82, 85, 87, 92, 95], "haven": [0, 7, 10, 25, 30, 39, 49, 64, 67, 77, 82], "third": [0, 1, 4, 8, 16, 17, 19, 23, 28, 30, 47, 52, 55, 56, 63, 64, 66, 67, 77, 81, 92, 94, 95], "yet": [0, 1, 7, 8, 12, 13, 14, 17, 18, 25, 30, 34, 39, 41, 47, 53, 58, 63, 64, 67, 81, 83, 85, 87, 92], "later": [0, 4, 7, 8, 14, 16, 22, 25, 26, 27, 29, 30, 33, 35, 39, 40, 45, 46, 47, 48, 49, 57, 58, 62, 64, 65, 66, 67, 70, 73, 79, 85, 88, 92, 95], "dig": [0, 94], "appreci": [0, 42, 45, 55, 72, 75, 86, 94, 95], "them": [0, 1, 2, 3, 4, 5, 7, 8, 9, 12, 13, 14, 15, 16, 18, 19, 20, 21, 24, 25, 27, 28, 30, 33, 35, 36, 39, 40, 41, 42, 44, 45, 47, 48, 49, 51, 52, 53, 55, 56, 57, 58, 62, 63, 64, 65, 66, 67, 69, 71, 72, 74, 76, 79, 80, 81, 82, 83, 84, 86, 90, 92, 94, 95], "more": [0, 1, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 30, 32, 33, 35, 36, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 53, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 74, 77, 78, 79, 80, 82, 84, 85, 86, 89, 90, 92, 94, 95], "fulli": [0, 24, 65], "creat": [0, 2, 6, 8, 12, 13, 14, 15, 18, 19, 20, 22, 27, 28, 30, 32, 33, 36, 41, 42, 44, 45, 46, 47, 48, 49, 54, 56, 58, 64, 66, 76, 77, 78, 79, 80, 81, 85, 87, 88, 89, 90, 92, 96], "atom": [0, 1, 15], "negat": [0, 15, 45, 65, 92], "disjunct": [0, 7, 15], "bnf": [0, 63, 66, 67, 68], "p": [0, 6, 13, 15, 19, 22, 25, 27, 28, 30, 34, 41, 47, 51, 53, 54, 55, 56, 58, 63, 64, 78, 80, 91, 92, 96], "identifi": [0, 1, 5, 7, 8, 11, 12, 13, 21, 30, 34, 35, 39, 63, 64, 65, 66, 67, 69, 85], "rain": [0, 15], "snow": [0, 15], "cold": [0, 15, 74], "state": [0, 5, 8, 15, 16, 19, 20, 21, 22, 23, 32, 45, 47, 48, 56, 62, 64, 67, 74, 75, 78], "simultan": [0, 15, 47, 77], "weather": [0, 15], "condit": [0, 5, 7, 15, 16, 18, 19, 23, 47, 48, 50, 67, 69], "known": [0, 4, 7, 8, 10, 13, 15, 16, 19, 21, 22, 24, 26, 35, 41, 42, 47, 57, 64, 66, 67, 69, 70, 74, 79, 81, 82, 85], "ithac": [0, 15], "world": [0, 1, 3, 6, 10, 11, 25, 36, 40, 41, 42, 45, 50, 60, 64, 68, 75, 81, 82, 84, 86, 87, 92, 93, 94], "distinguish": [0, 7, 8, 13, 18, 39, 40, 47, 66, 80], "written": [0, 1, 5, 6, 7, 8, 9, 10, 13, 16, 17, 18, 21, 23, 30, 33, 35, 42, 45, 46, 47, 48, 51, 52, 53, 56, 64, 66, 67, 69, 72, 73, 75, 76, 77, 78, 79, 80, 82, 85, 89, 92, 94], "fals": [0, 6, 7, 14, 20, 25, 28, 30, 31, 37, 41, 47, 48, 53, 54, 55, 62, 63, 66, 67, 76, 77, 79, 80, 85, 88, 92], "respect": [0, 10, 16, 30, 41, 44, 66, 70, 79, 82], "togeth": [0, 1, 8, 9, 10, 18, 22, 41, 42, 45, 46, 47, 53, 59, 64, 65, 66, 69, 72, 73, 80, 82, 83, 86, 87, 95, 96], "assert": [0, 4, 6, 11, 18, 19, 23, 33, 41, 45, 47, 56, 85], "product": [0, 4, 9, 16, 18, 25, 28, 35, 36, 47, 53, 65, 66, 82], "other": [0, 1, 2, 3, 4, 7, 8, 9, 10, 12, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 38, 40, 41, 42, 45, 46, 47, 48, 49, 53, 56, 57, 59, 60, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 91, 92, 94, 95], "word": [0, 1, 2, 5, 7, 8, 9, 14, 17, 19, 24, 25, 30, 35, 39, 40, 44, 45, 47, 48, 58, 65, 66, 67, 69, 70, 76, 77, 78, 79, 80, 85, 92, 95, 96], "assum": [0, 1, 6, 8, 14, 15, 19, 21, 25, 28, 34, 40, 41, 42, 44, 47, 63, 66, 67, 79, 94, 95], "sens": [0, 8, 13, 16, 17, 18, 19, 20, 22, 27, 42, 45, 49, 51, 58, 63, 64, 66, 67, 77, 82, 85, 86, 91], "even": [0, 1, 4, 5, 7, 8, 9, 10, 13, 15, 16, 17, 19, 20, 21, 24, 25, 31, 32, 33, 36, 40, 41, 42, 45, 46, 47, 48, 49, 52, 53, 54, 55, 56, 58, 62, 64, 65, 67, 70, 71, 74, 77, 78, 79, 80, 81, 82, 84, 85, 92, 95], "clearli": [0, 13, 16, 24, 42, 45, 51, 58, 86, 92], "Such": [0, 5, 14, 17, 19, 22, 25, 31, 64, 66], "exhibit": [0, 20, 78], "appli": [0, 1, 4, 6, 8, 12, 14, 15, 16, 17, 18, 19, 20, 22, 24, 27, 30, 40, 41, 44, 45, 47, 49, 51, 52, 53, 54, 55, 56, 58, 60, 62, 63, 64, 67, 77, 78, 79, 80, 81, 85, 92], "difficult": [0, 7, 16, 17, 19, 22, 24, 25, 41, 42, 47, 74, 82, 90], "concis": [0, 5, 16, 48], "either": [0, 4, 7, 8, 9, 10, 13, 18, 21, 22, 24, 25, 27, 28, 30, 31, 32, 40, 41, 45, 46, 47, 48, 53, 57, 58, 62, 64, 66, 67, 69, 70, 76, 78, 80, 81, 83, 85, 95], "strengthen": [0, 19, 41], "further": [0, 4, 13, 16, 19, 21, 22, 30, 44, 46, 47, 48, 64, 65, 67, 77, 85, 95], "specifi": [0, 4, 5, 7, 8, 10, 13, 15, 16, 20, 21, 27, 30, 42, 58, 66, 67, 69, 74, 77, 78, 80, 82, 84, 85], "why": [0, 4, 7, 8, 15, 18, 19, 24, 28, 29, 30, 33, 34, 40, 41, 42, 44, 47, 48, 49, 51, 54, 55, 58, 62, 63, 64, 67, 72, 74, 77, 78, 80, 81, 85, 91, 92], "matter": [0, 1, 7, 8, 14, 15, 16, 20, 28, 30, 40, 42, 47, 48, 49, 53, 55, 58, 62, 64, 68, 72, 79, 85, 92, 95], "suppos": [0, 4, 6, 7, 8, 10, 12, 13, 14, 16, 18, 19, 22, 25, 28, 30, 32, 33, 35, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 54, 59, 63, 64, 67, 76, 77, 78, 80, 81, 82, 87, 92], "were": [0, 4, 5, 6, 9, 10, 14, 16, 17, 19, 22, 25, 30, 33, 40, 42, 43, 45, 46, 48, 49, 56, 57, 58, 64, 65, 66, 67, 70, 72, 73, 74, 77, 78, 79, 80, 81, 84, 85, 87, 94, 95], "twin": 0, "prime": [0, 30, 41, 49, 56], "conjectur": 0, "unsolv": 0, "problem": [0, 1, 6, 8, 12, 13, 14, 16, 18, 19, 20, 21, 22, 24, 25, 27, 28, 30, 37, 40, 42, 44, 45, 47, 48, 49, 51, 53, 55, 62, 63, 64, 67, 73, 74, 77, 79, 80, 81, 82, 85, 87, 92, 94, 95], "infinit": [0, 7, 16, 19, 25, 27, 41, 43, 45, 47, 49, 50, 63, 67], "n": [0, 1, 6, 8, 10, 13, 14, 15, 16, 19, 20, 22, 25, 28, 30, 34, 35, 40, 41, 42, 44, 46, 47, 48, 49, 53, 54, 58, 59, 64, 77, 78, 79, 80, 81, 84, 85, 88, 89, 91, 92], "2": [0, 2, 4, 5, 6, 7, 8, 10, 11, 13, 14, 15, 16, 18, 19, 20, 22, 25, 28, 30, 33, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 53, 54, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 68, 75, 77, 78, 79, 80, 81, 84, 85, 86, 88, 89, 92, 95], "3": [0, 3, 4, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 22, 23, 25, 28, 30, 33, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 47, 48, 49, 53, 54, 55, 56, 57, 58, 60, 63, 64, 65, 66, 67, 76, 77, 78, 79, 81, 85, 87, 89, 91, 92], "5": [0, 1, 6, 7, 8, 10, 12, 14, 15, 22, 23, 28, 30, 35, 36, 37, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 56, 60, 63, 64, 67, 68, 69, 71, 77, 79, 81, 85, 87, 88, 91, 92, 95], "7": [0, 1, 6, 7, 8, 12, 14, 22, 30, 36, 37, 39, 40, 41, 42, 45, 46, 48, 49, 53, 63, 77, 80, 81, 85, 89, 92, 93], "tp": 0, "Then": [0, 3, 8, 15, 17, 19, 30, 33, 40, 41, 42, 44, 46, 48, 51, 55, 56, 58, 59, 63, 64, 65, 66, 67, 70, 76, 77, 78, 79, 81, 84, 87, 89, 92, 94, 95], "seem": [0, 1, 6, 7, 8, 22, 24, 25, 27, 30, 33, 42, 44, 45, 49, 55, 56, 58, 62, 67, 68, 70, 76, 77, 80, 81, 84, 85, 86, 92], "aren": [0, 1, 8, 17, 18, 26, 28, 45, 46, 55, 66, 67, 74, 77, 81, 95], "wouldn": [0, 4, 45, 72, 77, 81, 84], "figur": [0, 12, 18, 22, 42, 44, 48, 64, 65, 67, 74, 79, 80, 81], "side": [0, 3, 7, 10, 13, 14, 19, 22, 26, 30, 34, 35, 43, 44, 45, 48, 49, 62, 64, 66, 67, 73, 74, 75, 80, 81, 82, 85, 88, 90], "left": [0, 2, 7, 8, 12, 18, 19, 22, 25, 26, 27, 30, 34, 35, 37, 41, 42, 44, 45, 47, 48, 50, 51, 58, 59, 62, 63, 64, 66, 67, 77, 78, 79, 80, 85, 89, 91, 92, 95], "disproof": 0, "No": [0, 1, 16, 17, 21, 30, 42, 64, 72, 77, 78, 79], "know": [0, 1, 3, 4, 7, 8, 9, 10, 12, 13, 16, 17, 18, 19, 20, 22, 23, 27, 32, 33, 41, 42, 45, 49, 51, 52, 62, 64, 65, 66, 67, 69, 71, 72, 77, 78, 79, 80, 81, 82, 85, 91, 92, 94], "current": [0, 1, 2, 3, 8, 12, 20, 27, 30, 40, 41, 42, 44, 47, 58, 62, 67, 79, 85, 89, 92, 94, 95], "henceforth": [0, 13, 19, 47, 95], "stronger": [0, 19], "whether": [0, 1, 4, 7, 8, 9, 12, 13, 15, 16, 17, 18, 19, 20, 24, 25, 26, 27, 28, 30, 31, 33, 35, 37, 38, 39, 41, 42, 45, 47, 53, 54, 55, 56, 63, 64, 65, 66, 67, 69, 77, 78, 79, 80, 85, 92, 95], "necessarili": [0, 8, 15, 17, 24, 42, 45, 47, 48, 56, 65, 72, 78, 80, 83], "own": [0, 2, 4, 8, 9, 15, 16, 18, 20, 22, 25, 28, 33, 41, 42, 45, 52, 55, 58, 64, 66, 70, 72, 73, 78, 79, 80, 82, 85, 87, 92, 94, 95], "technic": [0, 8, 19, 45, 56, 64, 67, 77, 94], "than": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 28, 30, 32, 33, 35, 36, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 53, 54, 55, 56, 58, 59, 60, 63, 64, 65, 66, 67, 71, 72, 74, 77, 78, 79, 80, 81, 82, 85, 86, 87, 88, 90, 91, 92, 95], "classic": [0, 16, 73], "tradit": [0, 67, 69], "understood": [0, 7, 10, 18, 21, 30, 34, 40, 45, 66, 79], "requir": [0, 1, 4, 5, 6, 7, 8, 9, 12, 13, 14, 15, 18, 19, 20, 21, 22, 23, 24, 27, 32, 33, 36, 40, 41, 42, 44, 45, 46, 47, 48, 49, 55, 56, 58, 62, 63, 64, 65, 66, 67, 70, 72, 75, 76, 77, 78, 79, 80, 82, 85, 92, 94, 95], "return": [0, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 18, 19, 20, 23, 25, 26, 28, 30, 32, 33, 37, 39, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 53, 55, 56, 57, 58, 59, 63, 64, 65, 66, 67, 72, 74, 77, 78, 79, 80, 85, 86, 88, 89, 91, 92, 95], "consid": [0, 1, 4, 5, 7, 8, 13, 14, 15, 17, 18, 19, 22, 24, 27, 28, 30, 32, 35, 41, 44, 45, 46, 47, 48, 49, 53, 55, 56, 59, 63, 64, 65, 66, 67, 77, 78, 81, 83, 85], "disj": 0, "v": [0, 1, 7, 8, 15, 19, 22, 25, 26, 27, 30, 32, 34, 35, 41, 42, 44, 46, 49, 51, 62, 63, 67, 69, 77, 78, 79, 80, 88, 91, 92, 94, 95], "where": [0, 1, 3, 4, 6, 7, 8, 13, 15, 16, 17, 18, 19, 22, 24, 27, 28, 30, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 55, 62, 63, 64, 65, 66, 67, 69, 77, 78, 79, 80, 84, 85, 88, 89, 90, 92, 94, 95], "i": [0, 1, 5, 6, 8, 9, 10, 13, 14, 15, 16, 17, 19, 20, 22, 25, 27, 28, 30, 31, 32, 34, 35, 40, 41, 42, 44, 45, 46, 48, 49, 58, 59, 62, 63, 64, 66, 67, 69, 72, 73, 74, 78, 79, 82, 84, 85, 88, 89, 90, 92, 93, 95], "tag": [0, 3, 5, 25, 36, 67], "ii": [0, 28, 30, 41, 47, 85, 95], "carri": [0, 22, 27, 28, 36, 37, 41, 47, 66, 67, 82], "within": [0, 1, 6, 13, 18, 30, 39, 41, 42, 47, 65, 85, 88], "sub": [0, 8, 25, 41, 44, 55, 67, 85], "subvalu": 0, "therefor": [0, 1, 4, 7, 8, 13, 18, 19, 21, 22, 26, 40, 42, 46, 47, 48, 49, 57, 62, 64, 65, 67, 77, 79, 80, 81, 82, 83, 85, 87, 94], "union": [0, 18, 25, 30, 35, 44, 46, 67, 80], "guarante": [0, 1, 4, 5, 13, 16, 19, 21, 24, 25, 27, 30, 32, 40, 42, 46, 47, 48, 65, 67, 69, 74, 79, 80, 85, 90, 92], "simplest": [0, 14, 24, 33, 39, 42, 67, 80], "unit": [0, 1, 4, 7, 9, 17, 20, 21, 27, 28, 29, 40, 41, 42, 46, 47, 49, 53, 56, 64, 77, 78, 79, 80, 84, 86, 87, 88, 89, 91, 92, 94], "best": [0, 4, 7, 8, 10, 12, 34, 42, 44, 46, 47, 48, 51, 59, 62, 66, 83, 85, 95], "introduc": [0, 7, 13, 14, 18, 24, 30, 33, 37, 39, 41, 46, 47, 63, 64, 67, 69, 71, 73, 78, 79, 92], "earlier": [0, 4, 10, 12, 14, 22, 40, 47, 64, 69, 76, 77, 78, 79, 80, 81, 85, 95], "includ": [0, 1, 3, 7, 8, 9, 10, 13, 15, 18, 20, 21, 23, 24, 25, 28, 29, 30, 32, 35, 36, 40, 42, 44, 47, 48, 56, 58, 64, 65, 66, 67, 69, 70, 73, 77, 78, 80, 83, 85, 86, 92, 94, 95], "zero": [0, 1, 8, 13, 15, 16, 19, 22, 28, 31, 40, 41, 45, 46, 67, 78, 80, 84], "void": [0, 8, 10, 79, 92], "ll": [0, 1, 2, 3, 4, 5, 7, 8, 9, 12, 13, 14, 15, 17, 19, 20, 22, 25, 26, 27, 29, 30, 31, 33, 36, 37, 39, 40, 42, 43, 44, 46, 47, 49, 51, 55, 56, 57, 58, 59, 61, 62, 64, 65, 66, 67, 69, 71, 72, 74, 77, 79, 80, 85, 90, 92, 94, 95], "stick": [0, 7, 17, 79, 92], "subtleti": 0, "should": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13, 14, 15, 16, 18, 19, 20, 21, 22, 27, 28, 30, 33, 40, 41, 42, 45, 46, 47, 51, 53, 58, 62, 63, 64, 65, 66, 67, 69, 73, 76, 77, 78, 80, 81, 82, 85, 89, 92, 94, 95], "address": [0, 18, 42, 47, 48, 50, 55, 64, 92, 93], "nonetheless": [0, 7, 19, 47, 49, 62, 64, 67, 91, 95], "here": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 13, 14, 15, 16, 18, 19, 20, 22, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 37, 38, 39, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 54, 55, 56, 58, 60, 63, 64, 65, 66, 67, 69, 72, 76, 77, 78, 79, 80, 81, 84, 85, 89, 91, 92, 94, 95], "rec": [0, 4, 5, 8, 15, 19, 20, 22, 25, 26, 28, 30, 31, 32, 33, 37, 41, 44, 46, 48, 49, 51, 53, 54, 55, 58, 59, 63, 67, 69, 77, 78, 80, 81, 85, 91], "loop": [0, 7, 8, 12, 15, 16, 19, 27, 41, 45, 47, 49, 50, 59, 63, 65, 72, 78, 89, 93], "enter": [0, 3, 6, 7, 8, 12, 20, 40, 41, 47, 64, 65, 70, 79, 85, 87, 94, 95], "code": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 13, 15, 16, 17, 18, 20, 21, 23, 24, 25, 27, 28, 30, 31, 32, 33, 35, 37, 38, 41, 42, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 71, 72, 74, 76, 77, 78, 79, 80, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 94, 96], "utop": [0, 6, 7, 12, 20, 47, 62, 63, 64, 66, 67, 76, 78, 85, 87, 89, 95], "respons": [0, 5, 8, 12, 20, 33, 42, 47, 65, 74, 77, 78, 79, 80, 82, 85, 92, 93, 94], "e": [0, 1, 6, 7, 8, 10, 13, 14, 15, 16, 17, 19, 20, 22, 25, 27, 28, 30, 32, 33, 34, 35, 39, 41, 42, 44, 45, 46, 47, 48, 49, 56, 58, 62, 63, 64, 65, 66, 67, 69, 73, 74, 76, 77, 78, 79, 80, 82, 85, 87, 88, 92, 95], "successfulli": [0, 7, 16, 25, 35, 49, 58, 64, 82, 87, 95], "failwith": [0, 4, 18, 27, 31, 33, 41, 44, 47, 48, 49, 67, 69], "except": [0, 4, 5, 7, 8, 10, 13, 14, 16, 18, 19, 21, 22, 23, 25, 28, 29, 30, 32, 34, 36, 41, 44, 45, 46, 47, 49, 58, 62, 63, 64, 67, 69, 76, 77, 78, 80, 84, 85, 91, 92, 94], "failur": [0, 4, 7, 14, 15, 17, 20, 23, 24, 27, 28, 30, 47, 49, 69], "rais": [0, 4, 5, 6, 7, 13, 14, 18, 19, 23, 27, 28, 30, 32, 33, 34, 41, 45, 46, 47, 49, 56, 62, 63, 64, 67, 69, 76, 77, 78, 79, 80, 85, 88, 91, 92], "stdlib": [0, 7, 18, 20, 28, 33, 42, 45, 47, 49, 53, 69, 78, 79, 80, 81, 84, 85, 91, 92], "file": [0, 2, 7, 8, 9, 10, 12, 13, 20, 21, 25, 27, 30, 33, 39, 41, 45, 47, 49, 55, 66, 76, 77, 78, 79, 80, 81, 85, 87, 91, 92, 95], "line": [0, 1, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 16, 17, 22, 24, 25, 27, 28, 30, 33, 41, 44, 45, 47, 49, 51, 53, 55, 63, 64, 66, 67, 73, 77, 78, 79, 80, 81, 85, 87, 91, 92, 95], "29": [0, 28, 30, 49], "charact": [0, 5, 7, 8, 10, 12, 25, 27, 30, 33, 34, 39, 41, 42, 45, 47, 49, 51, 55, 65, 66, 67, 77, 78, 79, 80, 81, 85, 87, 91, 92], "17": [0, 8, 25, 30, 41, 42, 49, 63, 77, 80, 85, 92], "33": [0, 7, 27, 30, 42, 47, 49, 79, 80, 85, 92], "unknown": [0, 7, 8, 24, 30, 49, 64, 92], "locat": [0, 4, 7, 41, 42, 47, 49, 64, 81, 92], "stdlib__fun": [0, 7, 27, 47, 49, 80, 92], "protect": [0, 7, 21, 27, 47, 49, 77, 80, 83, 86, 92], "8": [0, 1, 6, 7, 8, 11, 25, 27, 30, 36, 40, 41, 42, 46, 47, 49, 50, 53, 56, 57, 58, 60, 63, 77, 80, 81, 86, 87, 91, 92, 93], "15": [0, 7, 8, 25, 27, 30, 41, 47, 49, 77, 80, 85, 92], "38": [0, 7, 8, 24, 27, 30, 47, 49, 80, 85, 92], "6": [0, 1, 7, 8, 14, 16, 22, 23, 27, 30, 35, 36, 37, 39, 40, 41, 42, 45, 47, 48, 49, 55, 56, 59, 60, 63, 67, 70, 77, 78, 79, 80, 81, 85, 92], "52": [0, 7, 27, 28, 30, 47, 49, 80, 92], "topev": [0, 7, 27, 47, 49, 80, 92], "load_lambda": [0, 7, 27, 47, 49, 80, 92], "toplevel": [0, 3, 6, 7, 8, 9, 18, 27, 33, 34, 47, 49, 53, 64, 77, 80, 84, 85, 91, 92, 95], "byte": [0, 1, 3, 7, 27, 42, 47, 49, 80, 92], "89": [0, 7, 27, 30, 47, 49, 80, 92], "4": [0, 1, 3, 6, 7, 8, 12, 13, 14, 19, 22, 23, 26, 27, 28, 30, 33, 36, 37, 39, 40, 41, 42, 44, 45, 47, 48, 49, 50, 54, 58, 59, 63, 64, 77, 79, 80, 81, 85, 86, 89, 92, 96], "150": [0, 7, 24, 27, 30, 47, 49, 80, 92], "again": [0, 1, 4, 5, 7, 8, 12, 13, 14, 20, 22, 24, 27, 28, 30, 35, 39, 40, 41, 42, 44, 45, 46, 47, 49, 54, 55, 58, 61, 63, 64, 66, 67, 71, 77, 78, 80, 92, 94, 95], "total": [0, 16, 19, 23, 40, 41, 44, 45, 48, 49, 53, 58, 79, 80], "rule": [0, 7, 8, 9, 16, 19, 21, 27, 30, 34, 35, 62, 63, 64, 65, 66, 67, 69, 81, 85, 92], "elimin": [0, 4, 14, 27, 32, 46, 48, 51, 56, 64, 65, 67, 69, 70, 78, 80], "did": [0, 5, 7, 8, 12, 13, 17, 18, 21, 24, 26, 27, 30, 33, 40, 42, 45, 46, 47, 49, 50, 51, 52, 53, 54, 63, 64, 66, 67, 76, 77, 78, 80, 81, 85, 87, 91, 92, 95], "start": [0, 1, 3, 4, 5, 7, 8, 10, 12, 13, 16, 18, 19, 20, 22, 24, 25, 28, 30, 33, 40, 41, 44, 45, 46, 47, 48, 49, 55, 61, 64, 66, 67, 69, 78, 81, 85, 87, 88, 89, 92, 94, 95, 96], "discuss": [0, 4, 13, 16, 18, 19, 20, 22, 30, 33, 39, 42, 43, 45, 47, 48, 49, 53, 58, 60, 66, 70, 78, 80, 83, 85], "method": [0, 4, 7, 8, 10, 19, 23, 24, 33, 40, 50, 58, 60, 74, 77, 79, 81, 82, 85, 86, 92], "continu": [0, 2, 4, 5, 10, 16, 21, 27, 33, 35, 40, 41, 44, 45, 46, 47, 48, 49, 63, 64, 67, 69, 70, 95], "trickiest": [0, 47], "syntact": [0, 7, 8, 9, 19, 27, 30, 34, 35, 36, 51, 53, 55, 63, 64, 66, 67, 69, 80, 81, 84, 85], "sugar": [0, 8, 27, 30, 35, 36, 51, 55, 63, 64, 67, 80, 81, 84], "particular": [0, 1, 4, 8, 9, 13, 20, 24, 25, 29, 30, 33, 45, 48, 49, 64, 69, 75, 76, 78, 80, 85, 87, 91, 92, 95], "lead": [0, 7, 8, 13, 14, 16, 20, 22, 25, 31, 32, 41, 42, 46, 47, 52, 58, 64, 67, 76, 81, 85, 92, 94, 95], "contradict": 0, "standard": [0, 1, 4, 5, 7, 9, 18, 20, 26, 27, 28, 29, 30, 33, 34, 37, 41, 47, 48, 49, 50, 54, 55, 58, 60, 62, 66, 69, 70, 73, 75, 76, 77, 78, 79, 80, 85, 92, 94], "understand": [0, 1, 7, 8, 9, 11, 13, 16, 17, 20, 24, 30, 33, 40, 42, 45, 46, 47, 55, 58, 61, 62, 65, 67, 72, 74, 76, 81, 82, 84, 85, 86, 94], "whose": [0, 3, 8, 13, 15, 18, 20, 21, 25, 27, 28, 30, 33, 34, 35, 41, 42, 44, 45, 46, 47, 49, 53, 54, 62, 67, 73, 77, 78, 79, 80, 85, 88, 91, 92, 95], "ongo": [0, 21, 64], "assumpt": [0, 7, 8, 15, 19, 21, 34, 40], "input": [0, 1, 5, 6, 8, 10, 12, 13, 15, 16, 18, 19, 20, 21, 23, 24, 27, 28, 30, 33, 41, 42, 44, 45, 47, 48, 49, 50, 53, 56, 57, 58, 64, 65, 66, 74, 77, 78, 79, 80, 85, 86, 89, 92], "enabl": [0, 12, 13, 18, 20, 21, 35, 41, 45, 47, 56, 57, 66, 74, 80, 81, 83, 86, 90, 92, 95], "level": [0, 3, 15, 16, 22, 45, 46, 47, 48, 61, 64, 65, 66, 70, 87, 92, 94, 95], "deeper": [0, 40, 47, 94], "everi": [0, 1, 3, 7, 8, 13, 14, 18, 21, 25, 27, 30, 32, 33, 40, 41, 42, 44, 45, 48, 49, 53, 55, 56, 59, 62, 63, 64, 66, 76, 78, 79, 81, 82, 85, 86, 87, 89, 92], "sinc": [0, 7, 8, 9, 14, 18, 19, 20, 27, 30, 40, 41, 42, 44, 45, 46, 47, 48, 49, 53, 57, 58, 62, 64, 66, 67, 69, 77, 79, 80, 84, 85, 92, 94], "checker": [0, 25, 64, 67, 68], "verifi": [0, 4, 14, 19, 24, 74], "detail": [0, 5, 8, 19, 21, 27, 30, 41, 45, 47, 61, 65, 66, 67, 76, 77, 80, 82, 83, 85, 87, 92, 95], "compel": [0, 25], "restrict": [0, 8, 9, 16, 19, 21, 30, 35, 42, 51, 64, 68, 80, 85, 92], "attent": [0, 4, 21, 42, 55, 67, 95], "equival": [0, 5, 7, 8, 10, 14, 19, 27, 32, 35, 40, 42, 47, 48, 51, 53, 58, 59, 67, 79, 80, 85, 86, 91, 92], "gave": [0, 1, 14, 45, 67, 81, 92], "variabl": [0, 1, 4, 7, 8, 10, 14, 15, 16, 30, 34, 35, 39, 47, 52, 56, 57, 62, 63, 64, 65, 66, 67, 68, 69, 72, 79, 80, 85], "whatev": [0, 1, 3, 4, 7, 8, 12, 13, 14, 25, 27, 28, 41, 47, 53, 66, 67, 69, 77, 79, 80, 85, 95], "environ": [0, 9, 57, 63, 64, 67, 68, 69, 70, 94], "env": [0, 62, 63, 64, 69, 95], "anonym": [0, 1, 11, 25, 27, 34, 45, 49, 62, 63, 64, 67, 76, 77, 80, 92], "static": [0, 7, 8, 9, 11, 25, 30, 34, 35, 39, 49, 64, 68, 69, 70, 74, 75, 83, 84, 86, 88, 91, 92], "extend": [0, 9, 25, 35, 39, 41, 62, 63, 64, 65, 69, 77, 81, 85, 86], "bind": [0, 1, 7, 8, 10, 11, 12, 25, 26, 27, 30, 34, 35, 36, 39, 40, 41, 42, 45, 46, 47, 48, 50, 58, 62, 64, 65, 66, 67, 69, 78, 79, 80, 85, 92], "e1": [0, 7, 8, 10, 19, 22, 27, 30, 34, 35, 47, 62, 63, 64, 66, 67, 69, 88, 91, 92], "e2": [0, 7, 8, 10, 19, 22, 27, 30, 34, 35, 47, 62, 63, 64, 66, 67, 69, 88, 91, 92], "applic": [0, 1, 5, 7, 11, 13, 18, 30, 34, 41, 47, 49, 51, 55, 58, 59, 62, 63, 64, 67, 68, 78, 80, 82, 92, 95], "t1": [0, 7, 8, 25, 34, 35, 39, 41, 49, 52, 64, 69, 91], "t2": [0, 7, 8, 34, 35, 39, 41, 44, 49, 52, 64, 69, 91], "tree": [0, 3, 14, 15, 28, 36, 41, 42, 43, 44, 49, 56, 63, 65, 67, 68, 70, 78, 79, 80], "draw": [0, 41, 48], "recurs": [0, 1, 4, 6, 11, 13, 14, 15, 28, 31, 36, 37, 41, 44, 46, 48, 49, 50, 51, 53, 59, 63, 67, 69, 77, 80, 84, 85, 88, 91], "rewrit": [0, 8, 10, 14, 19, 21, 25, 27, 28, 30, 44, 45, 47, 48, 51, 53, 55, 58, 62, 63, 65, 66, 67, 79, 81, 94], "leav": [0, 3, 8, 13, 14, 16, 17, 19, 30, 41, 42, 48, 64, 67, 77, 79, 84, 94], "At": [0, 7, 8, 9, 13, 33, 39, 40, 46, 54, 55, 62, 64, 66, 67, 68, 70, 72, 77, 92, 94, 95], "p1": [0, 13, 27, 30, 34, 35, 38, 63, 80], "p2": [0, 13, 27, 30, 38, 63], "whenev": [0, 7, 25, 30, 39, 40, 41, 42, 44, 45, 47, 62, 67, 79, 80], "usual": [0, 1, 3, 7, 8, 9, 12, 13, 14, 16, 19, 20, 21, 24, 27, 30, 32, 33, 35, 37, 40, 41, 42, 45, 47, 49, 55, 63, 64, 65, 67, 69, 77, 79, 80, 82, 83, 84, 85, 92, 94, 95], "premiss": 0, "abov": [0, 3, 5, 6, 7, 8, 10, 12, 13, 14, 15, 18, 19, 20, 22, 25, 27, 28, 30, 32, 33, 35, 37, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 52, 53, 55, 56, 58, 62, 63, 64, 66, 67, 76, 77, 78, 79, 80, 81, 83, 84, 85, 91, 92, 94, 95], "conclus": [0, 19], "deriv": [0, 1, 30, 51, 62, 63, 66, 76, 78, 80, 89], "swap": [0, 14, 22, 46, 55, 63], "compon": [0, 8, 9, 25, 27, 30, 34, 35, 53, 62, 63, 67, 77, 78, 80, 82, 85, 87, 89], "eras": 0, "And": [0, 1, 2, 6, 7, 8, 13, 14, 17, 19, 22, 25, 27, 30, 32, 33, 35, 36, 39, 40, 41, 44, 45, 46, 47, 48, 49, 51, 54, 55, 56, 58, 62, 64, 67, 71, 74, 77, 78, 80, 81, 84, 85, 89, 91, 92, 93], "see": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 18, 19, 20, 22, 24, 25, 27, 28, 30, 33, 35, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 55, 57, 58, 63, 64, 65, 66, 67, 69, 74, 76, 77, 78, 79, 80, 81, 85, 86, 88, 89, 92, 94, 95], "case": [0, 1, 4, 6, 7, 8, 13, 14, 16, 17, 18, 19, 21, 22, 23, 24, 27, 30, 32, 33, 34, 36, 40, 41, 42, 44, 45, 46, 47, 48, 50, 55, 56, 58, 59, 63, 64, 66, 67, 69, 76, 77, 78, 79, 80, 85, 92], "itself": [0, 5, 7, 8, 9, 12, 13, 20, 22, 24, 25, 27, 30, 32, 40, 41, 42, 45, 46, 47, 49, 51, 59, 62, 63, 65, 66, 77, 79, 80, 83, 85, 91, 92], "second": [0, 1, 3, 4, 7, 8, 12, 17, 18, 19, 20, 22, 23, 25, 27, 28, 30, 33, 34, 35, 41, 42, 45, 46, 47, 51, 52, 53, 55, 56, 60, 63, 64, 66, 67, 69, 77, 78, 79, 80, 81, 85, 92, 95], "treat": [0, 7, 16, 42, 49, 53, 54, 63, 64, 74, 76, 81, 92], "part": [0, 4, 5, 6, 7, 9, 12, 13, 14, 15, 16, 17, 18, 21, 24, 27, 28, 30, 34, 35, 36, 41, 44, 45, 47, 48, 49, 56, 58, 60, 62, 64, 65, 66, 67, 69, 73, 74, 76, 77, 79, 80, 81, 82, 83, 84, 85, 87, 92, 94, 95], "briefli": [0, 41, 85], "cours": [0, 1, 3, 4, 5, 8, 9, 11, 13, 15, 17, 18, 19, 20, 22, 23, 25, 26, 31, 33, 34, 36, 41, 42, 43, 45, 48, 49, 51, 56, 58, 59, 60, 62, 64, 65, 66, 67, 68, 69, 70, 75, 77, 78, 79, 80, 85, 87, 92, 94, 95, 96], "next": [0, 1, 4, 5, 8, 10, 13, 14, 18, 19, 20, 22, 25, 27, 33, 37, 40, 41, 42, 45, 46, 47, 48, 49, 56, 58, 61, 63, 64, 66, 67, 69, 78, 79, 81, 84, 85, 86, 90, 91, 92, 95], "bound": [0, 1, 4, 5, 7, 8, 12, 15, 22, 30, 41, 42, 44, 46, 48, 50, 58, 62, 64, 65, 66, 67, 69, 78, 79, 80, 85, 88, 89, 92], "per": [0, 13, 15, 19, 24, 28, 37, 40, 41, 80], "howev": [0, 5, 8, 16, 18, 24, 28, 41, 42, 44, 48, 55, 65, 67, 74, 79, 85, 92], "much": [0, 1, 3, 7, 8, 9, 13, 18, 20, 21, 24, 25, 26, 30, 35, 41, 43, 45, 46, 47, 49, 55, 56, 63, 64, 65, 67, 76, 79, 80, 81, 82, 83, 85, 88, 92, 94], "simpler": [0, 1, 8, 47, 63, 67, 77, 79, 81], "detour": [0, 33, 85], "through": [0, 1, 4, 6, 8, 13, 14, 15, 16, 18, 21, 23, 24, 25, 26, 28, 30, 37, 41, 42, 45, 46, 47, 53, 55, 57, 58, 59, 63, 64, 65, 66, 67, 70, 74, 78, 80, 82, 85, 89, 92, 94, 95], "directli": [0, 3, 20, 30, 41, 44, 47, 55, 62, 63, 65, 66, 67, 69, 78, 79, 87, 92, 95], "bigger": [0, 1, 9, 14, 19, 30, 42, 46, 58, 64, 66, 77, 85], "caus": [0, 3, 4, 5, 12, 13, 14, 15, 16, 20, 22, 27, 30, 33, 40, 41, 42, 45, 47, 49, 55, 58, 64, 67, 77, 80, 81, 85, 87, 88, 92], "simplifi": [0, 8, 14, 15, 19, 20, 40, 63, 64, 67, 71, 91], "final": [0, 1, 3, 4, 7, 8, 10, 14, 15, 16, 17, 20, 25, 30, 33, 34, 40, 41, 42, 45, 46, 47, 48, 49, 53, 58, 62, 64, 65, 66, 67, 69, 70, 77, 82, 92, 95], "fundament": [0, 19, 23, 45, 47, 93], "human": [0, 2, 16, 17, 18, 19, 23, 24, 30, 72, 74, 85, 90, 95], "inquiri": 0, "guid": [0, 6, 7, 15, 41, 61, 63, 75, 85, 95], "deduc": [0, 14, 18], "vs": [0, 2, 3, 22, 30, 33, 38, 40, 42, 47, 48, 53, 65, 67, 78, 80, 83, 85, 94], "train": [0, 7, 17], "variou": [0, 13, 20, 70, 88, 95], "disciplin": [0, 17], "import": [0, 1, 2, 4, 8, 9, 13, 14, 16, 17, 18, 19, 21, 23, 24, 29, 30, 33, 36, 40, 42, 43, 44, 47, 60, 64, 66, 67, 76, 80, 81, 82, 85, 86, 87, 94], "higher": [0, 1, 8, 15, 30, 49, 52, 58, 59, 60, 63, 64, 65, 66, 80, 85, 92], "educ": [0, 24, 75], "mayb": [0, 1, 2, 3, 8, 17, 19, 30, 32, 36, 40, 41, 50, 58, 59, 66, 67, 77, 79, 81, 85, 92], "mysteri": [0, 8, 33, 53, 55, 68, 72, 86], "basic": [0, 7, 23, 33, 49, 56, 65, 85], "build": [0, 1, 3, 9, 12, 24, 31, 33, 35, 36, 39, 42, 43, 46, 54, 64, 66, 74, 79, 82, 83, 87, 92, 95], "block": [0, 7, 12, 43, 45, 47, 50, 83, 85], "veri": [0, 1, 3, 8, 9, 10, 11, 15, 16, 20, 22, 24, 25, 26, 33, 36, 37, 40, 41, 42, 45, 47, 48, 51, 52, 60, 62, 63, 64, 66, 67, 75, 77, 78, 79, 80, 81, 82, 86, 93, 95], "present": [0, 12, 18, 20, 24, 27, 30, 42, 70, 80, 81, 95], "intrins": [0, 7, 59], "better": [0, 1, 9, 12, 16, 17, 19, 24, 25, 30, 32, 34, 35, 36, 41, 42, 43, 44, 45, 46, 47, 49, 54, 55, 58, 60, 62, 71, 75, 76, 77, 79, 80, 81, 86, 87, 95], "studi": [0, 1, 4, 7, 8, 9, 14, 17, 22, 24, 26, 29, 30, 33, 34, 35, 45, 47, 48, 55, 59, 65, 66, 68, 73, 75, 77, 79, 80, 83, 86, 92, 94], "solut": [0, 1, 6, 8, 10, 15, 28, 41, 42, 44, 48, 53, 58, 63, 64, 78, 80, 81, 82, 85, 87, 89, 94, 95], "avail": [0, 6, 7, 8, 9, 10, 13, 15, 20, 24, 28, 30, 33, 41, 47, 53, 63, 64, 65, 66, 75, 77, 78, 80, 81, 82, 87, 89, 94], "happi": [0, 1, 6, 15, 25, 28, 41, 53, 63, 78, 89, 94], "add": [0, 2, 3, 4, 5, 6, 8, 10, 12, 13, 14, 15, 16, 18, 20, 25, 26, 27, 28, 30, 31, 33, 35, 39, 41, 42, 44, 45, 46, 47, 48, 52, 53, 55, 58, 59, 62, 63, 64, 66, 67, 69, 77, 78, 79, 80, 81, 85, 86, 87, 89, 94, 95], "correct": [0, 4, 6, 8, 9, 14, 15, 16, 18, 20, 21, 22, 23, 24, 28, 33, 41, 42, 45, 49, 50, 53, 55, 58, 63, 66, 67, 72, 74, 78, 79, 80, 82, 89, 92, 94], "contribut": [0, 6, 15, 28, 41, 53, 63, 78, 89, 94, 96], "github": [0, 6, 15, 28, 33, 41, 47, 53, 63, 77, 78, 80, 89, 94, 95], "its": [0, 1, 3, 4, 6, 7, 8, 9, 10, 13, 14, 15, 16, 18, 19, 20, 21, 22, 24, 25, 27, 28, 30, 33, 36, 37, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 56, 57, 58, 60, 62, 63, 64, 66, 67, 69, 70, 73, 74, 76, 77, 78, 79, 80, 81, 82, 85, 87, 88, 89, 91, 92, 93, 94, 95, 96], "q": [0, 13, 14, 40, 78, 79], "r": [0, 15, 19, 22, 25, 37, 41, 44, 47, 48, 51, 64, 80, 91, 92, 94, 95, 96], "definit": [0, 1, 3, 6, 7, 11, 12, 19, 20, 21, 22, 25, 28, 30, 33, 34, 35, 37, 39, 41, 42, 47, 49, 51, 52, 53, 55, 62, 63, 64, 66, 67, 69, 77, 78, 79, 80, 81, 83, 84, 86, 87, 92], "your": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 15, 16, 17, 18, 20, 24, 25, 28, 30, 33, 35, 36, 40, 41, 42, 45, 47, 52, 53, 58, 63, 64, 65, 66, 72, 76, 77, 78, 85, 87, 89, 93, 94, 95], "also": [0, 1, 3, 4, 5, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 30, 34, 35, 37, 40, 41, 42, 43, 44, 45, 47, 48, 55, 56, 57, 63, 64, 65, 66, 67, 68, 69, 72, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 92, 94, 95], "f": [0, 1, 6, 7, 8, 10, 14, 19, 22, 25, 30, 33, 34, 35, 41, 44, 45, 47, 49, 51, 52, 53, 55, 56, 58, 62, 63, 64, 73, 74, 76, 79, 80, 84, 85, 89, 91, 92], "1": [0, 4, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 20, 22, 23, 25, 27, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 51, 53, 54, 55, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 72, 75, 77, 78, 79, 80, 81, 84, 85, 86, 87, 88, 89, 91, 92, 95], "step": [0, 1, 3, 4, 8, 12, 19, 20, 42, 47, 48, 50, 62, 63, 65, 68, 69, 80, 95], "semant": [0, 7, 8, 9, 11, 19, 23, 30, 32, 34, 35, 36, 39, 49, 62, 63, 65, 67, 68, 69, 70, 84, 86, 88, 91, 96], "implement": [0, 1, 4, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 19, 20, 21, 23, 24, 26, 27, 29, 30, 33, 36, 37, 40, 41, 43, 44, 45, 46, 48, 49, 51, 52, 53, 54, 56, 58, 61, 63, 64, 65, 66, 68, 69, 70, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 89, 90, 91, 92, 93], "suggest": [0, 2, 4, 8, 10, 14, 15, 16, 18, 19, 24, 28, 30, 41, 42, 45, 49, 62, 65, 77, 94, 95], "perhap": [0, 1, 2, 5, 7, 12, 20, 21, 24, 47, 51, 54, 55, 62, 64, 66, 67, 76, 80, 85, 86, 92, 95], "sever": [0, 1, 7, 8, 11, 16, 18, 20, 23, 25, 33, 34, 36, 39, 41, 42, 45, 65, 67, 80, 85, 87], "probabl": [0, 1, 4, 8, 9, 10, 13, 16, 20, 24, 28, 33, 36, 42, 45, 64, 77, 79, 85, 92, 95], "still": [0, 1, 7, 8, 10, 13, 16, 19, 27, 40, 42, 45, 46, 47, 48, 49, 51, 55, 58, 63, 70, 71, 74, 76, 77, 78, 79, 80, 81, 82, 85, 92, 94, 95], "what": [1, 2, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 30, 32, 33, 35, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 51, 53, 55, 56, 57, 58, 62, 63, 64, 65, 66, 67, 69, 71, 72, 76, 77, 78, 79, 80, 81, 82, 84, 85, 89, 91, 92, 95, 96], "mean": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 15, 16, 17, 18, 19, 20, 22, 25, 30, 32, 33, 34, 40, 41, 42, 43, 44, 45, 46, 47, 48, 51, 57, 62, 64, 65, 66, 67, 69, 76, 77, 78, 79, 83, 85, 87, 89, 91, 92, 95], "cornel": [1, 42, 70, 74, 79, 94, 95, 96], "professor": [1, 72], "jon": 1, "kleinberg": 1, "eva": 1, "tardo": 1, "wonder": [1, 77, 81], "explan": [1, 7], "textbook": [1, 3, 56, 70, 75, 94, 95, 96], "2006": [1, 23, 70], "appendix": 1, "summari": 1, "reinterpret": 1, "program": [1, 5, 7, 8, 9, 10, 11, 12, 13, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27, 29, 30, 33, 41, 43, 45, 47, 48, 50, 52, 54, 55, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 77, 79, 80, 83, 85, 86, 92, 93, 94], "perspect": [1, 8, 40, 44, 64, 71, 72, 74, 75, 79, 85, 95], "The": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 46, 48, 49, 51, 53, 55, 57, 58, 59, 60, 61, 62, 63, 64, 65, 68, 69, 70, 72, 75, 76, 77, 78, 79, 81, 82, 84, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 96], "ultim": [1, 13, 32, 83], "answer": [1, 6, 7, 8, 17, 18, 19, 22, 27, 28, 39, 42, 44, 46, 47, 55, 62, 63, 67, 78, 81, 85, 89, 92], "worst": [1, 40, 41, 42, 46, 48, 50, 55, 79], "run": [1, 2, 4, 7, 8, 9, 12, 13, 15, 18, 19, 20, 25, 27, 28, 30, 33, 40, 41, 42, 44, 45, 47, 48, 49, 55, 63, 64, 65, 66, 67, 69, 73, 74, 78, 79, 80, 85, 87, 91, 92, 94, 95], "size": [1, 7, 8, 13, 15, 18, 30, 36, 37, 40, 41, 42, 46, 50, 51, 53, 77, 79], "o": [1, 3, 8, 9, 14, 32, 40, 41, 42, 44, 46, 48, 49, 58, 79, 81, 85, 87, 89, 90, 93], "d": [1, 2, 6, 8, 10, 12, 13, 18, 19, 26, 27, 28, 30, 32, 33, 39, 40, 41, 45, 48, 49, 51, 55, 64, 66, 67, 70, 76, 77, 78, 79, 80, 84, 85, 92, 94, 95, 96], "constant": [1, 8, 18, 25, 26, 28, 34, 36, 40, 41, 42, 43, 46, 48, 54, 58, 59, 62, 63, 64, 65, 67, 69, 76, 77, 78, 79, 85, 88], "up": [1, 3, 4, 6, 7, 8, 9, 13, 14, 15, 19, 20, 22, 24, 25, 27, 33, 36, 40, 41, 42, 44, 45, 46, 47, 48, 49, 56, 58, 59, 62, 64, 67, 69, 72, 76, 77, 80, 85, 90, 92, 95], "naiv": [1, 44, 55, 64], "proce": [1, 4, 14, 15, 17, 19, 27, 36, 47, 55, 64, 67, 82, 95], "amount": [1, 4, 6, 17, 30, 40, 42, 45, 48, 53, 78], "instanc": [1, 18, 22, 70, 83, 92], "ineffici": [1, 14, 15, 19, 49, 59], "quickli": [1, 6, 10, 18, 41, 49, 58, 74, 94], "test": [1, 4, 6, 7, 8, 9, 12, 15, 16, 17, 19, 23, 27, 28, 29, 36, 41, 53, 54, 63, 66, 67, 72, 87, 92, 95], "fast": [1, 4, 6, 42, 46, 48, 65, 71], "processor": [1, 7, 24, 47, 65, 74], "optim": [1, 8, 11, 15, 18, 30, 42, 59, 65, 68], "slowli": [1, 4, 8, 42], "sloppili": 1, "harder": [1, 4, 30, 45, 49, 51, 64, 69, 77, 79, 84, 93], "doesn": [1, 4, 7, 8, 10, 13, 14, 15, 16, 19, 20, 24, 26, 27, 30, 31, 33, 34, 35, 38, 40, 42, 44, 45, 47, 48, 49, 55, 58, 62, 63, 64, 65, 67, 72, 76, 77, 80, 81, 85, 92, 95], "impli": [1, 18, 19, 22, 35, 42, 69, 79, 92], "larg": [1, 3, 8, 12, 13, 18, 21, 24, 28, 41, 42, 43, 45, 46, 48, 62, 73, 74, 77, 82, 83, 85], "client": [1, 4, 5, 15, 16, 18, 21, 23, 41, 42, 44, 47, 76, 77, 79, 80, 81, 82, 83, 86, 92], "afford": [1, 4, 13, 40, 71], "patient": 1, "quick": [1, 24, 42, 81, 95], "me": [1, 45], "slow": [1, 16, 18, 20, 21, 49, 65], "lesson": [1, 46, 58], "measur": [1, 40, 44], "clock": [1, 45], "metric": 1, "hardwar": [1, 41, 42, 47, 67, 92], "softwar": [1, 4, 13, 21, 23, 24, 42, 74, 80, 81, 82, 83, 95, 96], "good": [1, 5, 8, 10, 12, 13, 16, 17, 18, 20, 21, 23, 24, 30, 31, 32, 33, 34, 35, 40, 41, 42, 44, 45, 46, 47, 48, 54, 58, 63, 66, 67, 71, 72, 73, 74, 79, 80, 82, 84, 85, 90, 92, 95], "count": [1, 8, 18, 20, 41, 48, 95], "number": [1, 6, 7, 8, 13, 15, 16, 22, 23, 26, 28, 30, 35, 36, 37, 40, 41, 42, 44, 46, 47, 48, 49, 53, 54, 56, 59, 64, 65, 70, 74, 77, 78, 79, 80, 84], "taken": [1, 50, 70], "dure": [1, 7, 8, 14, 16, 18, 19, 48, 49, 63, 64, 65, 72, 76, 81, 94], "evalu": [1, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 19, 22, 24, 27, 28, 30, 34, 36, 41, 43, 44, 45, 47, 49, 50, 53, 55, 58, 61, 63, 64, 65, 68, 69, 80, 81, 85, 87, 88, 91, 92], "It": [1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 13, 14, 16, 17, 18, 19, 20, 22, 24, 25, 26, 27, 28, 30, 33, 35, 40, 41, 42, 44, 45, 47, 48, 49, 54, 55, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 89, 90, 91, 92, 94, 95], "ought": [1, 45, 58, 67, 92], "somehow": [1, 18, 20, 51, 55, 95], "repres": [1, 7, 9, 13, 14, 15, 18, 20, 22, 23, 25, 28, 32, 34, 35, 36, 37, 38, 39, 42, 44, 45, 46, 47, 49, 51, 53, 56, 62, 65, 66, 67, 69, 77, 78, 79, 80, 84, 89, 91, 92], "primit": [1, 8, 10, 30, 34, 62, 66, 67, 68, 69, 80], "comput": [1, 3, 4, 6, 7, 8, 9, 11, 13, 15, 16, 17, 19, 20, 22, 23, 24, 28, 30, 33, 35, 37, 39, 41, 42, 43, 44, 45, 47, 49, 50, 53, 55, 56, 57, 58, 59, 60, 62, 64, 65, 66, 67, 68, 70, 72, 73, 74, 78, 79, 86, 89, 92, 94, 95], "lot": [1, 4, 5, 6, 7, 8, 14, 24, 31, 33, 36, 42, 45, 56, 58, 59, 66, 74, 87], "flexibl": [1, 12, 82, 85], "choic": [1, 3, 4, 8, 14, 18, 21, 30, 40, 42, 44, 45, 47, 48, 54, 55, 62, 63, 67, 74, 79, 94, 95], "pseudocod": [1, 89], "being": [1, 4, 6, 7, 8, 11, 12, 13, 14, 15, 16, 18, 19, 20, 25, 28, 30, 32, 33, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 53, 56, 58, 59, 62, 63, 64, 65, 66, 67, 74, 76, 77, 78, 79, 80, 85, 86, 92, 94], "singl": [1, 4, 7, 8, 15, 18, 25, 28, 30, 35, 40, 41, 42, 44, 45, 47, 48, 55, 56, 61, 63, 64, 66, 74, 76, 77, 78, 79, 80, 81, 85, 91], "imper": [1, 7, 9, 10, 13, 19, 20, 23, 25, 30, 42, 43, 44, 45, 46, 47, 48, 59, 67, 71, 74, 75, 79, 92, 94], "assign": [1, 5, 7, 47, 64, 72, 85, 88, 89, 92, 93], "arrai": [1, 40, 41, 43, 44, 50, 64, 65, 89, 92, 93], "index": [1, 5, 7, 13, 16, 33, 42, 44, 46, 88, 93], "pointer": [1, 4, 7, 8, 32, 46, 49, 57, 74, 91, 93], "derefer": [1, 92, 93], "arithmet": [1, 6, 7, 8, 15, 45, 67, 78, 84, 92], "oper": [1, 2, 4, 6, 9, 10, 11, 13, 14, 15, 16, 18, 19, 20, 21, 22, 24, 25, 28, 30, 33, 35, 37, 40, 41, 42, 45, 46, 47, 48, 51, 53, 55, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 74, 76, 77, 78, 79, 80, 81, 84, 85, 88, 89, 91, 92, 95], "choos": [1, 2, 4, 7, 9, 12, 15, 20, 28, 33, 42, 47, 48, 53, 55, 56, 64, 80, 81, 83, 95], "branch": [1, 7, 8, 13, 19, 28, 30, 32, 36, 46, 48, 51, 55, 62, 63, 64, 65, 67, 69], "match": [1, 13, 14, 15, 18, 21, 22, 24, 25, 28, 29, 31, 32, 33, 35, 36, 37, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 55, 58, 62, 63, 64, 65, 66, 67, 69, 71, 74, 77, 78, 79, 80, 81, 84, 85, 86, 91, 92, 95], "realiti": [1, 8, 20, 47, 64, 74], "all": [1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24, 27, 28, 30, 32, 33, 34, 35, 36, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 55, 56, 57, 58, 59, 61, 62, 63, 64, 65, 66, 67, 69, 72, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 92, 94, 95], "realli": [1, 4, 5, 7, 8, 9, 13, 14, 16, 17, 22, 24, 25, 27, 30, 31, 35, 36, 40, 41, 45, 47, 49, 55, 56, 57, 58, 62, 64, 66, 67, 77, 80, 84, 85, 86, 87, 92, 95], "practic": [1, 16, 23, 24, 32, 42, 45, 56, 60, 64, 65, 67, 69, 72, 73, 74, 80, 82, 85, 95], "predict": [1, 13, 20, 41, 71, 89], "g": [1, 6, 7, 8, 13, 14, 16, 19, 20, 25, 27, 30, 33, 35, 39, 41, 44, 45, 46, 47, 49, 53, 56, 62, 63, 64, 65, 66, 67, 74, 76, 77, 85, 87, 92, 95], "matrix": [1, 38, 53, 89], "text": [1, 10, 47, 87, 94, 95], "document": [1, 2, 3, 4, 7, 8, 10, 11, 13, 15, 17, 19, 20, 21, 23, 24, 26, 30, 33, 38, 49, 55, 66, 68, 77, 78, 89, 92, 94], "bit": [1, 2, 7, 8, 11, 18, 30, 33, 42, 45, 47, 84, 86], "row": [1, 53], "column": [1, 53, 95], "represent": [1, 7, 8, 12, 13, 14, 15, 22, 23, 41, 46, 47, 48, 49, 51, 53, 65, 67, 68, 76, 77, 78, 79, 86, 89], "context": [1, 11, 33, 63, 66, 68, 69, 72, 85, 92], "structur": [1, 6, 7, 8, 14, 15, 18, 20, 26, 28, 30, 35, 36, 37, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 55, 56, 57, 58, 59, 60, 62, 63, 65, 66, 70, 74, 77, 78, 80, 81, 82, 83, 84, 85, 86, 90, 92, 93, 96], "element": [1, 5, 8, 13, 14, 15, 18, 19, 20, 22, 25, 28, 30, 32, 35, 37, 40, 41, 42, 46, 48, 49, 53, 54, 55, 56, 58, 59, 60, 64, 65, 76, 77, 78, 79, 80, 81, 85, 88, 91, 92], "maintain": [1, 18, 23, 45, 66, 67, 72, 74, 76, 83, 86, 95], "node": [1, 15, 22, 25, 28, 36, 37, 41, 42, 44, 46, 48, 49, 51, 63, 65, 66, 67, 78, 79, 80, 91, 92], "edg": [1, 13, 48, 49], "graph": [1, 70], "multipli": [1, 6, 8, 19, 53], "faster": [1, 19, 49, 77, 95], "arbitrari": [1, 7, 15, 16, 19, 20, 28, 30, 31, 78, 86], "exact": [1, 6, 30, 33, 41, 80, 95], "too": [1, 4, 7, 8, 12, 13, 16, 18, 20, 21, 22, 24, 30, 33, 40, 42, 45, 46, 48, 49, 55, 62, 64, 66, 67, 76, 79, 80, 81, 82, 83, 84, 85, 92, 95], "rel": [1, 4, 8, 13, 14, 16, 19, 23, 24, 40, 41, 48, 56, 73, 94], "term": [1, 4, 5, 7, 8, 9, 18, 19, 25, 30, 35, 40, 41, 45, 49, 52, 53, 55, 56, 63, 67, 74, 78, 83, 85, 92], "object": [1, 7, 8, 9, 10, 11, 23, 30, 32, 36, 41, 42, 49, 50, 57, 60, 64, 70, 72, 73, 75, 77, 80, 81, 82, 83, 85, 86, 92, 93, 94], "reli": [1, 3, 16, 23, 24, 27, 29, 30, 42, 47, 63, 67, 68, 95], "subject": 1, "notion": [1, 8, 19, 41, 45, 67, 79, 85, 86], "constitut": [1, 9, 30, 67, 82], "sort": [1, 13, 15, 20, 28, 41, 79, 80, 84, 85], "okai": [1, 10, 40, 41, 42, 92], "beat": 1, "brute": [1, 50], "forc": [1, 4, 8, 10, 16, 17, 21, 25, 27, 30, 32, 41, 42, 45, 46, 47, 49, 50, 64, 67, 81], "search": [1, 14, 15, 28, 37, 41, 42, 77, 78, 80, 94, 95], "enumer": [1, 25], "permut": 1, "version": [1, 2, 3, 5, 8, 12, 15, 16, 18, 19, 28, 30, 33, 37, 41, 44, 45, 47, 48, 52, 53, 54, 55, 56, 58, 59, 62, 63, 70, 71, 79, 81, 85, 92, 94, 95], "terribl": [1, 8, 20, 42, 92], "certainli": [1, 14, 17, 26, 45, 67], "quicksort": 1, "simpl": [1, 4, 14, 19, 20, 21, 25, 29, 33, 40, 42, 43, 44, 45, 47, 48, 54, 55, 56, 63, 64, 65, 72, 74, 79, 90, 91], "dumb": [1, 8], "nearli": [1, 6, 7, 51, 54, 62, 66], "huge": [1, 36, 42, 44, 92], "space": [1, 8, 9, 13, 18, 19, 28, 30, 33, 36, 42, 46, 49, 53, 58, 59, 66, 77, 79, 95], "exponenti": [1, 6, 15, 19, 41, 44, 48, 50, 64, 78], "less": [1, 4, 5, 8, 13, 15, 16, 18, 19, 21, 24, 29, 30, 37, 41, 42, 43, 44, 46, 48, 55, 58, 60, 64, 78, 79, 88], "polynomi": [1, 15, 50], "immedi": [1, 4, 10, 14, 18, 19, 20, 22, 27, 29, 33, 42, 45, 46, 47, 49, 55, 63, 64, 65, 95], "come": [1, 4, 5, 6, 7, 8, 9, 11, 16, 17, 21, 25, 28, 30, 33, 35, 42, 45, 47, 52, 56, 58, 62, 64, 66, 67, 69, 71, 72, 73, 77, 79, 81, 82, 83, 85, 90, 93, 95], "100": [1, 8, 13, 15, 20, 28, 30, 40, 47, 53, 67, 78], "non": [1, 8, 13, 14, 19, 20, 25, 27, 28, 30, 32, 36, 42, 44, 45, 47, 48, 50, 55, 58, 63, 66, 67, 69, 73, 79, 81, 85, 89, 91, 92], "02": [1, 74], "log": [1, 2, 33, 41, 42, 45, 46, 48, 79, 95], "adequ": [1, 13, 42], "job": [1, 2, 13, 16, 17, 21, 36, 47, 64, 65, 71, 80, 81, 82, 85], "fine": [1, 7, 18, 20, 25, 40, 45, 47, 55, 64, 77, 80, 85], "combin": [1, 15, 22, 26, 36, 41, 42, 45, 51, 53, 56, 74, 80, 86, 92], "maximum": [1, 13, 28, 32, 41, 44], "execut": [1, 3, 8, 9, 13, 16, 20, 24, 33, 41, 47, 50, 64, 65, 67, 72, 74, 88, 92, 94, 95], "isn": [1, 8, 12, 14, 16, 17, 20, 22, 26, 30, 32, 39, 48, 49, 57, 58, 62, 64, 66, 67, 72, 77, 78, 79, 80, 81, 92, 95], "perfect": [1, 41, 48], "insan": 1, "tediou": [1, 10, 16, 17, 30, 63], "author": [1, 5, 17, 45, 48, 96], "develop": [1, 4, 7, 9, 18, 21, 23, 24, 27, 30, 36, 41, 45, 47, 51, 66, 67, 70, 73, 76, 82], "insert": [1, 4, 10, 13, 15, 26, 28, 40, 41, 42, 44, 45, 46, 76, 77, 79, 91, 92], "c_1": [1, 15], "c_2": 1, "c_4": 1, "c_5": 1, "sum_": [1, 40, 41], "j": [1, 30, 46, 59, 60, 72, 89], "t_j": 1, "c_6": 1, "c_7": 1, "c_8": 1, "explain": [1, 5, 7, 8, 11, 15, 16, 17, 18, 22, 24, 28, 41, 53, 62, 63, 74, 76, 78, 79, 85, 92], "complic": [1, 8, 10, 22, 24, 32, 33, 40, 41, 45, 55, 56, 64, 67, 74, 77, 79, 80, 90, 92], "heart": [1, 11, 28, 57], "poor": [1, 5, 18, 42, 64, 81], "grad": 1, "student": [1, 2, 28, 70, 75, 89, 94, 95], "who": [1, 5, 9, 18, 21, 24, 42, 44, 47, 54, 58, 71, 72, 81, 82, 83, 92, 94, 96], "introduct": [1, 11, 36, 50, 60, 70, 75, 86, 93, 94], "3rd": [1, 34], "edit": [1, 3, 12, 23, 47, 78, 80, 94, 95, 96], "2009": [1, 70], "cormen": 1, "leiserson": 1, "rivest": 1, "stein": 1, "tell": [1, 3, 6, 12, 13, 14, 18, 20, 28, 33, 46, 47, 64, 78, 85, 87], "precis": [1, 7, 8, 16, 19, 44, 56, 64, 69, 84, 94], "like": [1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 28, 29, 30, 31, 32, 33, 35, 39, 40, 41, 42, 45, 46, 47, 48, 49, 51, 53, 54, 55, 56, 57, 58, 62, 63, 64, 65, 66, 67, 69, 71, 72, 74, 76, 77, 78, 79, 80, 81, 82, 83, 85, 86, 87, 88, 91, 92, 93, 94, 95], "exhaust": [1, 8, 13, 25, 30, 36, 40, 65, 67], "find": [1, 3, 4, 6, 7, 8, 12, 13, 14, 15, 16, 20, 21, 22, 24, 28, 30, 33, 40, 41, 42, 44, 46, 47, 48, 53, 55, 63, 64, 67, 69, 78, 80, 91, 94, 95], "somewhat": [1, 8, 22, 28, 30, 39, 48, 59, 76, 77], "meaningless": [1, 4], "25": [1, 4, 13, 24, 30, 80, 92], "java": [1, 3, 4, 5, 7, 8, 9, 10, 12, 18, 19, 20, 23, 29, 30, 32, 33, 35, 39, 41, 42, 45, 47, 54, 57, 58, 60, 64, 65, 68, 70, 71, 72, 73, 74, 76, 77, 79, 80, 81, 82, 83, 85, 86, 89, 92, 94], "down": [1, 2, 3, 4, 6, 7, 8, 11, 16, 18, 19, 40, 45, 46, 48, 55, 57, 62, 63, 64, 74, 79, 92, 94], "risc": 1, "250": [1, 30], "ye": [1, 30, 42, 49, 81, 95], "fli": 1, "airplan": 1, "control": [1, 3, 12, 42, 45, 47, 62, 64, 95], "nuclear": 1, "reactor": 1, "care": [1, 3, 8, 10, 11, 17, 18, 19, 24, 25, 33, 34, 38, 41, 45, 47, 55, 59, 66, 67, 77, 95], "real": [1, 9, 11, 16, 18, 22, 25, 36, 40, 50, 55, 60, 63, 64, 65, 68, 74, 75, 78, 82, 86, 90, 93, 94, 95], "otherwis": [1, 2, 6, 7, 8, 13, 16, 17, 20, 26, 27, 28, 30, 34, 41, 42, 46, 47, 63, 64, 66, 67, 77, 79, 85, 88, 92, 95], "broad": 1, "similar": [1, 3, 7, 8, 9, 10, 12, 13, 14, 18, 22, 24, 25, 27, 29, 30, 33, 35, 37, 41, 42, 45, 46, 47, 51, 53, 55, 56, 58, 63, 64, 66, 67, 70, 73, 76, 77, 78, 79, 80, 81, 83, 85, 86, 88, 91, 92, 94], "perform": [1, 7, 8, 9, 18, 20, 21, 26, 30, 39, 40, 41, 42, 43, 44, 46, 47, 48, 50, 53, 58, 65, 74, 79, 95], "62": [1, 7, 30], "ignor": [1, 13, 18, 27, 28, 33, 40, 41, 42, 45, 47, 62, 65, 69, 73, 77, 79, 92, 95], "low": [1, 42, 65, 92], "factor": [1, 33, 40, 41, 42, 44, 45, 48, 50, 54, 55, 56, 58, 59, 60, 66, 67, 69, 72, 79, 81], "highest": [1, 3, 28], "tabl": [1, 6, 35, 41, 43, 44, 48, 50, 65, 68, 79, 93], "microsecond": 1, "estim": [1, 30], "univers": [1, 14, 42, 50, 56, 64, 67, 70, 72, 79, 95, 96], "10": [1, 6, 8, 13, 15, 20, 25, 27, 28, 30, 35, 36, 41, 42, 47, 49, 53, 56, 58, 63, 67, 75, 77, 78, 80, 85, 86], "sec": [1, 41], "1017": 1, "year": [1, 13, 17, 28, 42, 70, 75, 80, 85, 96], "000": [1, 8, 20, 30, 58], "18": [1, 30, 47, 50, 77], "min": [1, 41], "12": [1, 6, 7, 23, 25, 28, 30, 33, 42, 45, 76, 77, 80, 85, 86], "dai": [1, 6, 25, 28, 30, 33, 35, 39, 40, 47, 62, 72, 78, 85], "hour": [1, 4, 24], "32": [1, 8, 20, 30, 42, 77, 85], "104": [1, 30], "seriou": [1, 73], "complet": [1, 5, 7, 8, 13, 16, 20, 22, 24, 28, 38, 41, 45, 47, 58, 62, 63, 64, 66, 67, 69, 76, 85, 92, 95], "domin": [1, 9], "my": [1, 40, 47, 85], "laptop": 1, "2x": 1, "bought": 1, "interest": [1, 8, 9, 10, 13, 19, 20, 27, 33, 45, 46, 47, 48, 56, 67, 85, 92], "properti": [1, 13, 15, 18, 19, 22, 28, 40, 44, 45, 49, 56, 64, 67, 69, 79, 82, 85, 91], "pseduocod": 1, "1620": 1, "assembl": [1, 45, 65, 83], "1000": [1, 20, 28, 63, 67, 78], "1000x": 1, "longer": [1, 30, 33, 42, 46, 48, 55, 64, 65, 67, 72, 76, 77, 90, 92, 95], "tune": 1, "employ": 1, "twice": [1, 19, 20, 40, 42, 47, 48, 49, 53, 56, 58, 77], "argu": [1, 16, 48], "imprecis": 1, "abstract": [1, 14, 15, 16, 19, 21, 23, 24, 33, 41, 42, 44, 45, 47, 55, 58, 60, 64, 65, 66, 67, 68, 69, 70, 72, 74, 76, 78, 80, 81, 82, 83, 84, 86, 92], "noth": [1, 7, 8, 13, 21, 22, 32, 45, 47, 49, 58, 64, 66, 67, 85, 92], "pm": [1, 41], "quantiti": [1, 19], "scienc": [1, 17, 23, 56, 73, 94], "review": [1, 4, 23, 24, 33, 55, 64], "natur": [1, 3, 5, 7, 9, 10, 20, 23, 30, 36, 39, 41, 49, 56, 64, 65, 69, 79, 82, 83], "ess": 1, "equal": [1, 6, 7, 8, 12, 13, 14, 22, 28, 30, 33, 35, 40, 41, 42, 64, 66, 67, 77, 78, 79, 80, 81, 84, 89, 93], "henc": [1, 3, 6, 12, 19, 20, 25, 27, 35, 42, 45, 47, 49, 56, 64, 77, 81, 85, 90, 92, 95], "mid": [1, 70], "0": [1, 4, 5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 20, 22, 25, 28, 30, 31, 33, 35, 37, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 53, 54, 55, 59, 62, 63, 64, 66, 67, 76, 77, 78, 79, 80, 81, 84, 85, 87, 88, 89, 91, 92, 95, 96], "leq": [1, 20, 48, 66, 67, 69], "pose": 1, "question": [1, 14, 16, 27, 46, 54, 62, 67, 85], "honest": [1, 17, 62, 67], "interpret": [1, 9, 12, 17, 22, 57, 61, 62, 63, 64, 66, 68, 69, 70, 92], "yield": [1, 7, 14, 15, 19, 30, 34, 53, 55, 58, 64, 67, 89], "proper": [1, 42, 48], "subset": [1, 13, 28, 67, 85, 90], "subseteq": 1, "tight": 1, "former": [1, 8, 30, 41, 45, 47, 69, 85, 87], "relat": [1, 16, 19, 29, 30, 47, 55, 62, 63, 64, 68, 69, 77, 83, 85, 86], "fewest": 1, "wherea": [1, 4, 6, 7, 8, 22, 24, 30, 35, 37, 49, 51, 55, 56, 67, 74, 76, 79, 80, 81, 85, 87, 92], "loos": [1, 21, 29], "needlessli": [1, 5], "concret": [1, 18, 19, 23, 33, 45, 47, 65, 66, 67, 68], "9": [1, 8, 23, 25, 26, 30, 33, 40, 41, 42, 46, 49, 53, 56, 63, 64, 66, 77, 81, 86], "1989": [1, 70], "graham": 1, "knuth": 1, "patashnik": 1, "easili": [1, 12, 18, 30, 62, 66, 69, 73, 74, 78, 90], "few": [1, 5, 6, 7, 8, 10, 13, 14, 15, 20, 28, 43, 45, 47, 48, 49, 56, 67, 76, 78, 85, 90, 94, 95], "o_1": 1, "type": [1, 3, 4, 5, 6, 8, 9, 10, 11, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 53, 55, 58, 60, 62, 63, 65, 66, 67, 68, 71, 72, 73, 74, 75, 76, 78, 79, 81, 83, 86, 87, 88, 89, 91, 93, 95], "mathbb": [1, 8], "rightarrow": [1, 66], "upgrad": [1, 2, 15, 21, 41, 45, 47, 67, 95], "Of": [1, 3, 13, 17, 20, 22, 33, 34, 42, 43, 45, 48, 49, 56, 58, 59, 60, 67, 70, 79, 80, 85, 87, 92, 95], "foral": [1, 15, 19, 22, 56], "mathrel": 1, "math": [1, 7, 17, 23, 40, 59, 66, 69, 74, 77, 85], "2n": [1, 40, 59], "proceed": [1, 63, 67, 95], "frac": [1, 40, 41, 42, 44, 59, 89], "3n": 1, "notin": 1, "recal": [1, 7, 8, 14, 15, 19, 20, 22, 30, 37, 41, 45, 49, 51, 53, 56, 58, 62, 64, 65, 67, 69, 77, 78, 79, 80, 81, 84, 87], "toward": [1, 20, 30, 41, 42], "end": [1, 3, 7, 10, 12, 13, 14, 15, 18, 20, 24, 27, 30, 32, 33, 40, 41, 42, 44, 45, 46, 47, 49, 53, 62, 64, 65, 66, 67, 68, 69, 72, 76, 77, 78, 79, 80, 81, 84, 85, 87, 91, 92, 94, 95], "o_2": 1, "exist": [1, 8, 13, 16, 25, 28, 38, 42, 45, 53, 54, 56, 58, 60, 62, 63, 64, 65, 67, 69, 70, 79, 80, 83, 85, 87, 92, 95], "c": [1, 3, 4, 5, 6, 7, 8, 10, 14, 16, 19, 23, 25, 27, 29, 30, 34, 35, 39, 41, 42, 45, 47, 48, 49, 51, 52, 55, 56, 57, 58, 63, 64, 65, 66, 68, 71, 74, 76, 77, 78, 80, 84, 85, 86, 87, 89, 91, 92, 95, 96], "gt": [1, 80], "existenti": [1, 56], "quantifi": [1, 14, 19, 56], "posit": [1, 8, 15, 28, 35, 41, 49, 67, 78, 79, 80, 81, 94], "bump": 1, "larger": [1, 3, 7, 22, 24, 33, 41, 42, 45, 63, 66, 67, 69, 82], "analyz": [1, 40, 44, 64, 65, 74], "happen": [1, 5, 6, 7, 8, 10, 12, 13, 16, 22, 26, 27, 33, 40, 41, 42, 44, 45, 47, 48, 49, 55, 64, 67, 78, 81, 85, 92, 94, 95], "slower": [1, 16], "hardcod": [1, 12, 20, 95], "lookup": [1, 26, 28, 48, 69, 79], "o_3": 1, "n_0": 1, "geq": [1, 48], "smaller": [1, 4, 14, 19, 20, 21, 22, 42, 46, 64, 67, 79, 85], "temporarili": [1, 7, 85], "pick": [1, 3, 10, 13, 19, 44, 47, 48, 51, 64, 67, 92, 95], "power": [1, 2, 6, 8, 11, 12, 20, 24, 25, 29, 36, 39, 40, 41, 42, 44, 45, 55, 56, 74, 77, 93, 95], "repeat": [1, 12, 15, 17, 18, 20, 24, 33, 41, 44, 47, 53, 58, 64, 77, 95], "memor": [1, 49], "abl": [1, 3, 9, 18, 27, 30, 41, 44, 45, 47, 55, 66, 67, 71, 74, 77, 80, 82, 85, 92, 95], "recreat": 1, "scratch": [1, 58, 66, 71, 95], "anytim": [1, 64, 67, 77], "asymptot": [1, 44, 50, 58, 79, 90], "upper": [1, 7, 15, 22, 25, 66, 70, 85], "least": [1, 8, 9, 14, 15, 18, 20, 25, 28, 30, 40, 41, 42, 47, 48, 53, 54, 57, 58, 62, 63, 64, 69, 78, 85, 90], "inflat": [1, 40], "goal": [1, 7, 9, 14, 16, 19, 21, 24, 33, 40, 50, 61, 65, 66, 67, 69, 78, 84, 95], "explicitli": [1, 5, 7, 8, 18, 32, 53, 63, 87], "ask": [1, 5, 6, 8, 12, 13, 47, 95], "tightest": 1, "ldot": [1, 40, 42, 89], "parameter": [1, 36, 41, 56, 74, 77, 79, 80, 81, 86], "badli": [1, 94], "mislead": 1, "moral": [1, 25, 64], "stori": [1, 25, 64], "hideou": 1, "inexcus": 1, "abus": [1, 83, 93], "allow": [1, 8, 12, 14, 16, 18, 19, 20, 21, 25, 27, 30, 31, 40, 41, 42, 47, 48, 49, 56, 64, 73, 74, 77, 78, 80, 82, 83, 85, 92, 95], "perman": [1, 4], "infect": 1, "conscious": 1, "defens": [1, 11, 23], "patent": 1, "ridicul": 1, "grace": [1, 72], "admit": [1, 47, 90], "nonsens": 1, "sometim": [1, 4, 7, 8, 9, 13, 14, 16, 19, 22, 24, 25, 27, 32, 35, 40, 42, 44, 45, 47, 52, 63, 64, 65, 66, 67, 73, 76, 77, 79, 85, 92, 94, 95], "becom": [1, 3, 8, 9, 10, 18, 21, 25, 27, 28, 30, 35, 36, 40, 41, 42, 43, 45, 46, 47, 48, 55, 60, 62, 63, 64, 66, 67, 70, 75, 79, 80, 81, 82, 84, 85, 88, 92, 95], "stuck": [1, 14, 19, 22, 51, 63, 68, 69, 95], "mistak": [1, 3, 10, 16, 21, 27, 32, 40, 81, 92, 95], "ancestor": [1, 66], "Be": [1, 15, 41, 66, 95], "direct": [1, 4, 12, 20, 41, 42, 47, 50, 53, 55, 77, 78, 87, 95], "ever": [1, 3, 4, 7, 8, 9, 18, 27, 35, 40, 42, 45, 47, 49, 64, 67, 69, 79, 81, 85, 92], "chanc": [1, 4, 27, 47, 85], "teach": [1, 70, 75], "intellectu": [1, 96], "children": [1, 37, 44, 48, 51, 65], "By": [1, 8, 9, 13, 14, 17, 18, 19, 22, 24, 30, 41, 42, 45, 48, 49, 55, 56, 58, 64, 67, 70, 78, 85, 92, 95], "improv": [1, 5, 9, 13, 16, 20, 21, 24, 41, 46, 47, 48, 55, 56, 66, 72, 77, 78, 83, 85, 92, 95], "pretti": [1, 8, 12, 13, 47, 63, 84], "thing": [1, 4, 5, 8, 9, 10, 12, 16, 20, 25, 27, 31, 32, 33, 45, 47, 49, 64, 67, 74, 79, 92, 94, 95], "longest": [1, 28, 48], "euphem": 1, "emphas": [1, 5, 16, 33, 55, 85], "featur": [1, 7, 8, 9, 11, 19, 25, 29, 30, 33, 35, 36, 43, 45, 46, 47, 49, 60, 62, 65, 66, 67, 71, 75, 77, 80, 81, 83, 86, 88, 90, 92, 94], "linear": [1, 6, 8, 18, 26, 37, 38, 40, 41, 42, 44, 46, 55, 58, 59, 63, 64, 77, 78, 79], "familiar": [1, 14, 22, 24, 29, 30, 42, 54, 58, 61, 66, 92, 95], "tail": [1, 11, 19, 28, 36, 41, 46, 49, 51, 59, 67, 77, 79, 91, 92], "insid": [2, 3, 5, 7, 8, 9, 10, 22, 25, 27, 30, 32, 35, 41, 44, 45, 47, 48, 49, 62, 63, 65, 66, 67, 76, 77, 80, 81, 83, 84, 85, 92, 95], "With": [2, 8, 16, 18, 20, 41, 46, 47, 55, 62, 64, 65, 67, 69, 77, 80, 81, 90, 95], "system": [2, 3, 4, 8, 9, 10, 16, 21, 24, 45, 46, 47, 63, 64, 67, 68, 72, 73, 74, 77, 80, 81, 82, 85, 86, 87, 92, 95], "host": 2, "os": [2, 47, 65, 95], "guest": 2, "nativ": [2, 3], "vm": [2, 68], "provid": [2, 3, 5, 6, 7, 8, 9, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 27, 32, 33, 35, 36, 41, 42, 45, 46, 47, 48, 55, 57, 58, 60, 63, 65, 66, 72, 74, 76, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 94, 95], "pre": [2, 26, 27, 30, 40, 55, 95], "ubuntu": [2, 95], "free": [2, 4, 16, 28, 64, 66, 67, 68, 74, 75, 94, 95], "linux": [2, 16], "ancient": 2, "african": 2, "process": [2, 8, 13, 20, 24, 30, 33, 36, 47, 48, 51, 55, 58, 64, 66, 67, 79, 80, 87, 95], "download": [2, 12, 13, 62, 63, 65, 66, 67, 69, 78, 94, 95], "vmware": 2, "workstat": 2, "pro": 2, "person": [2, 5, 13, 21, 82], "account": [2, 25, 40, 53, 62, 95], "broadcom": 2, "amd64": 2, "save": [2, 3, 4, 40, 42, 44, 56, 62, 69, 95], "ova": 2, "wherev": [2, 64], "launch": [2, 12, 47, 63, 76, 87, 94, 95], "select": [2, 13, 65, 84, 95], "open": [2, 3, 13, 27, 30, 32, 33, 41, 42, 47, 63, 66, 67, 69, 77, 78, 79, 80, 86, 87, 94, 95], "click": [2, 13, 47, 94, 95], "cs": [2, 4, 6, 23, 37, 47, 68, 94, 95, 96], "minut": [2, 8, 64, 94], "gui": [2, 8, 23, 47, 94, 95], "appear": [2, 4, 8, 14, 18, 24, 28, 30, 34, 35, 39, 41, 42, 43, 45, 47, 53, 63, 64, 65, 66, 67, 77, 79, 80, 85, 86, 87, 95], "skip": [2, 12, 15, 45, 66, 67, 69, 95], "fusion": 2, "appl": [2, 78], "silicon": 2, "m1": [2, 80], "m2": [2, 80], "m3": [2, 80], "arm": [2, 65], "intel": 2, "drag": 2, "custom": [2, 14, 18, 33, 77, 79, 85], "64": [2, 7, 8, 30], "plai": [2, 15, 16, 30, 45, 85], "icon": [2, 12, 94, 95], "middl": [2, 13, 22, 46, 49, 64, 65, 77], "black": [2, 15, 19, 23, 41, 43, 50], "automat": [2, 4, 7, 8, 17, 39, 64, 66, 74, 76, 77, 80, 81, 83, 85, 95], "usernam": [2, 95], "camel": [2, 10, 47, 92, 94, 95], "password": [2, 95], "termin": [2, 3, 7, 10, 12, 27, 41, 47, 64, 66, 68, 77, 85, 88, 92, 94, 95], "firefox": 2, "web": [2, 12, 13, 30, 43, 47, 94], "browser": [2, 12, 13, 47, 65, 94, 95], "hand": [2, 3, 7, 8, 18, 21, 24, 30, 34, 35, 41, 45, 48, 49, 55, 58, 62, 64, 65, 66, 67, 69, 71, 77, 80, 85, 92, 95], "launcher": 2, "bar": [2, 30, 65, 69, 95], "updat": [2, 20, 21, 25, 33, 44, 47, 74, 79, 80, 88, 91, 92, 95], "opam": [2, 3, 8, 47, 66], "sudo": [2, 95], "apt": [2, 95], "switch": [2, 47, 62, 67, 70, 79], "semest": [2, 94, 95], "instruct": [2, 8, 45, 47, 65, 70, 95], "default": [2, 3, 8, 13, 20, 42, 47, 48, 49, 66, 77, 86, 89, 95], "recent": [2, 26, 43, 46, 57, 62, 79, 95], "platform": [2, 3, 7, 94, 95], "option": [2, 3, 12, 14, 20, 25, 26, 27, 28, 29, 30, 36, 41, 42, 44, 45, 63, 64, 66, 77, 80, 81, 85, 91, 92, 95], "chang": [2, 3, 4, 7, 8, 10, 13, 14, 17, 18, 19, 20, 21, 25, 30, 33, 34, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 55, 58, 62, 63, 64, 67, 70, 71, 72, 74, 77, 78, 79, 81, 82, 85, 87, 88, 90, 91, 92, 95], "passwd": 2, "prompt": [2, 12, 87, 95], "welcom": [2, 95], "user": [2, 20, 24, 32, 47, 49, 92, 95], "awar": [2, 16, 40, 47, 76, 83], "won": [2, 3, 4, 9, 16, 25, 28, 41, 45, 49, 64, 66, 67, 69, 72, 74, 76, 77, 80, 81, 85, 87, 92, 95], "kind": [3, 4, 5, 8, 9, 12, 15, 16, 18, 19, 20, 21, 22, 25, 27, 29, 30, 32, 36, 39, 40, 41, 42, 43, 45, 47, 48, 49, 51, 52, 60, 64, 65, 67, 68, 74, 76, 80, 84, 85, 86, 92, 95], "interact": [3, 9, 12, 13, 14, 24, 41, 47, 49, 64, 66, 87, 92, 94], "calcul": [3, 12, 41, 44], "far": [3, 4, 5, 7, 8, 13, 17, 18, 19, 20, 22, 24, 25, 27, 34, 35, 40, 42, 45, 47, 55, 58, 62, 63, 64, 66, 69, 72, 76, 77, 79, 82, 85, 90, 92], "directori": [3, 13, 33, 76, 87, 95], "command": [3, 7, 12, 41, 47, 66, 74, 87, 94, 95], "mkdir": [3, 95], "hello": [3, 6, 25, 35, 41, 65, 77, 94], "cd": [3, 95], "root": [3, 6, 10, 13, 16, 25, 28, 41, 44, 48, 51, 64, 66, 95], "unix": [3, 16, 20, 41, 47], "home": [3, 95], "place": [3, 7, 8, 13, 18, 21, 22, 24, 25, 30, 33, 42, 47, 48, 51, 63, 67, 69, 76, 77, 85, 89, 92, 94, 95], "soon": [3, 4, 8, 21, 25, 39, 45, 55, 67, 74, 79, 81, 83, 85], "subdirectori": [3, 87, 95], "_": [3, 10, 14, 16, 18, 19, 20, 25, 27, 28, 30, 31, 33, 34, 37, 38, 41, 42, 44, 45, 46, 47, 48, 49, 51, 55, 63, 67, 69, 76, 77, 79, 80, 84, 85, 92], "print_endlin": [3, 6, 10, 47, 94], "intend": [3, 17, 24, 27, 30, 41, 45, 51, 66, 67, 77, 85, 95], "session": [3, 12, 20], "blank": 3, "underscor": [3, 10, 30, 33], "ocamlc": [3, 78, 87], "output": [3, 4, 6, 8, 10, 12, 13, 15, 16, 18, 19, 21, 23, 28, 30, 41, 42, 45, 47, 48, 49, 50, 53, 54, 56, 57, 58, 64, 65, 66, 69, 74, 77, 78, 79, 80, 84, 85, 86, 91, 92, 94, 95], "bytecod": [3, 45, 65, 68, 87], "cmi": 3, "cmo": [3, 78, 87], "concern": [3, 4, 18, 30, 74, 77, 82, 83], "print": [3, 4, 11, 12, 20, 28, 33, 41, 45, 47, 49, 54, 58, 64, 78, 84, 90, 92, 94], "string": [3, 5, 6, 7, 8, 10, 15, 18, 20, 25, 26, 27, 28, 32, 33, 34, 35, 41, 42, 44, 45, 47, 53, 55, 56, 58, 63, 64, 66, 69, 76, 77, 78, 79, 80, 84, 85, 87, 91, 92, 94, 95], "recompil": [3, 63, 78], "rerun": 3, "multipl": [3, 6, 7, 8, 10, 11, 15, 18, 19, 22, 25, 26, 35, 40, 41, 42, 45, 46, 47, 49, 53, 61, 64, 65, 67, 77, 78, 79, 84, 92], "cycl": [3, 25, 42, 45, 49, 50, 91, 92], "feel": [3, 8, 9, 24, 29, 45, 66, 72, 85, 95], "unfamiliar": [3, 6], "id": [3, 8, 9, 30, 45, 63, 64, 66, 79, 80, 81, 94, 95], "eclips": [3, 9], "worri": [3, 4, 7, 8, 17, 30, 33, 47, 58, 64, 67, 76, 77, 78, 93, 95], "clean": [3, 73, 95], "rm": [3, 6, 13, 95], "unlik": [3, 7, 29, 42, 64, 85, 92], "invok": [3, 13, 20, 47, 77, 81, 85, 92], "idiom": [3, 9, 11, 30, 77], "last": [3, 4, 7, 13, 18, 20, 22, 28, 40, 41, 42, 44, 45, 46, 47, 49, 52, 64, 66, 67, 69, 80, 85], "serv": [3, 19, 21, 24, 47, 72], "kick": [3, 8], "off": [3, 4, 8, 18, 24, 30, 32, 40, 47, 49, 58, 64, 77, 84, 85, 92, 94], "librari": [3, 4, 5, 7, 8, 9, 10, 11, 13, 18, 20, 21, 25, 26, 27, 28, 30, 33, 34, 36, 37, 41, 45, 47, 48, 49, 52, 53, 54, 57, 58, 60, 66, 67, 76, 77, 78, 79, 80, 81, 85, 89, 92], "legaci": [3, 87], "ocamlbuild": [3, 87], "newer": [3, 95], "gradl": 3, "maven": 3, "ant": 3, "hierarchi": [3, 64], "extern": [3, 47], "packag": [3, 20, 47, 83, 85, 95], "instal": [3, 8, 15, 18, 20, 47, 77, 78, 84, 94], "manag": [3, 13, 17, 25, 40, 47, 74, 82, 95], "descend": [3, 13, 16, 19, 28, 48, 64], "lisp": [3, 8, 30, 46, 62, 67, 71, 73, 75], "parenthes": [3, 7, 8, 12, 25, 35, 47, 55, 59, 63, 65, 66, 79, 80, 85, 88], "nest": [3, 6, 7, 10, 13, 19, 30, 31, 32, 63, 67, 77, 84, 85, 92], "html": [3, 5, 12, 13, 23, 30, 75, 76, 94], "declar": [3, 5, 8, 16, 25, 47, 63, 64, 66, 76, 77, 78, 80, 81, 82, 84, 85, 86, 91], "lang": [3, 33, 64], "releas": [3, 47, 95, 96], "sourc": [3, 4, 5, 12, 13, 16, 17, 18, 20, 24, 30, 47, 55, 62, 65, 68, 74, 76, 80, 81, 82, 87, 90, 91, 94, 95], "ex": [3, 13, 30, 33, 41, 47, 95], "extens": [3, 4, 19, 25, 30, 47, 66, 70, 76, 80, 86, 94, 95], "window": [3, 12, 33, 41], "_build": [3, 33, 66, 87], "benefit": [3, 21, 24, 42, 47, 56, 75, 83], "over": [3, 7, 8, 9, 14, 15, 16, 17, 19, 20, 25, 37, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 55, 56, 60, 61, 62, 64, 66, 67, 69, 70, 74, 77, 78, 80, 94, 95, 96], "pollut": 3, "bunch": [3, 40], "cleanli": [3, 41], "separ": [3, 6, 7, 8, 10, 18, 30, 33, 53, 64, 65, 66, 67, 76, 79, 82, 84, 85, 92, 95], "buri": 3, "coupl": [3, 4, 8, 9, 10, 14, 17, 20, 21, 25, 28, 32, 42, 45, 47, 48, 52, 55, 61, 66, 69, 80, 81, 85, 86, 92], "shortcut": [3, 95], "rememb": [3, 12, 16, 30, 32, 35, 44, 49, 55, 63, 67, 77, 80, 81, 92, 95], "To": [3, 4, 7, 8, 10, 13, 14, 18, 19, 20, 25, 27, 28, 31, 33, 34, 35, 40, 41, 42, 44, 46, 47, 48, 49, 51, 53, 55, 58, 62, 63, 64, 67, 69, 76, 77, 78, 79, 80, 82, 85, 88, 91, 92, 94, 95], "simpli": [3, 7, 8, 14, 16, 18, 19, 25, 26, 27, 28, 30, 39, 41, 42, 44, 45, 47, 48, 49, 54, 63, 66, 74, 77, 80, 81, 82, 85, 92, 94, 95], "exec": [3, 13, 33, 41, 47], "remov": [3, 14, 15, 18, 20, 21, 41, 42, 45, 47, 58, 65, 78, 79, 80, 82, 85, 91, 95], "cach": [3, 49, 50, 77, 79], "copi": [3, 4, 12, 18, 20, 30, 33, 35, 36, 40, 66, 77, 78, 79, 81, 83, 95], "accident": [3, 55, 58, 67, 76, 85], "loss": [3, 18], "recov": [3, 42], "git": 3, "advis": [3, 79], "error": [3, 4, 6, 7, 8, 10, 12, 13, 16, 20, 23, 24, 25, 27, 32, 33, 45, 49, 55, 63, 64, 65, 67, 69, 74, 76, 77, 78, 79, 80, 81, 85, 87, 91, 92, 94, 95], "attempt": [3, 13, 22, 24, 30, 36, 42, 47, 49, 58, 64, 65, 66, 67, 69, 74, 77], "init": [3, 30, 55, 77, 89, 95], "bin": 3, "ocamlformat": [3, 76, 95], "top": [3, 8, 12, 14, 15, 47, 48, 59, 77, 80, 81, 85, 91, 94, 95], "onc": [3, 10, 15, 18, 19, 20, 22, 27, 28, 30, 40, 41, 42, 44, 45, 47, 49, 53, 55, 56, 64, 65, 67, 69, 70, 77, 78, 79, 82, 85, 86, 88, 92, 94], "accomplish": [3, 7, 30, 42, 65, 67, 80, 84], "respond": [3, 7, 47, 85], "wait": [3, 14, 33, 47, 64, 94], "filesystem": [3, 95], "rebuild": [3, 33], "stop": [3, 4, 8, 41, 42, 47, 63, 67, 95], "press": [3, 12, 41, 47, 50, 79, 86, 95], "resort": 4, "everyth": [4, 5, 8, 57, 67, 69, 74, 80, 82, 87], "els": [4, 6, 7, 8, 13, 14, 15, 16, 18, 19, 26, 30, 42, 44, 45, 46, 47, 48, 49, 51, 54, 55, 56, 58, 59, 62, 63, 64, 66, 67, 69, 77, 78, 79, 80, 81, 92, 95], "fail": [4, 7, 13, 16, 17, 18, 19, 20, 21, 22, 27, 33, 41, 47, 48, 64, 72, 77, 87, 94, 95], "accord": [4, 7, 14, 17, 19, 20, 28, 30, 41, 42, 46, 49, 55, 62, 64, 65, 80, 85, 92], "rob": 4, "miller": 4, "four": [4, 13, 28, 31, 45, 46, 48, 63, 64, 66, 70, 77, 86, 94, 95], "erad": 4, "memori": [4, 8, 9, 12, 17, 30, 36, 40, 45, 47, 49, 62, 65, 74, 92, 93], "safeti": [4, 8, 17, 68, 74, 75, 92, 93], "access": [4, 7, 8, 9, 32, 35, 36, 39, 46, 47, 49, 65, 77, 78, 79, 81, 85, 87, 88, 92, 95], "refer": [4, 7, 8, 10, 15, 19, 20, 25, 32, 39, 40, 45, 47, 52, 56, 64, 66, 79, 87, 89, 91, 92, 93], "region": [4, 13, 92], "inconsist": [4, 18], "prevent": [4, 8, 21, 24, 30, 64, 67, 74, 77, 83, 92], "buffer": [4, 10, 66, 74], "overflow": [4, 6, 8, 49, 72, 74], "ad": [4, 8, 12, 13, 15, 16, 18, 19, 20, 40, 41, 42, 47, 48, 58, 66, 67, 69, 77, 78, 79, 80, 81, 83, 84, 85], "boolean": [4, 7, 14, 22, 34, 41, 42, 56, 64, 66, 67, 69, 92], "float": [4, 6, 7, 10, 13, 25, 28, 32, 38, 41, 42, 53, 76, 78, 79, 80, 84, 88, 89], "tool": [4, 5, 9, 11, 12, 13, 16, 24, 30, 61, 65, 66, 95], "autom": [4, 24, 33], "analysi": [4, 9, 14, 22, 43, 50, 65, 67, 68, 69, 70, 79], "findbug": 4, "slam": 4, "devic": 4, "driver": [4, 24], "subfield": 4, "verif": [4, 14, 19, 23, 24], "social": [4, 17, 23, 24, 85], "ibm": [4, 24], "1970": [4, 48, 66, 73], "1990": [4, 56, 60, 70, 71, 72], "remark": [4, 24, 67], "effect": [4, 7, 8, 9, 10, 13, 19, 24, 39, 40, 41, 42, 43, 44, 45, 47, 49, 50, 66, 74, 75, 76, 77, 80, 81, 82, 85, 87, 88, 90, 94, 95], "jone": [4, 24], "1991": [4, 23, 24, 46, 73], "inspect": [4, 23, 24, 48], "found": [4, 7, 8, 15, 18, 19, 20, 23, 24, 41, 42, 46, 48, 64, 74, 87, 93, 94, 95], "65": [4, 7, 24, 30], "20": [4, 7, 24, 26, 27, 30, 40, 41, 42, 45, 47, 63, 64, 85, 92, 96], "none": [4, 5, 8, 10, 20, 24, 25, 26, 27, 28, 30, 32, 41, 42, 44, 45, 47, 49, 55, 63, 67, 77, 79, 81, 91, 92], "visibl": [4, 30, 44, 77, 81, 85, 86, 94], "easier": [4, 15, 16, 18, 24, 28, 30, 40, 45, 47, 62, 64, 65, 67, 72, 74, 79, 81, 82, 86, 87, 95], "diagnos": [4, 45, 85, 95], "fix": [4, 8, 10, 12, 20, 21, 22, 24, 35, 40, 42, 47, 48, 58, 63, 64, 85, 88, 95], "past": [4, 12, 14, 17, 33, 58, 63, 81, 83, 84, 95, 96], "point": [4, 6, 7, 8, 13, 16, 18, 19, 25, 28, 33, 34, 35, 38, 42, 45, 47, 49, 54, 55, 58, 61, 62, 63, 64, 65, 66, 67, 76, 77, 79, 83, 85, 91, 92, 95], "obscur": [4, 16, 47, 64, 86], "loudli": 4, "fourth": [4, 41, 53, 56, 66, 92, 95], "expos": [4, 5, 17, 18, 45, 47, 72, 77, 80, 81, 84, 92], "confirm": [4, 13], "modul": [4, 7, 8, 10, 13, 14, 15, 20, 21, 24, 26, 28, 30, 33, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 53, 55, 57, 59, 60, 66, 67, 69, 74, 76, 77, 78, 79, 82, 86, 88, 89, 91, 92], "especi": [4, 8, 30, 40, 42, 43, 47, 64, 66, 90, 94], "break": [4, 23, 40, 42, 48, 64, 65, 74, 77, 79, 95], "distil": 4, "hard": [4, 5, 14, 16, 21, 22, 24, 30, 35, 42, 45, 48, 55, 67, 76, 80, 81, 82, 90, 92], "lurk": [4, 12, 85], "spent": [4, 16, 40, 44], "until": [4, 7, 17, 27, 32, 33, 45, 46, 47, 49, 58, 65, 67, 71, 72, 74, 76, 78, 81, 92, 95], "emploi": [4, 24], "scientif": [4, 23, 24], "formul": [4, 15, 19, 22, 24, 41, 45, 69], "notebook": [4, 94], "chemistri": 4, "lab": [4, 95], "clarifi": [4, 71], "mind": [4, 6, 15, 36, 57, 76, 86, 95], "keep": [4, 15, 18, 19, 20, 21, 22, 24, 31, 36, 40, 41, 42, 45, 46, 47, 48, 55, 58, 62, 64, 67, 69, 77, 79, 80, 82, 86, 87, 95], "track": [4, 22, 31, 42, 47, 55, 64, 67], "hypothes": [4, 22], "experi": [4, 9, 17, 20, 24, 62, 63, 72, 78, 79, 87, 94], "affirm": 4, "deni": 4, "reformul": 4, "ration": [4, 13, 78], "typo": [4, 85], "Or": [4, 8, 10, 13, 21, 25, 30, 35, 45, 54, 62, 64, 66, 67, 85, 94, 95], "reveal": [4, 8, 13, 19, 20, 21, 24, 40, 47, 68, 77, 82, 83], "flaw": [4, 58], "major": [4, 8, 18, 53, 67, 69, 95], "refactor": [4, 33, 56, 78], "suit": [4, 13, 15, 17, 20, 27, 28, 33], "creep": 4, "futur": [4, 7, 17, 18, 24, 25, 30, 41, 46, 47, 62, 86, 95], "guard": [4, 7, 64, 67, 69], "repeatedli": [4, 6, 44], "previou": [4, 5, 6, 8, 13, 14, 15, 19, 25, 28, 30, 33, 35, 41, 44, 47, 49, 54, 63, 64, 65, 67, 69, 78, 80, 92, 95], "regress": [4, 23], "tip": [4, 94, 95], "ascertain": 4, "inc": [4, 8, 12, 41, 45, 85, 87, 89], "print_int": [4, 10, 58], "trace": [4, 27], "fib": [4, 6, 15, 44, 49], "untrac": 4, "debugg": [4, 9], "ocamldebug": 4, "tutori": [4, 13, 95], "websit": [4, 73, 95], "unless": [4, 8, 20, 63, 67, 72, 79, 87, 95], "emac": [4, 62, 94, 95], "section": [4, 5, 16, 18, 23, 28, 30, 33, 35, 41, 44, 45, 46, 47, 50, 54, 55, 56, 61, 63, 66, 67, 69, 77, 80, 81, 85, 92, 94], "precondit": [4, 8, 11, 13, 14, 15, 16, 18, 19, 21, 23, 41, 76], "random_int": [4, 5], "random": [4, 5, 15, 23, 42, 92, 95], "inclus": [4, 5, 6, 30, 53, 87], "exclus": [4, 5, 57], "greater": [4, 5, 6, 13, 16, 24, 30, 46, 48, 53, 67, 78, 79, 80], "30": [4, 5, 28, 30, 47, 49, 85], "pass": [4, 5, 8, 10, 13, 19, 20, 21, 30, 33, 38, 42, 45, 52, 55, 56, 57, 58, 59, 64, 67, 75, 78, 80, 85, 92], "violat": [4, 13, 16, 18, 20, 21, 24, 40, 42, 44, 47, 48, 64, 67, 84, 92], "claus": [4, 5, 23, 30], "whatsoev": [4, 45, 69], "bet": [4, 92], "didn": [4, 8, 30, 33, 49, 55, 60, 69, 71, 80, 81, 92, 93], "implementor": [4, 80], "lsl": 4, "invalid_arg": [4, 13, 47, 92], "built": [4, 6, 7, 8, 10, 14, 18, 20, 26, 29, 30, 31, 33, 36, 40, 41, 42, 45, 46, 47, 49, 54, 55, 58, 64, 66, 69, 73, 78, 79, 83, 84, 85, 92, 95], "invalid_argu": [4, 7, 13, 46, 47, 88, 92], "situat": [4, 13, 22, 40, 46, 48, 49, 62, 65, 69, 76, 87], "invalid": [4, 16, 53, 66, 78], "computation": [4, 67], "cheap": [4, 18, 40, 42], "prefer": [4, 9, 12, 42, 47, 48, 76, 92, 95], "inexpens": [4, 40], "approxim": [4, 7, 13, 18, 41, 42, 49, 64, 79], "unnecessarili": 4, "expens": [4, 18, 24, 37, 40, 42, 46, 58], "cost": [4, 18, 24, 40, 48, 58, 77, 79], "initi": [4, 8, 15, 20, 23, 24, 40, 41, 42, 46, 51, 55, 64, 65, 69, 88, 89, 92], "paid": [4, 40], "These": [4, 7, 8, 16, 19, 23, 24, 30, 36, 45, 49, 56, 66, 76, 83, 87, 92, 94, 95], "often": [4, 5, 7, 8, 10, 13, 16, 18, 20, 24, 33, 35, 37, 42, 43, 45, 48, 56, 59, 64, 77, 80, 85, 87, 88, 95], "misplac": 4, "monei": [4, 40], "societi": 4, "repair": [4, 48], "fault": [4, 19, 23, 24, 45, 90], "restat": 4, "postcondit": [4, 8, 11, 16, 19, 21, 23], "big": [4, 7, 8, 30, 35, 42, 44, 50, 62, 63, 66, 68, 69, 70, 77, 78, 87], "savvi": [4, 42], "anywai": [4, 12, 40, 45, 47, 62, 85], "spend": [4, 24, 40, 95], "ocamldoc": [5, 76], "javadoc": [5, 30], "comment": [5, 8, 15, 18, 19, 21, 23, 24, 30, 47, 55, 63, 64, 77, 84, 85], "render": [5, 30, 33, 47], "easi": [5, 8, 9, 10, 14, 17, 18, 19, 24, 26, 30, 35, 39, 41, 42, 45, 48, 51, 58, 64, 67, 69, 72, 74, 77, 79, 81, 85, 94, 95, 96], "sum": [5, 19, 25, 30, 33, 35, 36, 40, 41, 49, 53, 55, 59, 84], "lst": [5, 15, 16, 18, 20, 22, 26, 28, 30, 42, 49, 53, 54, 55, 58, 65, 79, 80, 81, 85, 91, 92], "asterisk": 5, "recogn": [5, 27, 32, 40, 45, 56, 60, 66, 86, 95], "squar": [5, 6, 7, 8, 13, 15, 16, 25, 28, 30, 48, 49, 53, 56, 59, 65, 89, 95], "bracket": [5, 7, 25, 28, 30, 48, 65, 77], "around": [5, 7, 8, 16, 18, 22, 27, 40, 41, 46, 48, 49, 57, 62, 63, 64, 76, 79, 80, 87, 95], "typewrit": [5, 30], "font": 5, "regular": [5, 8, 63, 66, 68, 86], "support": [5, 7, 8, 10, 18, 19, 20, 25, 30, 42, 47, 57, 60, 62, 66, 74, 77, 78, 79, 80, 82, 83, 84, 95], "deprec": 5, "param": 5, "netid": [5, 95], "full": [5, 18, 19, 32, 34, 35, 41, 45, 48, 63, 64, 65, 72, 73, 80, 94], "rang": [5, 7, 20, 42, 59], "markup": 5, "manual": [5, 6, 7, 8, 27, 34, 41, 47, 55, 64, 77, 84, 85, 92, 95], "cover": [5, 7, 8, 9, 13, 18, 20, 24, 25, 27, 29, 30, 39, 43, 47, 60, 64, 65, 66, 67, 70, 78, 85, 90, 94], "enough": [5, 6, 8, 13, 14, 16, 17, 18, 21, 30, 33, 41, 58, 65, 66, 67, 82, 92], "style": [5, 7, 12, 16, 18, 35, 45, 46, 47, 52, 60, 67, 85, 86], "favor": 5, "resembl": [5, 19, 62, 64, 66, 67, 80, 86], "revisit": [5, 33, 34, 40, 78], "descript": [5, 16, 19, 30, 33, 38, 55, 66, 69, 82, 95], "redundantli": 5, "paramet": [5, 8, 16, 25, 33, 55, 57, 64, 80, 81], "said": [5, 9, 13, 27, 47, 72, 77, 92], "strongli": [5, 7, 19], "discourag": [5, 7], "limpid": 5, "lowercase_ascii": [5, 85], "lowercas": [5, 8], "ascii": [5, 7], "occurr": [5, 7, 15, 22, 30, 42, 45, 51, 62, 63, 66, 67, 79], "not_found": [5, 44, 69, 78, 79, 80], "satisfi": [5, 13, 16, 18, 19, 20, 21, 23, 28, 33, 40, 41, 45, 46, 48, 53, 56, 77, 80, 82, 83, 84], "sentenc": [5, 16, 18, 35, 80], "dynam": [5, 7, 8, 9, 11, 25, 27, 30, 34, 35, 39, 49, 63, 64, 67, 68, 69, 70, 74, 75, 81, 84, 85, 88, 91, 92], "python": [5, 7, 8, 10, 12, 20, 29, 30, 54, 57, 58, 59, 60, 65, 71, 72, 74, 85, 94], "frequent": [5, 13, 47, 65, 94], "regard": [5, 7, 17, 19, 35, 40, 67, 79], "ensur": [5, 9, 10, 13, 14, 17, 18, 20, 30, 42, 47, 48, 55, 58, 64, 67, 69, 78, 79, 80, 85], "wrong": [5, 16, 21, 25, 27, 58, 62, 67, 72, 82, 83, 92, 95], "although": [5, 7, 8, 9, 18, 19, 20, 25, 26, 37, 40, 41, 42, 44, 64, 65, 66, 67, 79, 80, 89, 92], "english": [5, 7, 14, 19], "helpfulli": 5, "reader": [5, 8, 12, 16, 18, 31, 45, 54, 55, 58, 66, 85, 94], "highli": [5, 7, 36, 49, 65], "unidiomat": 5, "puzzl": [5, 20, 28, 92], "wrote": [5, 8, 25, 26, 28, 30, 33, 45, 58, 64, 66, 69, 74, 77, 80], "Is": [5, 14, 17, 40, 42, 46, 77, 95], "am": 5, "miss": [5, 14, 16, 18, 66, 67, 76, 85], "string_of_int": [6, 7, 28, 32, 33, 42, 53, 67, 78, 84], "hint": [6, 7, 12, 13, 15, 18, 19, 28, 41, 47, 53, 63, 78, 79, 87, 89], "examin": [6, 7, 21, 29, 41, 42, 63, 74], "scroll": [6, 7], "page": [6, 7, 8, 12, 47, 49, 94, 95], "42": [6, 7, 8, 12, 19, 30, 32, 41, 42, 47, 56, 62, 63, 64, 65, 67, 77, 80, 81, 84, 85, 87, 91, 92], "divid": [6, 13, 19, 42, 67, 76, 78, 79, 89], "14": [6, 7, 8, 10, 25, 28, 30, 63, 68, 76, 77, 79, 85, 92], "seventh": [6, 66], "nor": [6, 8, 10, 16, 27, 47, 53, 55, 63, 85, 90], "cpu": [6, 47], "hi": [6, 25, 32, 44, 53, 56, 70, 72, 73, 79, 94], "physic": [6, 7, 9, 89, 93], "2110": [6, 37, 42, 70], "increment": [6, 7, 8, 12, 30, 33, 40, 45, 47, 49, 66, 88, 92], "cube": [6, 44, 53], "sign": [6, 8, 25, 28, 30, 33, 35, 66, 79, 80, 84], "circl": [6, 17, 25], "radiu": [6, 25], "bear": [6, 22, 57, 80, 95], "1e": 6, "worthwhil": [6, 8, 24, 30], "averag": [6, 15, 40, 42], "avg3": 6, "z": [6, 7, 8, 13, 15, 19, 22, 34, 35, 41, 47, 48, 63, 64, 66, 67, 80, 85, 89, 92], "sqrt": [6, 13, 44, 89], "date": [6, 28, 78, 95], "month": [6, 17, 28, 78], "abbrevi": [6, 25], "jan": [6, 79], "feb": 6, "mar": 6, "apr": 6, "mai": [6, 7, 8, 13, 14, 15, 16, 18, 21, 24, 25, 27, 28, 30, 34, 35, 41, 42, 45, 47, 48, 53, 63, 64, 67, 69, 79, 82, 85, 92], "jun": 6, "jul": 6, "aug": 6, "sept": 6, "oct": 6, "nov": 6, "dec": [6, 45], "minimum": [6, 13, 28], "31": [6, 8, 20, 28, 30, 41, 78, 80, 81, 85], "28": [6, 7, 28, 30, 85], "ters": [6, 53, 78, 79], "short": [6, 7, 13, 16, 24, 30, 37, 41, 42, 54, 62, 67, 68, 76, 85, 90, 92], "fewer": [6, 10, 24, 28, 48], "th": 6, "fibonacci": [6, 49], "sequenc": [6, 7, 10, 14, 19, 20, 30, 40, 41, 43, 45, 46, 63, 64, 65, 66, 88, 93], "13": [6, 20, 28, 30, 33, 41, 49, 50, 77, 80, 81, 85, 86, 93], "50th": [6, 78], "instantan": 6, "congratul": 6, "hang": 6, "indefinit": 6, "obviou": [6, 18, 42, 45, 49, 56, 67], "subproblem": [6, 22], "redon": 6, "fib_fast": 6, "helper": [6, 8, 28, 41, 45, 46, 47, 58, 69, 77, 79, 81, 91, 92], "h": [6, 14, 15, 18, 19, 22, 23, 25, 28, 30, 32, 34, 35, 41, 44, 45, 48, 49, 51, 54, 55, 58, 64, 77, 79, 80, 81], "pp": [6, 77], "forward": [6, 41, 95], "neg": [6, 16, 19, 22, 25, 28, 31, 40, 42, 46, 79, 80, 81, 85], "indic": [6, 7, 8, 10, 12, 30, 33, 39, 41, 42, 47, 48, 49, 55, 56, 57, 64, 65, 66, 77, 84, 85, 92, 95], "poli": [6, 8, 15, 23, 25, 28], "numer": [6, 16, 41, 78, 79], "denomin": [6, 41, 78], "associ": [6, 9, 14, 15, 18, 19, 22, 23, 28, 29, 30, 35, 36, 39, 44, 45, 46, 47, 50, 53, 55, 60, 63, 65, 66, 68, 69, 78, 79, 80, 95], "decid": [6, 18, 19, 21, 30, 35, 51, 55, 67, 80], "infix": [6, 8, 19, 22, 41, 45, 47, 64, 69, 79], "print_str": [6, 10], "primari": [7, 30, 46, 47, 65, 69, 70, 96], "primarili": [7, 8, 9, 47, 56, 74], "21": [7, 12, 30, 46, 49, 77, 85, 92], "cryptic": 7, "overview": 7, "remain": [7, 8, 14, 17, 33, 40, 46, 47, 49, 51, 53, 55, 62, 63, 64, 67, 69, 78, 80, 91], "yai": 7, "mostli": [7, 13, 47, 91, 94], "recogniz": 7, "mod": [7, 15, 20, 41, 42, 54, 87], "divis": [7, 41, 45, 47, 76, 78], "modulu": 7, "60": [7, 30], "division_by_zero": 7, "modern": [7, 13, 17, 42, 47, 62, 66, 68, 73, 75, 85], "regist": [7, 45, 47, 65, 77], "stolen": 7, "63": [7, 8, 13, 30], "int64": 7, "zarith": [7, 8], "purpos": [7, 16, 18, 20, 22, 45, 47, 55, 62, 65, 67, 69, 71], "suffic": [7, 19, 20, 33, 77, 79, 80, 85], "offer": [7, 40, 42, 43, 46, 48, 52, 70, 80, 85, 93, 95], "ieee": 7, "754": 7, "dot": [7, 30, 35, 53, 64, 77, 85, 95], "deliber": [7, 16, 33, 42, 77], "overload": [7, 10, 85], "expect": [7, 8, 10, 14, 16, 20, 24, 33, 35, 36, 38, 39, 40, 42, 45, 47, 48, 55, 63, 64, 66, 67, 72, 76, 77, 79, 80, 81, 85, 92], "convert": [7, 8, 10, 14, 15, 16, 18, 20, 31, 32, 40, 41, 42, 44, 49, 52, 58, 78, 84, 85], "int_of_float": 7, "float_of_int": [7, 15, 42], "round": [7, 40], "300000000000000044": 7, "behavior": [7, 8, 9, 13, 16, 18, 21, 22, 24, 41, 45, 47, 53, 78, 80, 85, 92, 95], "encount": [7, 45, 48, 51, 64, 67, 74, 76, 77, 86, 91, 92], "bool": [7, 8, 10, 13, 14, 15, 18, 20, 22, 25, 28, 30, 31, 37, 41, 42, 47, 48, 51, 53, 54, 55, 56, 64, 66, 67, 69, 76, 77, 79, 80, 81, 85, 89, 92], "circuit": [7, 41, 67, 68], "char": [7, 20, 53, 78, 80, 85], "quot": [7, 8, 41, 95], "iso": 7, "8859": 7, "latin": 7, "encod": [7, 16, 65, 69, 92], "half": [7, 41, 52, 74], "char_of_int": 7, "int_of_char": 7, "abc": [7, 55], "concaten": [7, 28, 45, 47, 55, 58], "def": [7, 59], "abcdef": 7, "orient": [7, 8, 9, 23, 70, 80, 81, 82, 83, 85, 86, 94], "overrid": [7, 42, 83], "tostr": [7, 10, 18, 33, 77, 78], "__str__": 7, "string_of_float": [7, 84], "string_of_bool": 7, "strang": [7, 8, 27, 47, 64, 80, 85, 92], "string_of_char": 7, "int_of_str": [7, 25, 66], "float_of_str": 7, "bool_of_str": 7, "123": [7, 30], "char_of_str": 7, "correspond": [7, 8, 18, 20, 22, 41, 42, 44, 45, 47, 51, 63, 66, 67, 76, 85], "inequ": [7, 48], "tricki": [7, 28, 40, 67, 80, 92], "curiou": [7, 77, 85], "yourself": [7, 8, 9, 10, 12, 13, 17, 20, 22, 30, 33, 41, 42, 47, 48, 49, 72, 75, 78, 92, 94, 95], "seri": [7, 13, 40, 41, 89], "input1": 7, "output1": 7, "input2": 7, "output2": 7, "input3": 7, "output3": 7, "forth": [7, 22, 41, 42, 47, 56, 57, 76, 77, 79, 85], "handl": [7, 13, 16, 25, 27, 30, 33, 41, 45, 47, 48, 62, 64, 66, 67, 69, 77, 79, 80, 81], "e3": [7, 8, 27, 30, 62, 64, 66, 67, 69, 88], "boo": 7, "anywher": [7, 8, 30, 38, 63, 64, 67, 74, 94], "ternari": [7, 51, 62, 63, 69], "pleasant": [7, 23, 30, 49, 57, 79], "e4": [7, 8, 27, 64], "e5": 7, "e6": 7, "en": [7, 8, 27, 30, 35, 63, 67, 88, 92], "mandatori": [7, 8, 35, 85, 88], "regardless": [7, 14, 28, 30, 42, 45, 47, 67, 78, 81, 92, 95], "omit": [7, 8, 12, 16, 18, 25, 30, 42, 45, 67, 76, 77, 79, 85, 90, 95], "messag": [7, 8, 17, 20, 33, 45, 64, 76, 81, 85, 95], "inscrut": 7, "letter": [7, 8, 17, 34, 39, 64, 66, 69, 76, 85, 87], "metavari": [7, 8, 11, 30, 66, 68], "certain": [7, 9, 19, 21, 40, 45, 47, 67, 69, 77, 86, 90], "curious": 7, "compact": [7, 53], "notat": [7, 19, 22, 28, 30, 35, 42, 45, 49, 62, 63, 66, 67, 69], "colon": [7, 30, 35, 64, 85], "pronounc": [7, 8, 10, 12, 25, 30, 45, 63, 77], "usag": [7, 8, 9, 27, 32, 41, 45, 63, 74, 77, 89], "consist": [7, 8, 9, 12, 56, 62, 64], "43": [7, 8, 30, 67, 80, 92], "24": [7, 30, 45, 48, 77], "11": [7, 8, 28, 30, 36, 41, 42, 44, 50, 77, 79, 80, 85, 86, 87], "permit": [7, 8, 10, 16, 34, 41, 47, 49, 64, 67, 79, 81, 85, 92], "On": [7, 18, 30, 40, 41, 45, 55, 67, 77, 81, 92, 95], "bodi": [7, 8, 10, 11, 16, 25, 27, 34, 41, 45, 49, 58, 62, 63, 64, 65, 67, 69, 80, 81, 85, 88, 92], "implicitli": [7, 8, 13, 14, 16, 32, 64, 86], "red": [7, 25, 41, 43, 50, 85, 91, 95], "idiomat": [7, 8, 9, 10, 30, 35, 39, 77, 85, 92], "begin": [7, 8, 10, 11, 12, 14, 16, 22, 30, 32, 33, 36, 39, 41, 48, 49, 53, 55, 60, 65, 66, 67, 69, 75, 77, 79, 81, 84, 85, 86, 92, 93], "lower": [7, 18, 25, 41, 48, 64, 66, 85], "snake_cas": [7, 85], "camelcas": [7, 85], "v1": [7, 8, 30, 34, 35, 42, 62, 63, 67, 79, 88, 91, 92], "substitut": [7, 8, 11, 30, 34, 62, 63, 64, 68, 70, 74, 85, 92, 95], "v2": [7, 30, 34, 42, 62, 63, 67, 88, 91, 92], "clariti": [7, 16, 18, 55, 59, 67], "inferenc": [7, 64, 68], "meaning": [7, 8, 42, 65, 85], "overlap": [7, 39, 44, 47], "darn": 7, "confus": [7, 9, 16, 30, 47, 64, 66, 77, 84, 85, 92], "ambigu": [7, 65, 79], "pronoun": 7, "guess": [7, 8], "principl": [7, 15, 19, 23, 32, 44, 45, 55, 58, 60, 62, 64, 67, 70, 71, 81, 85, 92, 95], "irrelev": [7, 8, 35, 48, 62, 67, 92], "shouldn": [7, 55, 62, 92, 95], "align": [7, 22, 82], "commonli": [7, 8, 35, 62, 69, 85], "alpha": [7, 8, 77, 78], "renam": [7, 45, 55, 70], "convers": [7, 8, 10, 18, 52, 64, 77, 92], "histor": [7, 54, 80], "unimport": 7, "embed": [7, 47, 94, 96], "shadow": [7, 62, 63, 64, 65, 67, 85], "old": [7, 17, 25, 30, 35, 40, 46, 47, 55, 62, 65, 69, 72, 79, 80, 83, 95], "metaphor": [7, 8, 12, 32, 41, 45, 52, 81], "cast": [7, 65, 85], "eventu": [7, 8, 17, 19, 41, 42, 45, 46, 47, 57, 58, 64, 66, 67, 73, 79], "reappear": 7, "reced": 7, "mutabl": [7, 19, 23, 25, 30, 42, 47, 48, 50, 58, 67, 74, 75, 79, 88, 89, 93], "transcript": [7, 47], "22": [7, 12, 25, 30, 47, 55, 63, 64, 68, 85, 95], "worth": [7, 13, 42, 72, 95, 96], "mutat": [7, 35, 42, 46, 47, 64, 88, 89, 91, 92, 93], "summar": 7, "immut": [7, 15, 30, 42, 72, 74, 75, 79, 90, 93], "superfici": [7, 14], "quit": [7, 8, 10, 12, 14, 18, 19, 20, 21, 22, 24, 30, 42, 43, 45, 47, 49, 59, 64, 66, 73, 74, 78, 80, 81, 86, 91, 92, 95], "27": [7, 30, 33, 45, 55, 68], "debug": [7, 8, 11, 16, 18, 23, 32, 45, 66, 72, 79], "forgotten": [7, 59, 85], "cannot": [7, 8, 14, 16, 18, 27, 32, 41, 45, 47, 48, 49, 63, 64, 67, 69, 72, 74, 77, 80, 85, 87, 88, 91, 93, 95], "tri": [7, 8, 34, 40, 73, 80, 92], "clear": [7, 8, 16, 21, 33, 37, 45, 48, 54, 64, 79, 82, 84, 94], "silli": [7, 74], "tini": [7, 61, 66, 67, 79, 80], "techniqu": [7, 8, 17, 19, 20, 22, 23, 24, 40, 42, 43, 44, 45, 50, 51, 61, 65, 81, 82], "awai": [7, 8, 10, 16, 17, 18, 25, 40, 47, 48, 55, 58, 64, 67, 81, 83, 87, 92, 95], "receiv": [8, 21, 33, 47, 66, 72, 73, 85, 92], "keyword": [8, 9, 12, 25, 28, 30, 32, 33, 47, 49, 53, 55, 63, 65, 66, 69, 79, 80, 84, 85, 88, 92], "self": [8, 38, 44, 55, 66, 85], "quibbl": 8, "distinct": [8, 13, 18, 30, 35, 44, 65, 80, 82, 83, 85, 95], "procedur": [8, 48, 64, 74, 95], "background": [8, 47, 94], "terminolog": [8, 23, 24, 47, 64], "strictli": [8, 10, 30, 32, 33, 41, 53, 56, 64, 67, 78, 80], "group": [8, 45, 65, 66, 83, 94], "titl": [8, 96], "scheme": [8, 20, 35, 64, 68, 70], "factori": [8, 14, 19, 58, 77, 92], "limit": [8, 20, 47, 65, 74, 78, 85, 86, 90], "wider": 8, "architectur": 8, "grown": 8, "garbag": [8, 71, 74], "collector": [8, 54, 58], "runtim": [8, 30, 64], "steal": 8, "flag": [8, 13, 18], "pow": [8, 67], "solv": [8, 14, 22, 28, 37, 41, 42, 44, 48, 55, 63, 67, 77, 80, 81, 95], "algorithm": [8, 16, 19, 37, 40, 41, 44, 47, 50, 51, 55, 60, 63, 64, 68, 70, 76, 78, 91], "ourselv": [8, 13, 17, 19, 20, 25, 40, 47, 58, 77, 82, 85, 90, 92], "mental": [8, 62, 64], "deduct": [8, 19, 53], "particularli": [8, 13, 16, 24, 25, 33, 42, 48, 75, 92], "x1": [8, 15, 19, 25, 34, 62, 67, 79, 89], "x2": [8, 19, 25, 34, 62, 67, 79], "xn": [8, 15, 34, 79, 89], "augment": [8, 45, 65, 67, 85], "week": [8, 17, 40], "mutual": [8, 11, 25, 31, 36, 37, 82, 85], "y1": [8, 25], "yn": 8, "odd": [8, 9, 15, 20, 31, 53, 54, 85], "u": [8, 18, 22, 25, 34, 41, 47, 49, 63, 84], "tn": [8, 25, 34, 35], "scope": [8, 16, 33, 63, 65, 67, 68, 69, 80, 81, 83, 86, 87, 92], "without": [8, 9, 12, 13, 16, 18, 19, 21, 27, 30, 33, 35, 41, 42, 44, 45, 46, 47, 49, 51, 55, 56, 58, 61, 62, 65, 66, 67, 74, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 91, 93, 95], "e0": [8, 34, 88], "vn": [8, 30, 35, 42, 79, 92], "vi": [8, 30, 35, 79, 88], "xi": [8, 34], "essenc": [8, 19, 57, 63, 71, 74], "imagin": [8, 16, 17, 33, 42, 45, 47, 48, 49, 56, 59, 92], "depict": [8, 18, 48], "triangl": 8, "sent": [8, 17, 47], "36": [8, 30, 85, 92], "send": [8, 77], "nice": [8, 30, 45, 48, 64, 79, 80, 85], "arguabl": [8, 16, 29, 35, 81, 84], "eleg": [8, 48, 53, 72], "ey": [8, 30, 45], "jump": [8, 65], "move": [8, 18, 24, 30, 33, 46, 47, 48, 49, 58, 63, 79, 85], "linearli": 8, "scale": [8, 94], "grow": [8, 19, 40, 42, 48], "1444": 8, "weird": [8, 66, 84], "chain": [8, 10, 19, 41, 47, 50], "stand": [8, 12, 19, 30, 55, 58, 64, 73, 92], "typic": [8, 13, 16, 23, 42, 47, 65, 66, 67, 69, 77, 88, 92, 94, 95], "greek": [8, 20, 25, 69], "beta": 8, "gamma": [8, 69], "bigr": [8, 28, 85, 87], "morph": [8, 25], "id_int": 8, "took": [8, 18, 22, 24, 40, 70, 79, 92], "promis": [8, 21, 41, 43, 45, 50, 92], "thrown": [8, 21], "lost": [8, 17, 79], "broken": [8, 13, 16, 18, 33, 63, 92], "safe": [8, 25, 28, 30, 45, 48, 64, 74, 92, 95], "someon": [8, 16, 17, 56, 64], "potenti": [8, 10, 24, 32, 39, 40, 46, 47, 48, 50, 58, 79, 84, 85, 95], "instanti": [8, 19, 64, 65, 68, 80, 85], "mechan": [8, 27, 47, 82, 83, 86], "unappli": 8, "backward": [8, 54, 58], "among": [8, 42, 47, 48, 64, 65, 72, 74, 83], "first_int": 8, "bad_first": 8, "19": [8, 27, 30, 45, 85], "compat": [8, 45, 66, 77, 81, 85], "substr": 8, "consult": [8, 18, 28, 40], "name1": 8, "arg1": 8, "name2": 8, "arg2": 8, "shorthand": 8, "tast": [8, 72], "convei": [8, 77], "clutter": [8, 64], "explicit": [8, 16, 34, 58, 85], "addx": [8, 80], "add5": 8, "normal": [8, 20, 22, 27, 28, 39, 40, 45, 76, 80, 84, 86, 89, 92], "multi": [8, 30, 44], "readi": [8, 22, 27, 47, 64, 76, 95], "breath": 8, "t3": [8, 41, 52, 64], "t4": 8, "implicit": [8, 55, 64, 68], "intuit": [8, 14, 30, 45, 47, 49, 55, 63, 67, 79, 84, 85, 92], "grab": [8, 95], "prefix": [8, 20, 22, 39, 41, 49, 64, 69, 85, 92, 95], "add3": 8, "unnecessari": [8, 30, 59], "bewar": [8, 25, 60], "pars": [8, 35, 45, 47, 61, 63, 64, 65, 67, 69, 84, 85, 92], "max": [8, 15, 28, 32, 44, 51, 53], "punctuat": [8, 9, 51, 65], "preced": [8, 15, 30, 63, 66, 68], "seemingli": [8, 85], "uninterest": 8, "100_000": 8, "100000": 8, "stack": [8, 18, 19, 27, 28, 36, 43, 45, 47, 49, 58, 65, 66, 77, 80, 85], "issu": [8, 12, 18, 20, 24, 30, 46, 48, 57, 77, 78, 87, 94, 95], "introductori": [8, 70, 72, 94], "store": [8, 12, 30, 40, 41, 42, 44, 46, 47, 48, 49, 57, 64, 65, 78, 80, 88, 92, 95], "local": [8, 18, 21, 23, 33, 36, 48, 81, 82, 85, 86, 94], "push": [8, 14, 16, 22, 42, 45, 66, 76, 77, 79, 80, 85, 91], "pop": [8, 14, 45, 66, 76, 77, 79, 80, 85, 91], "success": [8, 15, 17, 23, 41, 94], "eat": [8, 40], "harm": 8, "count_forev": 8, "sake": [8, 31, 49, 58, 62, 69, 77], "manifest": [8, 49], "1977": [8, 30, 60, 70], "steel": 8, "cooper": [8, 47, 50], "trick": [8, 16, 19, 40, 92], "count_aux": 8, "acc": [8, 19, 22, 30, 37, 42, 51, 54, 55, 58, 77], "count_tr": 8, "almost": [8, 16, 19, 29, 46, 81, 91], "accumul": [8, 15, 16, 17, 19, 22, 33, 37, 40, 41, 55, 60], "arriv": 8, "somewher": [8, 13], "tr": 8, "went": [8, 19, 27, 55, 62, 73, 94, 95], "effort": [8, 16, 33, 42, 95], "frame": [8, 36], "reus": [8, 73, 78, 80, 81, 83, 86], "finish": [8, 13, 14, 15, 19, 33, 40, 41, 47, 48, 49, 66, 67, 92, 95], "wast": [8, 13, 30, 42, 44, 59], "alloc": [8, 30, 40, 42, 74, 92], "recycl": 8, "beyond": [8, 9, 17, 24, 30, 35, 36, 42, 49, 74, 94, 95], "suitabl": [8, 65, 81], "calle": 8, "deal": [8, 14, 16, 42, 47, 55, 64, 66, 67, 77], "reduc": [8, 13, 14, 42, 44, 46, 64, 67, 78, 79], "1_000_000": [8, 30], "1000000": 8, "patholog": 8, "fixat": 8, "upon": [8, 16, 21, 22, 42, 45, 47, 66, 67, 70, 77, 80, 94], "draft": 8, "rethink": 8, "iter": [8, 14, 15, 23, 28, 42, 47, 60, 78, 79, 80, 88], "thousand": [8, 25], "inde": [8, 10, 14, 19, 20, 29, 35, 45, 47, 58, 62, 64, 65, 67, 73, 85, 92], "notabl": [8, 9, 49], "recip": [8, 16], "nutshel": 8, "made": [8, 14, 17, 19, 21, 40, 44, 46, 55, 77, 78, 79, 81, 85, 92, 94, 95], "main": [8, 9, 16, 24, 41, 47, 58, 62, 63, 66, 67, 77], "ingenu": 8, "fact_aux": [8, 77], "fact_tr": [8, 19], "exercis": [8, 13, 14, 23, 55, 94], "suffer": [8, 64], "50": [8, 30, 49, 78], "3258495067890909184": 8, "hopefulli": [8, 17, 68, 79, 86, 95], "along": [8, 9, 13, 14, 17, 19, 20, 25, 33, 41, 45, 48, 51, 64, 66, 71, 77, 83, 94, 95], "zfact_aux": 8, "pred": [8, 31], "mul": [8, 78], "zfact_tr": 8, "of_int": [8, 78], "30414093201713378043612608166064768844377641568960512000000000000": 8, "load": [8, 20, 40, 41, 42, 47, 50, 65, 66, 76, 78, 94], "symbol": [8, 12, 42, 65, 66, 68, 69, 92], "comparison": [8, 14, 22, 41, 49, 77, 79, 80, 94], "predecessor": 8, "subtract": [8, 45, 55, 65], "dive": [9, 50, 56, 61, 66, 85], "talk": [9, 16, 18, 30, 64, 66, 82, 85, 92], "secondari": 9, "skill": [9, 65, 70], "five": [9, 28, 40, 63, 94], "essenti": [9, 13, 17, 22, 33, 37, 42, 46, 47, 54, 61, 79, 80, 82, 83, 91, 92, 95], "textual": [9, 87], "whitespac": [9, 12, 65, 66, 85], "annoi": [9, 10, 16, 81, 87], "accept": [9, 12, 18, 45, 64, 66, 69, 85, 87], "wish": [9, 95], "unusu": [9, 27, 92], "apl": 9, "keyboard": [9, 47, 62, 69, 95], "tab": [9, 41, 42, 66, 95], "newlin": [9, 10, 47], "speak": [9, 40, 67, 75], "plural": 9, "singular": 9, "legal": [9, 25, 35, 39, 62, 77, 79, 92], "challeng": [9, 12, 14, 17, 23, 41, 47, 60, 61, 64, 77, 80, 94], "hurdl": 9, "overcom": 9, "approach": [9, 13, 14, 16, 18, 19, 23, 24, 47, 64, 70, 71], "fluent": 9, "mode": [9, 41, 70], "paradigm": [9, 11, 47], "bundl": [9, 72, 80], "lazi": [9, 41, 43, 44, 50], "virtu": [9, 79, 84], "core": [9, 22, 25, 27, 45, 47, 60, 63, 64, 74, 79, 83], "unabl": [9, 45], "integr": 9, "appar": [9, 18, 42, 58, 72, 76, 86, 95], "exposur": [9, 75], "ounit": [9, 13, 15, 20, 28, 29, 80, 87], "framework": [9, 29, 30, 33, 47, 80], "junit": [9, 33], "hunit": [9, 33], "besid": [9, 56, 65, 95], "abil": [9, 16, 17, 20, 21, 36, 47, 57, 74, 76, 79, 81], "print_char": 10, "print_float": 10, "bae": [10, 47, 94], "undon": 10, "boilerpl": [10, 45], "discard": [10, 33, 79], "depend": [10, 13, 14, 21, 25, 28, 33, 40, 42, 45, 47, 48, 57, 64, 66, 67, 70, 74, 80, 82, 85, 92, 95], "surround": [10, 30, 64, 65, 85], "warn": [10, 12, 21, 25, 27, 30, 63, 66, 92, 95], "truli": [10, 20, 28, 34, 48, 69], "intent": [10, 15, 16, 17, 23], "statist": [10, 20, 41, 42], "print_stat": 10, "num": 10, "print_newlin": [10, 58], "84": [10, 30], "39": [10, 30, 35, 81, 92], "shorten": 10, "println": [10, 45], "inherit": [10, 17, 80, 81, 83], "fortran": [10, 71, 85], "invent": [10, 13, 15, 17, 19, 32, 33, 42, 44, 45, 47, 48, 64, 67, 69, 78, 79, 80, 85, 92], "plain": [10, 25], "dozen": 10, "apart": [10, 30, 73], "content": [10, 32, 41, 45, 46, 47, 58, 70, 76, 77, 79, 87, 88, 91, 92, 94, 95], "flush": 10, "sit": [10, 64], "detect": [10, 12, 15, 18, 24, 30, 64, 67, 74, 95], "34": [10, 28, 30, 49, 80, 81], "37": [10, 30, 81], "sprintf": [10, 45, 78], "collect": [10, 13, 18, 20, 25, 37, 45, 51, 54, 58, 63, 64, 66, 71, 74, 80, 85], "string_of_stat": 10, "throughout": [11, 21, 25, 56, 64, 67, 68, 74, 77, 94], "deepen": 11, "pipelin": [11, 30, 53, 56, 60, 79, 85], "caml": [11, 36, 50, 60, 73, 75, 86, 93], "music": [11, 47], "javascript": [11, 47, 64], "cute": 11, "anim": [11, 64], "disnei": 11, "song": [11, 70], "interfac": [12, 14, 15, 18, 20, 21, 41, 42, 45, 46, 47, 74, 76, 77, 78, 79, 80, 81, 82, 83, 86, 91, 92, 94, 95], "jshell": [12, 54, 58, 77], "handi": 12, "reliant": 12, "repl": 12, "eval": [12, 14, 15, 95], "exit": [12, 20, 41, 47, 65], "kei": [12, 15, 20, 24, 26, 28, 41, 42, 44, 46, 47, 48, 50, 53, 62, 74, 78, 79, 82, 85], "dissect": 12, "infrastructur": [12, 47], "translat": [12, 14, 65, 67], "pdf": [12, 75, 94], "indent": [12, 47, 63, 77], "view": [12, 18, 22, 47, 77, 79, 82, 85, 94, 95], "md": 12, "myst": [12, 94], "markdown": [12, 94], "stai": [12, 40, 48], "dear": [12, 78], "arrow": [12, 64, 67, 80, 91, 95], "visual": [12, 13, 18, 47, 94], "amen": 12, "placehold": [12, 92], "unprint": [12, 77], "vocabulari": [12, 22, 24], "strategi": [12, 42, 49, 63, 65, 67], "mycod": 12, "unbound": [12, 16, 33, 35, 49, 64, 65, 67, 69, 77, 80, 81, 85, 87], "incr": [12, 47, 67, 87, 92], "bug": [12, 13, 15, 16, 18, 19, 21, 23, 24, 30, 32, 33, 47, 67, 74], "tempt": [12, 16, 17, 20, 24, 58, 64, 74, 76, 80, 85], "resist": 12, "temptat": 12, "stale": 12, "infeas": 13, "plu": [13, 15, 22, 40, 63, 64, 66, 69, 78], "sig": [13, 14, 15, 18, 20, 41, 42, 44, 45, 46, 47, 49, 69, 76, 77, 78, 79, 80, 81, 84, 85, 87, 91], "r1": [13, 78, 92], "r2": [13, 78, 92], "struct": [13, 14, 18, 29, 35, 41, 42, 44, 45, 46, 47, 49, 69, 76, 77, 78, 79, 80, 81, 84, 85, 87, 91], "af": [13, 14, 15, 18, 24, 42, 46, 49, 89, 91], "ri": [13, 14, 15, 18, 24, 41, 42, 47, 49, 89, 91, 92], "q1": [13, 40], "q2": [13, 40], "252": [13, 30], "nanosecond": 13, "59": [13, 30], "carefulli": [13, 16, 18, 24, 30, 33, 44, 47, 48, 73], "convinc": [13, 17, 24, 30, 48, 82], "correctli": [13, 18, 19, 20, 24, 27, 28, 42, 45, 47, 67, 92, 95], "126": [13, 30], "across": [13, 42, 49, 52, 74, 82], "whole": [13, 47, 48, 49, 61, 64, 95], "compris": 13, "fashion": [13, 47], "achiev": [13, 15, 30, 40, 42, 46, 48, 51, 58, 74, 78, 79, 80, 81, 86], "coverag": [13, 15, 23], "surfac": [13, 95], "boundari": [13, 21, 23], "corner": [13, 18, 25, 27], "elicit": 13, "path": [13, 18, 23, 28, 41, 46, 48, 95], "min_int": [13, 32], "max_int": 13, "quadrant": [13, 28], "evenli": 13, "advertis": 13, "list_max": [13, 28, 32], "spec": [13, 15, 16, 18, 21, 24], "realiz": [13, 16, 17, 25, 72], "arrang": [13, 42, 62], "ascend": 13, "accuraci": [13, 16], "signific": [13, 18, 64], "digit": [13, 66, 70], "consum": [13, 23, 94], "mem": [13, 14, 15, 18, 37, 48, 78, 79, 80, 81], "iff": [13, 48], "unchang": [13, 19, 25, 34, 42, 46, 48, 62, 67, 78, 79, 91], "increas": [13, 24, 28, 30, 40, 41, 44, 48, 57, 78], "white": [13, 66, 91], "condition": [13, 56], "unexecut": 13, "explor": [13, 30, 62, 95], "max3": 13, "trigger": [13, 15, 23, 24, 42], "absenc": [13, 19, 37, 74, 85], "against": [13, 22, 25, 27, 28, 30, 34, 45, 49, 51, 55, 58, 63, 64, 66, 67], "invari": [13, 15, 23, 28, 41, 44, 47, 48, 76, 78, 85], "rep": [13, 18, 23, 41, 42, 46], "advantag": [13, 16, 18, 49, 55, 77], "parallel": [13, 47, 50], "rewritten": [13, 62, 85], "caught": [13, 18, 74], "disadvantag": [13, 16], "high": [13, 14, 16, 20, 41, 42, 47, 58, 61, 64, 65, 66, 77], "aid": [13, 95], "assess": 13, "bisect_ppx": [13, 95], "instrument": 13, "mainli": 13, "ppx": 13, "report": [13, 69, 74, 94], "got": [13, 14, 17, 33, 47, 49, 66], "merg": [13, 64, 80], "test_sort": 13, "skeleton": 13, "dune": [13, 20, 33, 41, 47, 66, 76, 78], "ounit2": [13, 20, 27, 33, 87, 95], "backend": 13, "bisectnnnn": 13, "newli": [13, 35, 42, 80, 87, 92], "_coverag": 13, "percent": 13, "uncom": 13, "delet": [13, 33, 41, 48], "tradeoff": [13, 40, 42, 58, 59, 79], "nondeterminist": [13, 47, 50, 92, 93], "affect": [13, 41, 42, 64, 72, 74, 79, 92], "runner": 13, "sequenti": [13, 45, 47, 50, 64], "ceas": 13, "tackl": 14, "proof": [14, 17, 19, 22, 23, 24, 30, 47, 48, 73], "analog": [14, 46, 47, 48, 49, 65, 77, 83, 85, 89], "complex": [14, 16, 18, 24, 38, 40, 47, 50, 74, 78, 79, 82, 83], "effici": [14, 15, 18, 19, 26, 28, 30, 31, 40, 41, 42, 43, 46, 48, 49, 50, 53, 54, 56, 58, 59, 62, 64, 67, 78, 79, 90, 92, 93], "map": [14, 15, 18, 25, 26, 28, 29, 35, 39, 41, 43, 45, 49, 50, 53, 54, 55, 56, 59, 60, 62, 64, 65, 69, 74, 78, 85, 86, 88, 89], "balanc": [14, 16, 21, 53, 64, 66, 70, 79, 80], "binari": [14, 19, 22, 28, 36, 37, 41, 42, 44, 51, 62, 64, 65, 66, 67, 69, 78, 79, 80], "pursu": [14, 84], "algebra": [14, 19, 22, 23, 29, 36, 38, 45, 48, 60, 64, 74, 78, 79], "school": [14, 64], "is_empti": [14, 15, 76, 77, 79, 80, 85], "peek": [14, 33, 45, 76, 77, 79, 80, 85, 91], "cautious": 14, "relax": [14, 15, 41, 48, 66, 79, 92], "prohibit": 14, "alon": [14, 67, 95], "chosen": [14, 20, 67, 85], "liststack": [14, 76, 77, 79, 80, 85], "hd": [14, 27, 28, 30, 41, 49], "con": [14, 15, 18, 25, 26, 30, 36, 37, 40, 41, 42, 46, 49, 51, 55, 58, 76, 79, 80, 81], "tl": [14, 28, 30, 41, 49, 79], "front": [14, 17, 24, 26, 39, 58, 65, 68, 79, 87, 92, 95], "enq": 14, "deq": 14, "3a": 14, "3b": 14, "4a": 14, "4b": 14, "obvious": [14, 15, 16, 19, 49, 62, 66, 78, 92], "enqueu": [14, 40, 47, 78, 79], "dequeu": [14, 40, 78, 79], "listqueu": [14, 78, 79], "lemma": [14, 15, 19, 22, 48], "xs": [14, 22, 30, 33], "ys": [14, 22], "qed": [14, 19, 22], "batchedqueu": [14, 78, 79], "rev": [14, 15, 20, 28, 49, 54, 55, 58, 79], "abstractli": [14, 18, 42, 47, 82], "adopt": [14, 19, 47, 57, 64], "distribut": [14, 15, 41, 42, 48, 66, 74, 95], "unstuck": 14, "canon": [14, 23], "categor": [14, 15], "queri": [14, 15, 23, 42, 47], "subcas": [14, 64], "6a": 14, "6b": 14, "game": [15, 47, 49], "deviou": [15, 16], "num_vowel": 15, "is_sort": [15, 20], "is_prim": 15, "is_palindrom": 15, "second_largest": 15, "depth": [15, 28, 51], "c_n": 15, "dotsb": [15, 40], "c_0": 15, "dens": 15, "coeffici": 15, "incomplet": [15, 16], "3x": [15, 40], "subvert": 15, "impl": [15, 81], "interv": [15, 42], "rep_ok": [15, 18], "to_str": [15, 18, 24, 78, 84], "install_print": [15, 77, 78, 84], "dictionari": [15, 18, 26, 29, 35, 36, 42, 50, 53, 62, 65, 67, 79, 80], "k": [15, 19, 22, 26, 40, 41, 42, 46, 79], "heavi": [15, 77], "box": [15, 19, 23, 32, 41, 45, 47], "listset": [15, 18, 79, 80, 81], "glass": [15, 19, 23], "bisect": 15, "uniqlistset": [15, 18, 79, 80, 81], "qcheck": [15, 95], "gen": [15, 20, 67], "generate1": [15, 20], "length": [15, 16, 18, 20, 25, 28, 30, 40, 42, 44, 46, 48, 49, 53, 55, 64, 74, 77, 78, 79, 85, 88], "is_even": [15, 20], "divisor": [15, 45, 78], "buggi": [15, 24, 25, 33], "odd_divisor": 15, "exceed": 15, "smallest": [15, 24, 48], "avg": 15, "h1": [15, 20, 28, 49], "h2": [15, 20, 28, 44, 49], "exp": [15, 41], "induct": [15, 23, 30, 36, 48, 67, 69], "fibi": 15, "prev": 15, "curr": 15, "expsq": 15, "strong": [15, 79], "redo": [15, 64, 95], "mult": [15, 66, 67, 69], "append": [15, 22, 30, 36, 53, 58, 66, 79], "nil": [15, 25, 30, 36, 37, 46, 49, 51], "dist": 15, "revers": [15, 16, 20, 30, 40, 45, 54, 55, 58, 79, 87], "lst1": [15, 18, 22, 30, 54, 58, 92], "lst2": [15, 18, 22, 30, 54, 58, 92], "involut": [15, 20, 22], "reflect": [15, 22, 64, 71, 77, 81, 87], "leaf": [15, 22, 28, 36, 37, 41, 48, 51], "fold": [15, 18, 41, 53, 56, 60, 80, 88], "fold_left": [15, 16, 18, 22, 42, 51, 53, 55, 59, 88, 89], "fold_right": [15, 22, 51, 53, 55, 80, 81, 89], "commut": [15, 22, 23, 55], "concat": [15, 18, 28, 55], "concat_l": 15, "concat_r": 15, "proposit": [15, 67], "equat": [15, 22, 23, 45, 56, 64, 84], "strikingli": 15, "bag": 15, "multiset": 15, "blend": [15, 65, 67, 71], "signatur": [15, 18, 20, 41, 47, 69, 76, 77, 78, 80, 81, 83, 84, 85, 86], "decreas": [15, 20, 28, 40], "began": [16, 70], "audienc": [16, 23, 76], "verbos": [16, 58, 64, 76, 85], "commun": [16, 17, 23, 47, 72, 73, 94], "ingredi": 16, "forget": [16, 25, 27, 28, 30, 47, 65, 67, 95], "sqr": 16, "accur": [16, 85, 87], "Its": [16, 18, 30, 42, 47, 55, 60, 64, 80, 85], "wors": [16, 45, 48, 59, 81, 95], "0e": 16, "verbiag": 16, "plow": 16, "struck": 16, "breviti": 16, "partial": [16, 18, 19, 23, 25, 30, 45, 52, 55, 58, 64, 67, 81], "domain": [16, 18, 56, 65, 74], "straightforward": [16, 85, 94], "legitim": 16, "bad": [16, 18, 32, 40, 41, 42, 48, 59, 79, 81, 90], "establish": [16, 17, 23, 24, 44, 48, 69, 90], "contract": [16, 21, 82], "burden": [16, 74], "onto": [16, 30, 40, 42, 46, 49, 66, 77, 79, 85], "throw": [16, 44, 48, 55, 92], "constraint": [16, 18, 25, 42, 48, 63, 68, 86], "improperli": 16, "misbehav": 16, "recommend": [16, 75, 95], "tend": [16, 18, 24, 42, 67], "encourag": 16, "wrap": [16, 32, 40, 41, 45, 49], "complain": [16, 85], "silent": 16, "innumer": 16, "secur": [16, 20, 42, 74, 92], "met": [16, 21], "avoid": [16, 24, 25, 30, 44, 45, 47, 48, 56, 63, 66, 68, 72, 77, 79, 81, 84, 85], "necess": 16, "distract": [16, 66], "illustr": [16, 40, 49, 77, 85, 92], "meet": [16, 22, 85], "refin": [16, 24], "settl": 16, "nth": [16, 28, 35, 41, 44, 49, 53], "her": [16, 58, 85], "advoc": [16, 24], "ruthless": 16, "561": 16, "quak": 16, "arena": 16, "engin": [16, 20, 23, 24, 64, 67, 80, 81, 94, 96], "shovel": 16, "wield": 16, "interspers": [16, 40], "necessari": [16, 18, 21, 30, 40, 41, 45, 55, 64, 65, 67, 79, 80, 95], "pictur": 16, "paragraph": [16, 47, 79, 94, 95], "mark": [16, 48, 63, 65, 66, 80], "brief": [16, 20, 65, 85], "number_of_zero": 16, "the_list": 16, "list_el": 16, "emb": [16, 65], "is0": 16, "zs": [16, 22], "i_count": 16, "hover": [16, 95], "hope": [17, 51], "thought": [17, 27, 56], "bore": 17, "altogeth": [17, 47], "postpon": 17, "matur": 17, "ground": 17, "oppos": [17, 22], "head": [17, 21, 25, 28, 30, 32, 36, 40, 41, 49, 51, 54, 55, 58, 67, 79, 82], "er": 17, "cognit": 17, "importantli": 17, "capsul": 17, "unreach": 17, "archeolog": 17, "evid": [17, 19, 22, 23, 33], "unintellig": 17, "empathi": 17, "commit": 17, "distant": 17, "fleet": 17, "somedai": [17, 58, 80], "todai": [17, 70, 71], "clue": [17, 35], "breadcrumb": 17, "scientist": [17, 24, 47], "demand": [17, 49, 54], "arrog": 17, "humil": 17, "beings": 17, "amazingli": [17, 29, 55], "delud": 17, "echo": [17, 47, 70, 78], "chamber": 17, "media": 17, "demonstr": [17, 31, 40, 41, 49, 63, 79, 92], "ten": 17, "absolut": [17, 19, 24, 40, 41, 67], "weren": 17, "clever": [17, 47, 48, 49, 58, 79], "replic": [17, 18], "crucial": [17, 18, 23, 33, 40, 74, 79, 80, 82], "captur": [17, 46, 63, 68], "furthermor": [17, 64], "craft": 17, "meanwhil": [17, 47, 58, 65], "critic": [17, 21, 24, 26, 95], "live": [17, 81, 94, 95], "intern": [18, 20, 44, 47, 55, 68, 76, 77, 96], "relev": [18, 66, 75], "inappropri": 18, "risk": 18, "evolv": [18, 47, 73, 74, 85], "sync": [18, 95], "fall": [18, 42, 70, 76, 94, 96], "categori": [18, 45, 51, 80], "aris": [18, 48, 78], "pure": [18, 19, 40, 45, 47, 48, 50, 79, 86, 90, 93], "signal": 18, "item": [18, 37, 77, 80, 81, 84, 85], "unord": 18, "member": [18, 37, 48, 83, 87], "rem": 18, "minu": [18, 35, 40, 64, 66, 78], "cardin": [18, 35, 80], "s1": [18, 45, 47, 64, 80, 85], "s2": [18, 45, 47, 64, 85], "inter": [18, 30], "simplic": [18, 79], "duplic": [18, 20, 41, 42, 45, 58, 66, 76, 78, 79, 80, 81], "filter": [18, 30, 41, 42, 53, 55, 56, 60, 80], "sort_uniq": [18, 42, 53, 79, 80, 81], "judg": [18, 30, 50], "rest": [18, 30, 33, 44, 45, 47, 62, 64, 65, 77, 79, 80, 81, 82, 91, 95], "lack": [18, 19, 77], "act": [18, 31], "ideal": 18, "invis": [18, 64], "belong": [18, 28, 76], "a1": [18, 41, 46, 49, 53, 55, 64], "b1": [18, 41, 49], "bm": 18, "reinforc": 18, "redund": [18, 30, 33, 44, 65], "hypothet": [18, 45, 85], "readabl": [18, 55, 69, 79, 85], "conveni": [18, 27, 30, 48, 49, 55, 64, 65, 69, 74, 79, 80], "queue": [18, 43, 58, 78], "heap": [18, 47], "string_of_v": 18, "uniq": 18, "interior": [18, 48], "to_list": [18, 79, 91, 92], "formatt": [18, 77, 78, 84], "encapsul": [18, 45, 74, 78, 83, 84, 86], "usabl": [18, 77, 85], "programmat": 18, "obtain": [18, 41, 48, 49, 63], "undefin": [18, 31], "preserv": [18, 48, 65, 68, 69, 80], "isol": [18, 82], "provabl": [18, 65], "incom": 18, "convent": [18, 30, 77, 85], "outsid": [18, 41, 44, 64, 77, 81, 85, 87, 92], "saniti": 18, "copiou": 18, "creation": [18, 48, 88, 92], "compare_length": 18, "linearithm": [18, 53, 79, 81], "destroi": [18, 42], "previous": [18, 45, 51, 56, 64, 69, 77, 80, 92], "appropri": [18, 19, 41, 42, 51, 80, 85], "macro": 18, "reinstat": 18, "rep_ok_expens": 18, "codebas": 18, "noassert": 18, "disabl": [18, 47, 95], "portion": 18, "assur": [19, 24], "presenc": [19, 30], "edsger": 19, "w": [19, 25, 63, 67, 68, 92], "dijkstra": [19, 23], "useless": [19, 21], "premis": 19, "straightforwardli": 19, "41": [19, 30, 85, 92], "token": [19, 63, 65, 66, 68, 96], "axiom": [19, 78], "extension": [19, 23], "polymorph": [19, 28, 36, 68, 74, 77, 85, 92], "refus": 19, "compos": [19, 45, 47, 56, 60, 82], "composit": [19, 35, 42, 47, 50, 53, 64], "sumto": 19, "summat": [19, 35, 41, 55], "claim": [19, 22, 28, 47, 73, 79, 85], "ih": [19, 22], "sumto_clos": 19, "corollari": 19, "se": 19, "elid": [19, 20, 55], "facti": [19, 22], "while": [19, 20, 42, 43, 46, 47, 48, 72, 73, 77, 80, 82, 83, 88, 89, 94, 95], "share": [19, 30, 36, 46, 47, 55, 76, 79, 80, 84, 86, 94, 95], "decrement": [19, 45, 88, 92], "unfortun": [19, 20, 42, 45, 49, 67, 76, 79, 80], "neither": [19, 45, 48, 51, 55, 79, 90], "abort": [19, 78], "astrai": 19, "moment": [19, 40, 85], "f_r": 19, "op": [19, 22, 45, 55, 63], "meant": [19, 20, 30, 62, 67, 69, 77, 91, 92, 95], "f_i": 19, "f_tr": 19, "fact_i": 19, "held": [19, 48], "sumto_r": 19, "sumto_i": 19, "sumto_tr": 19, "thank": [19, 55], "halt": [19, 41], "smart": 19, "heurist": 19, "despit": [19, 46, 79, 92, 95], "x0": 19, "x3": [19, 67], "finit": [19, 25, 41, 49, 65, 66, 88], "descent": 19, "bottom": [19, 48, 59, 77, 80, 81, 95], "hit": [19, 34, 35], "reach": [19, 22, 27, 40, 41, 42, 46, 47, 49, 63, 67, 69, 89], "ack": 19, "ackermann": 19, "famou": [19, 47], "lexicograph": 19, "fuzz": 20, "feed": 20, "behav": [20, 24, 41, 45, 47, 62, 63, 64, 77, 79, 86, 91], "believ": [20, 72, 74], "crash": [20, 92], "encrypt": [20, 45], "decrypt": [20, 45], "enigma": 20, "incred": [20, 72], "vulner": [20, 92], "digress": 20, "facil": 20, "unpredict": 20, "pseudorandom": [20, 41], "discern": [20, 69], "determinist": [20, 24, 50, 66, 92, 93], "seed": 20, "pseudo": 20, "pseud\u0113": 20, "prng": 20, "phrase": [20, 56, 78, 92], "44": [20, 28, 30], "85": [20, 30, 92], "82": [20, 30], "Not": [20, 40, 44, 46, 91, 92], "eh": 20, "cryptographi": 20, "simul": [20, 41, 67, 80], "Their": [20, 46, 48, 88], "get_stat": 20, "request": [20, 47, 49, 79, 87], "self_init": 20, "make_self_init": 20, "sampl": [20, 24, 89], "dev": 20, "urandom": 20, "96": [20, 30], "51": [20, 30], "rand": 20, "suppli": [20, 77, 85], "small_int": 20, "int_rang": 20, "list_siz": 20, "small_str": 20, "randomli": [20, 42, 48, 95], "characterist": [20, 30, 56], "pseudorandomli": 20, "shrink": 20, "stat": [20, 41, 42], "qcheck2": 20, "abstr": [20, 42, 47, 76, 77, 79, 80, 84], "qcheck_runn": 20, "run_test": 20, "2k": 20, "65051295": 20, "1mfailur": 20, "0m": 20, "anon_test_1": 20, "printer": [20, 33, 77, 78, 84], "ran": [20, 33, 95], "run_tests_main": 20, "run_test_tt_main": [20, 27, 33], "to_ounit2_test": 20, "told": 20, "properli": [20, 63, 85], "privat": [20, 47, 77, 81, 86, 94], "luckili": 20, "list_of_s": 20, "my_test": 20, "77": [20, 30], "double_check": 20, "1msuccess": 20, "drawn": 20, "bring": [20, 33, 40, 41, 85], "rev_involut": 20, "uniformli": [20, 42], "nat": [20, 22, 31, 41, 49], "bias": 20, "small_nat": 20, "anon_test_4": 20, "mli": [21, 76, 78, 80], "spell": [21, 49], "blame": [21, 82], "misus": [21, 42, 76], "deliv": [21, 47], "feasibl": 21, "team": [21, 24, 74, 82, 83, 94], "everyon": [21, 47, 82], "agre": [21, 67, 85], "slip": 21, "crack": 21, "conflict": 21, "suffici": [21, 42], "research": [21, 24, 64, 75, 80], "misunderstand": 21, "decis": [21, 51, 85], "obsolet": 21, "modular": [21, 70, 83, 86], "hide": [21, 47, 50, 77, 82, 83, 86, 92], "disclos": 21, "modifi": [21, 23, 28, 33, 40, 44, 48, 77, 78, 81, 86, 89, 91, 92, 94], "reimplement": [21, 54], "enhanc": 21, "bottleneck": 21, "barrier": 21, "vice": [21, 31, 38, 42, 52, 85], "versa": [21, 31, 38, 42, 52, 85], "enforc": [21, 47, 82], "promot": [21, 51], "hung": 22, "mismatch": [22, 67, 69, 77, 81, 85], "successor": [22, 31, 91], "unari": [22, 65, 84], "decim": 22, "trivial": [22, 26, 33, 41, 45, 47, 64], "concept": [22, 47, 66, 67, 85], "inner": [22, 30, 45, 77, 85], "outer": [22, 30], "interchang": [22, 80], "resum": [22, 95], "restart": [22, 47, 87], "succeed": [22, 49, 55, 81], "wasn": [22, 92], "fluke": 22, "subtre": [22, 37, 41, 44, 48, 51, 78, 80], "ih1": 22, "ih2": 22, "mirror": 22, "imag": 22, "styliz": 22, "expr": [22, 63, 66, 67, 69], "uop": 22, "uminu": 22, "bop": [22, 62, 64, 66, 67, 69], "bplu": 22, "bminu": 22, "bleq": 22, "unop": 22, "binop": [22, 66, 67, 69], "strike": [22, 64], "adt": [22, 48], "organiz": 22, "methodolog": [23, 24], "complementari": [23, 47], "orthogon": [23, 67], "hoar": [23, 32], "toni": [23, 32], "weakest": [23, 48], "walkthrough": [23, 24], "diagram": [23, 28, 46], "minim": [23, 24], "ok": [23, 33, 34, 45, 77], "satisfact": 23, "barbara": [23, 70, 85], "liskov": [23, 70, 85], "john": [23, 50, 60, 66, 70], "guttag": [23, 70], "cousineau": 23, "michel": 23, "mauni": 23, "cambridg": [23, 50, 79], "1998": [23, 70], "paulson": 23, "1996": [23, 70], "richard": 23, "bird": 23, "2015": 23, "foundat": [23, 72, 86, 95], "volum": [23, 48], "benjamin": [23, 68, 86], "pierc": [23, 68, 86], "et": 23, "al": 23, "http": 23, "softwarefound": 23, "ci": 23, "upenn": 23, "edu": [23, 95], "robert": [23, 79, 86, 96], "mccloskei": 23, "www": 23, "scranton": 23, "mcclosk": 23, "se507": 23, "alg_specs_lec": 23, "theori": [23, 35, 45, 51, 56, 60, 62, 64, 66, 68, 72, 80], "shari": 23, "lawrenc": 23, "pfleeger": 23, "joann": 23, "atle": 23, "prentic": 23, "hall": 23, "kenneth": 23, "slonneg": 23, "barri": 23, "kurtz": 23, "addison": [23, 60], "weslei": [23, 60], "1995": [23, 71], "muffi": 23, "thoma": 23, "david": [23, 79], "watt": 23, "ehrig": 23, "mahr": 23, "springer": 23, "verlag": 23, "1985": 23, "treatment": [23, 68, 86], "inspir": [23, 40, 51, 67, 78], "indebt": [23, 56, 60], "materi": [23, 70, 94], "princeton": [23, 42], "co": [23, 70, 95], "326": 23, "walker": 23, "confid": 24, "assist": [24, 60], "coder": 24, "hurt": 24, "drive": 24, "prepar": [24, 67, 71], "beforehand": [24, 95], "qualiti": 24, "blameless": 24, "role": [24, 82], "navig": [24, 47, 95], "devil": 24, "clearer": [24, 45, 47, 59, 81], "shorter": [24, 30, 42, 58, 67, 77], "partner": 24, "trade": 24, "conduct": 24, "fagan": 24, "1976": 24, "thorough": 24, "75": [24, 30, 41, 42], "inspector": 24, "li": [24, 74], "valuabl": 24, "concurr": [24, 41, 43, 50, 74], "subtl": [24, 35, 48, 49, 58], "increasingli": 24, "emul": 24, "significantli": [24, 60, 66], "cheaper": 24, "wander": 24, "discoveri": [24, 64, 75], "inevit": [24, 76], "refut": 24, "crux": 24, "experiment": 24, "afraid": 24, "invalu": 24, "slap": 24, "danger": [24, 92, 95], "sun": [25, 35, 39], "mon": [25, 34, 35, 39], "tue": [25, 39], "wed": [25, 39], "fri": [25, 39], "sat": [25, 39], "ptype": [25, 28, 34, 35, 39], "tnormal": [25, 34, 35, 39], "tfire": [25, 34, 35, 39], "twater": [25, 34, 35, 39], "peff": [25, 39], "enorm": [25, 39], "enotveri": [25, 39], "esup": [25, 39], "shape": [25, 26, 28, 30, 48, 63, 74], "center": [25, 48], "rect": 25, "rectangl": [25, 26], "pi": [25, 30, 34, 35, 76, 79, 85], "y2": 25, "underli": [25, 35, 40, 42, 47, 55, 66, 67, 80, 81, 85, 94, 95], "tupl": [25, 29, 30, 36, 52, 63, 67, 88], "string_or_int": 25, "string_or_int_list": 25, "lst_sum": 25, "discrimin": 25, "double_right": 25, "c1": [25, 39, 44, 49, 64], "cn": [25, 39], "ti": [25, 34, 35, 48, 70], "color": [25, 41, 48, 91, 95], "blue": [25, 85], "string_of_color": 25, "green": [25, 85], "sudden": 25, "blind": 25, "wildcard": [25, 30, 36, 63], "robust": [25, 30, 55, 79], "life": [25, 63, 71], "alert": 25, "intlist": 25, "lst3": [25, 92], "lst123": 25, "mylist": [25, 37, 49, 51], "synonym": [25, 28, 36, 41, 45, 78, 80, 81], "cyclic": [25, 92], "circular": 25, "lst_hi": 25, "parametr": [25, 36, 64, 74], "perfectli": [25, 64, 85], "constrain": [25, 84], "occasion": [25, 40], "infti": 25, "fin_or_inf": 25, "infin": 25, "downsid": [25, 59], "backquot": 25, "neginfin": 25, "steer": 25, "nonagon": 26, "icosagon": 26, "bother": [26, 64, 79], "assoc": [26, 28, 42, 69, 79], "assoc_opt": [26, 42], "exn": [27, 28, 41, 47], "catch": [27, 32, 33, 36, 41, 47], "pn": [27, 30, 34, 35, 63], "pun": [27, 47], "packet": [27, 36], "oop": [27, 49, 85], "subexpress": [27, 35, 55, 58, 63, 64, 67, 69], "offici": 27, "nuanc": 27, "stipul": [27, 45, 76], "forgiven": 27, "propag": [27, 45, 47], "match_failur": [27, 30, 34], "p3": 27, "p4": 27, "assert_rais": 27, "succe": [27, 30, 33, 34, 50, 65, 67, 80, 87, 94], "thunk": [27, 43, 49, 50], "suspend": [27, 43, 49], "delai": [27, 41, 47, 49, 50, 64, 78, 85], "typecheck": [27, 69], "fifth": [28, 66, 95], "any_zero": 28, "drop": [28, 49, 64, 94], "revis": [28, 33, 37, 45, 63, 64, 70, 77], "unimod": 28, "is_unimod": 28, "monoton": 28, "segment": 28, "powerset": 28, "print_int_list": 28, "fill": [28, 41, 42, 44, 45, 47, 63, 78, 89], "first_nam": 28, "last_nam": 28, "gpa": [28, 89], "pokerecord": 28, "pok\u00e9mon": [28, 34, 39], "poketyp": 28, "fire": 28, "water": 28, "pokemon": [28, 34], "hp": [28, 34, 35], "charizard": 28, "78": [28, 30], "squirtl": 28, "safe_hd": 28, "safe_tl": 28, "pokefun": 28, "max_hp": 28, "tripl": [28, 34, 35, 36], "2013": [28, 70], "era": [28, 72], "is_befor": 28, "januari": 28, "februari": 28, "leap": 28, "earliest": [28, 30, 70], "card": 28, "deck": 28, "rank": 28, "jack": 28, "queen": 28, "king": 28, "ac": [28, 85], "club": 28, "diamond": 28, "seven": 28, "spade": 28, "borrow": 28, "wikipedia": 28, "lie": 28, "axi": [28, 48], "quad": [28, 40, 53, 56], "iii": [28, 95], "iv": 28, "po": 28, "quadrant_when": 28, "same_shap": 28, "list_max_str": 28, "is_bst": 28, "visit": [28, 37], "enum": [29, 39], "paus": [29, 45, 46, 49, 64], "couldn": [29, 77, 80, 90], "null": [29, 32, 92], "behind": [29, 45, 49, 62, 71, 74, 77, 94], "singli": [30, 35, 36, 58, 79], "statu": [30, 85], "mainstream": [30, 57, 71, 72, 80, 94], "elt": [30, 55], "prepend": [30, 36, 49], "truct": 30, "verb": 30, "sweeter": 30, "sweet": [30, 58], "desugar": [30, 35, 36, 63, 67, 68], "consequ": [30, 64], "ei": [30, 35, 88], "video": [30, 35, 61, 87, 94, 96], "uh": 30, "fit": [30, 67], "inc_first": 30, "proportion": 30, "saw": [30, 41, 44, 45, 60, 64, 65, 76, 79, 80, 84, 85], "vertic": 30, "illeg": [30, 67], "expand": [30, 94], "b_1": 30, "b_2": 30, "cup": [30, 72], "b_i": [30, 35], "bigcup_i": [30, 35], "justif": 30, "ta": [30, 70], "tb": 30, "emit": 30, "defend": 30, "sorri": 30, "cell": [30, 46, 47, 92, 93, 94], "split": [30, 77, 79, 80], "jupyterbook": 30, "unus": [30, 42, 67], "latent": 30, "length_i": 30, "face": [30, 47, 76], "highlight": [30, 94, 95], "typeset": [30, 69, 94], "npl": 30, "caller": [30, 32], "sum_tr": 30, "sum_plus_acc": 30, "entail": 30, "post": [30, 76, 94], "medium": [30, 36], "overhead": [30, 65], "long_list": 30, "16": [30, 40, 41, 42, 44, 55, 63, 85, 86], "23": [30, 41], "26": [30, 33, 46, 80, 85], "35": [30, 80, 85], "40": [30, 40, 96], "45": [30, 33, 47], "46": 30, "47": [30, 77], "48": 30, "49": 30, "53": 30, "54": 30, "55": [30, 49], "56": 30, "57": 30, "58": 30, "61": 30, "66": [30, 77], "67": 30, "68": 30, "69": 30, "70": 30, "71": 30, "72": 30, "73": 30, "74": 30, "76": 30, "79": 30, "80": [30, 73, 95], "81": 30, "83": [30, 33], "86": 30, "87": 30, "88": 30, "90": [30, 66], "91": 30, "92": 30, "93": 30, "94": 30, "95": 30, "97": 30, "98": 30, "99": 30, "101": 30, "102": 30, "103": 30, "105": 30, "106": 30, "107": 30, "108": 30, "109": 30, "110": [30, 63, 67], "111": 30, "112": 30, "113": 30, "114": 30, "115": 30, "116": 30, "117": 30, "118": 30, "119": 30, "120": [30, 92], "121": 30, "122": 30, "124": 30, "125": 30, "127": 30, "128": 30, "129": 30, "130": 30, "131": 30, "132": 30, "133": 30, "134": 30, "135": 30, "136": 30, "137": [30, 80], "138": 30, "139": 30, "140": 30, "141": 30, "142": 30, "143": 30, "144": 30, "145": [30, 46], "146": 30, "147": [30, 46], "148": 30, "149": 30, "151": 30, "152": 30, "153": 30, "154": 30, "155": 30, "156": 30, "157": 30, "158": 30, "159": 30, "160": 30, "161": 30, "162": 30, "163": 30, "164": 30, "165": 30, "166": 30, "167": 30, "168": 30, "169": 30, "170": 30, "171": 30, "172": 30, "173": 30, "174": 30, "175": 30, "176": 30, "177": 30, "178": 30, "179": 30, "180": 30, "181": 30, "182": 30, "183": 30, "184": 30, "185": 30, "186": 30, "187": 30, "188": 30, "189": 30, "190": 30, "191": 30, "192": 30, "193": 30, "194": 30, "195": 30, "196": 30, "197": 30, "198": 30, "199": 30, "200": [30, 40, 94, 96], "201": 30, "202": 30, "203": 30, "204": 30, "205": 30, "206": 30, "207": 30, "208": 30, "209": 30, "210": 30, "211": [30, 70], "212": [30, 70], "213": 30, "214": 30, "215": 30, "216": 30, "217": 30, "218": 30, "219": 30, "220": 30, "221": 30, "222": 30, "223": 30, "224": 30, "225": 30, "226": 30, "227": 30, "228": 30, "229": 30, "230": 30, "231": 30, "232": 30, "233": 30, "234": 30, "235": 30, "236": 30, "237": 30, "238": 30, "239": 30, "240": 30, "241": 30, "242": 30, "243": 30, "244": 30, "245": 30, "246": 30, "247": 30, "248": 30, "249": 30, "251": 30, "253": 30, "254": 30, "255": 30, "256": 30, "257": 30, "258": 30, "259": 30, "260": 30, "261": 30, "262": 30, "263": 30, "264": 30, "265": 30, "266": 30, "267": 30, "268": 30, "269": 30, "270": 30, "271": 30, "272": 30, "273": 30, "274": 30, "275": 30, "276": 30, "277": 30, "278": 30, "279": 30, "280": 30, "281": 30, "282": 30, "283": 30, "284": 30, "285": 30, "286": 30, "287": 30, "288": 30, "289": 30, "290": 30, "291": 30, "292": 30, "293": 30, "294": 30, "295": 30, "296": 30, "297": 30, "298": 30, "len": 30, "succ": [31, 64], "versu": [31, 42, 58], "iszero": 31, "n1": 31, "n2": 31, "pred_n": 31, "int_of_nat": 31, "nat_of_int": 31, "sensibl": 32, "sir": 32, "billion": 32, "dollar": 32, "monad": [32, 41, 43, 47, 50], "unconstrain": 32, "habit": [32, 40, 95], "workflow": 33, "assert_equ": [33, 80], "singleton": [33, 80], "two_el": 33, "configur": [33, 42, 62, 68, 95], "project": [33, 42, 47, 66, 74], "disappear": [33, 47, 62], "fff": 33, "01": [33, 41], "ounitassert": 33, "assert_failur": 33, "src": [33, 66], "lib": 33, "advanc": [33, 35, 40, 42, 50, 64, 71, 74, 75, 77, 79, 80, 86, 88, 95], "ounitrunn": 33, "run_one_test": 33, "ail": 33, "onetwo": 33, "label": [33, 48, 63], "tester": 33, "make_sum_test": 33, "expected_output": 33, "ahead": [33, 42, 47, 64, 73, 95], "tdd": [33, 36], "exceedingli": 33, "sundai": 33, "mondai": [33, 40], "tuesdai": [33, 40], "wednesdai": [33, 40], "thursdai": [33, 40], "fridai": [33, 40], "saturdai": 33, "next_weekdai": 33, "weekdai": 33, "unimpl": 33, "tue_after_mon": 33, "weekend": 33, "wed_after_tu": 33, "thu_after_w": 33, "fri_after_thu": 33, "make_next_weekday_test": 33, "mon_after_fri": 33, "mon_after_sat": 33, "mon_after_sun": 33, "rare": [33, 40, 42, 64, 69, 79], "liter": [34, 47, 66, 77], "ch1": 34, "ch2": 34, "ch": 34, "uppercas": [34, 39, 85], "get_hp": 34, "thrd": 34, "quadrupl": [34, 56], "great": [35, 42, 45, 46, 55, 61, 62, 67, 71, 74, 75, 78, 79, 92, 93, 95], "pok\u00e9": 35, "namespac": [35, 83, 85, 86, 87], "charmand": 35, "f1": [35, 49], "fn": 35, "fi": 35, "hash": [35, 41, 43, 44, 48, 50, 79, 93], "g1": 35, "gn": 35, "gi": 35, "disjoint": 35, "sigma": 35, "cartesian": 35, "lightweight": [36, 47], "lengthi": [36, 85], "exploit": [36, 56, 81], "workhors": 36, "theoret": 36, "driven": 36, "child": [37, 48, 51], "sublist": [37, 54], "travers": [37, 41, 55, 79], "preorder": [37, 41, 51], "beautifulli": 37, "quadrat": [37, 40, 41, 58, 78, 81], "unbalanc": [37, 41], "preorder_lin": 37, "pre_acc": 37, "vector": [38, 53, 89], "exchang": 38, "get_x": 38, "int_of_dai": 39, "win": [39, 46, 55, 90], "attack": 39, "consider": [39, 64, 69, 85, 86], "rehash": [40, 41, 42], "defeat": 40, "excus": 40, "acknowledg": 40, "undertak": 40, "spread": [40, 74], "creativ": [40, 96], "sushi": 40, "ramen": 40, "amus": 40, "lunch": 40, "occas": [40, 79], "budget": 40, "financi": [40, 74], "pai": [40, 42, 46, 48, 55, 79, 95], "debt": 40, "t_1": [40, 64], "t_2": [40, 64], "t_n": 40, "resiz": [40, 41, 50, 88], "proactiv": 40, "hashtbl": [40, 41, 44, 48], "exce": [40, 41, 42], "bucket": [40, 41, 42, 48, 50], "8th": 40, "pretend": [40, 64, 69], "price": [40, 46, 79], "reinsert": 40, "incur": 40, "geometr": 40, "400": 40, "300": 40, "600": 40, "500": 40, "800": 40, "700": 40, "200k": 40, "200i": 40, "came": [40, 47, 64, 70, 72], "outbox": [40, 79], "becam": [40, 45, 58, 70, 94], "inbox": [40, 79], "prepai": 40, "bookkeep": 40, "conceptu": [40, 65, 80], "bank": 40, "deposit": 40, "credit": [40, 46, 50], "withdraw": 40, "energi": [40, 50], "transit": [40, 67], "offset": 40, "analyt": 40, "friend": [40, 47], "opinion": [40, 72], "qn": 40, "okasaki": [40, 50, 79, 86], "collis": [41, 42, 50, 85], "load_factor": [41, 42], "functori": [41, 42], "insensit": [41, 78], "obei": [41, 45, 78, 81], "hashedtyp": [41, 42], "hashcod": [41, 42], "probe": [41, 42, 50], "altern": [41, 49, 59], "databas": 41, "functor": [41, 42, 74, 78, 81, 83, 86], "bst": [41, 78], "bstset": 41, "inord": 41, "postord": 41, "rb": 41, "height": [41, 48, 80], "pow2": 41, "alphabet": [41, 51, 64, 80], "endless": 41, "unend": 41, "coin": 41, "flip": [41, 42], "predic": [41, 53, 54, 56], "interleav": [41, 47, 50, 67], "a2": [41, 46, 49, 53, 55, 64], "a3": [41, 46, 49], "b2": [41, 49], "b3": [41, 49], "sift": 41, "siev": 41, "eratosthen": 41, "cdot": [41, 58, 64, 79, 89], "e_term": 41, "1666": 41, "041666": 41, "stream": [41, 42, 49, 50, 54, 57, 58, 66, 67], "66666666666666652": 41, "70833333333333304": 41, "ep": 41, "toler": 41, "875": 41, "9375": 41, "96875": 41, "71666666666666634": 41, "investig": [41, 47, 48, 53, 78, 95], "distanc": 41, "mathit": [41, 69, 85], "epsilon": [41, 66], "lazier": 41, "lazy_t": [41, 49], "AND": 41, "lb1": 41, "lb2": 41, "lazysequ": [41, 49], "resolv": [41, 45, 47, 50, 64, 95], "lwt": [41, 50], "lwt_io": [41, 47], "printf": [41, 45, 47, 77, 78], "lwt_unix": 41, "sleep": [41, 47], "delay_then_print": 41, "timing2": 41, "_t1": 41, "printl": [41, 47], "_t2": 41, "_t3": 41, "timing3": 41, "timing4": 41, "join": [41, 47], "monitor": 41, "stdout": 41, "eof": [41, 66], "starter": [41, 63], "input_channel": [41, 47], "openfil": 41, "o_rdonli": 41, "fd": 41, "of_fd": 41, "ic": 41, "todo": 41, "read_lin": [41, 47, 92], "printlf": 41, "handler": [41, 47, 62], "end_of_fil": 41, "lwt_main": [41, 47], "mkfifo": 41, "cat": [41, 94], "opt": [41, 48, 79], "shown": [41, 46, 76, 94, 95], "fmap": [41, 79], "extmonad": 41, "unbox": [41, 45], "fmapjoinmonad": 41, "bindmonad": 41, "makemonad": 41, "listmonad": 41, "law": [41, 50], "wide": [42, 47, 60], "k_1": [42, 78], "v_1": [42, 78], "k_2": 42, "v_2": 42, "k_n": [42, 78], "v_n": [42, 78], "oo": [42, 77, 85], "charter": 42, "harvard": 42, "1636": 42, "1746": 42, "penn": 42, "1740": 42, "1865": 42, "brace": [42, 45, 95], "admittedli": [42, 45, 55, 56, 85], "of_list": [42, 80, 81], "slightli": [42, 44, 47, 55, 63, 91], "listmap": 42, "k1": [42, 79, 80], "k2": [42, 80], "kn": [42, 79], "offic": 42, "occup": 42, "459": 42, "fan": [42, 78], "460": 42, "gri": [42, 79], "461": 42, "clarkson": [42, 70, 96], "462": 42, "muhlberg": 42, "463": 42, "capac": 42, "directaddressmap": 42, "_in": 42, "bounds_": 42, "arraymap": 42, "v0": 42, "bs": 42, "ref": [42, 44, 46, 47, 64, 67, 88, 89, 93], "add_bind": 42, "iteri": [42, 89], "moreov": [42, 45, 46, 48, 49, 64, 67, 72, 77, 80, 85, 86], "tablemap": 42, "inject": [42, 50, 76], "collid": [42, 83], "scan": 42, "confusingli": 42, "stride": 42, "entri": [42, 44, 46, 53, 77, 78], "cluster": 42, "rapidli": [42, 47, 71], "circuitri": 42, "k11": 42, "v11": 42, "k12": 42, "v12": 42, "k21": 42, "v21": 42, "k22": 42, "v22": 42, "mbox": 42, "therebi": [42, 64, 80, 83], "restor": [42, 45, 48, 63, 65, 79], "halv": 42, "ruin": 42, "hashmap": 42, "insert_no_res": 42, "old_bucket": 42, "remove_assoc": [42, 79], "mem_assoc": 42, "new_capac": 42, "land": 42, "rehash_bind": 42, "rehash_bucket": 42, "resize_if_need": 42, "lf": 42, "remove_no_res": 42, "phone": [42, 47], "art": 42, "extrem": [42, 71], "sabotag": 42, "diffus": [42, 50], "trust": 42, "hash_c": 42, "hash_i": 42, "serial": [42, 50], "compress": 42, "forthcom": 42, "fortun": [42, 49], "sic": 42, "capabl": [42, 47, 86], "arbitrarili": [42, 48, 80], "predetermin": 42, "635296333": 42, "822221246": 42, "degrad": 42, "hash_param": 42, "_weak1": [42, 47, 64, 92], "_weak2": [42, 92], "num_bind": 42, "num_bucket": 42, "max_bucket_length": 42, "bucket_histogram": 42, "histogram": 42, "pump": 42, "sound": [42, 47, 64], "amort": [43, 48, 50, 79], "batch": [43, 78, 79], "cool": 43, "aptli": 43, "persist": [43, 48, 50, 74, 79, 86, 91], "organ": [43, 66, 76], "popular": [43, 45, 70, 74, 80, 94], "recomput": [44, 49], "speed": 44, "phi": [44, 79], "golden": 44, "ratio": [44, 78], "fibm": 44, "memo": 44, "f_mem": 44, "exclud": 44, "progress": [44, 46, 68, 69], "formerli": 44, "speedup": 44, "million": 44, "storag": 44, "benign": 44, "curri": [44, 64], "uncurri": [44, 52, 53], "memo_rec": 44, "fib_memo": 44, "compani": 44, "org": [44, 94], "chart": 44, "employe": 44, "invit": 44, "superior": 44, "weight": [44, 47, 94], "party_in": 44, "party_out": 44, "unmemo": 44, "optimum": 44, "infun": 44, "innam": 44, "outfun": 44, "outnam": 44, "lfun": 44, "lname": 44, "rfun": 44, "rname": 44, "substructur": 44, "charg": [44, 75], "linebreak": 44, "wlen": 44, "contlen": 44, "clen": 44, "l1": 44, "lb": 44, "target": [44, 65, 67, 68], "c2": [44, 49, 64], "br": 44, "break_result": 44, "lb_mem": 44, "phd": [45, 70, 74, 79], "concentr": [45, 62], "screen": [45, 47], "teas": [45, 73, 96], "max_list": 45, "inabl": 45, "lose": 45, "composition": 45, "div": 45, "plus_opt": 45, "minus_opt": 45, "mult_opt": 45, "div_opt": 45, "tremend": 45, "dedupl": 45, "propagate_non": 45, "wrap_output": 45, "fair": [45, 70], "de": 45, "upgrade_binari": 45, "return_binari": 45, "collaps": [45, 95], "inc_log": 45, "dec_log": 45, "loggabl": 45, "dec_log_upgrad": 45, "f_log": 45, "inc_log_upgrad": 45, "inconveni": 45, "addition": [45, 62, 81], "debat": [45, 55], "comfort": 45, "hidden": [45, 62, 77, 81, 85, 87], "callback": [45, 50], "asynchron": [45, 50, 94], "impos": [45, 76], "mnemon": 45, "nop": 45, "elaps": 45, "curli": 45, "s3": 45, "embodi": [45, 86], "cleaner": 45, "ephemer": [46, 48, 79, 86], "persistentarrai": 46, "conchon": 46, "filli\u00e2tr": 46, "2007": 46, "easiest": [46, 64, 94], "copyonsetarrai": 46, "underneath": 46, "hood": 46, "a0": 46, "diverg": 46, "version_tre": 46, "diff": 46, "mere": [46, 79], "walk": [46, 48, 58], "degener": 46, "worsen": 46, "pull": [46, 66], "versiontreearrai": 46, "outermost": [46, 95], "perfrom": 46, "adjust": 46, "compens": 46, "indirect": [46, 78], "rebasing_tre": 46, "adapt": [46, 63, 71, 72], "old_x": 46, "modif": [46, 92], "rebasingversiontreearrai": 46, "sylvain": 46, "jean": 46, "christoph": 46, "acm": [46, 73], "workshop": 46, "henri": 46, "baker": 46, "shallow": 46, "cacm": 46, "1978": [46, 48, 64], "sigplan": 46, "durat": 47, "graphic": 47, "lock": 47, "action": [47, 66, 69, 92], "frustrat": [47, 72, 75], "spreadsheet": 47, "menu": [47, 94, 95], "network": [47, 49, 74, 95], "hyperlink": 47, "server": [47, 94, 95], "cm": 47, "depart": 47, "motor": 47, "vehicl": 47, "deli": 47, "player": 47, "millisecond": 47, "multicor": 47, "central": 47, "resourc": 47, "agreement": [47, 82], "corrupt": 47, "race": [47, 50], "notori": 47, "nondetermin": 47, "problemat": 47, "schedul": 47, "preemptiv": [47, 50], "relinquish": 47, "unrespons": 47, "preemption": 47, "timer": 47, "interrupt": 47, "3410": 47, "4410": 47, "defer": 47, "net": 47, "async": 47, "await": 47, "jane": 47, "street": 47, "ocsigen": 47, "acronym": 47, "light": 47, "misnom": 47, "pend": [47, 50], "fulfil": 47, "reject": [47, 50, 64, 66, 72, 85], "incorpor": [47, 70, 71], "writeabl": 47, "public": [47, 77, 81, 82, 86, 94], "write_onc": 47, "demean": 47, "wakeup_lat": 47, "wakeup_later_exn": 47, "weak": [47, 64, 68], "nope": 47, "inher": [47, 79, 88], "synchron": [47, 50], "input_lin": 47, "in_channel": 47, "channel": [47, 50, 95], "stdin": 47, "adventur": 47, "opposit": [47, 55, 79], "mix": [47, 84], "latenc": [47, 50], "transfer": [47, 62, 79], "disk": 47, "excel": [47, 56, 60], "regain": 47, "show_val": 47, "set_auto_run_lwt": 47, "auto": 47, "ocamlinit": [47, 87], "print_the_str": 47, "str": [47, 53], "v5": 47, "activ": [47, 80, 95], "read2": 47, "resolut": [47, 50], "stringmi": 47, "lwt_ppx": 47, "fool": 47, "ps": 47, "counterpart": 47, "trickier": [47, 64, 66, 67], "st": 47, "fulfill_or_reject": 47, "input_promis": 47, "exc": 47, "output_promis": 47, "output_resolv": 47, "handler_of_callback": 47, "qualifi": [48, 87], "logarithm": [48, 79], "plenti": 48, "workload": 48, "log_2": 48, "strongest": 48, "hopcroft": 48, "avl": 48, "adelson": 48, "velski": 48, "landi": 48, "1962": 48, "shortest": 48, "guiba": 48, "sedgewick": 48, "rbtree": 48, "adjac": [48, 65], "global": [48, 82], "imbal": 48, "eight": 48, "lowest": 48, "2b": 48, "equiv": 48, "chri": [48, 50, 79, 86], "1999": [48, 50, 70], "parent": [48, 51], "grandpar": 48, "bz": 48, "bx": 48, "ry": 48, "rx": 48, "rz": 48, "rotat": 48, "overal": 48, "cascad": 48, "recolor": 48, "ins": [48, 74], "rbt": 48, "rebalanc": 48, "nonleaf": 48, "splice": 48, "german": 48, "doubli": 48, "curs": 48, "journal": 48, "juli": 48, "2014": [48, 70, 92], "vari": [48, 60], "sword": 48, "winner": 48, "ones": [49, 64, 95], "entireti": 49, "socket": 49, "chess": 49, "tic": 49, "tac": 49, "toe": 49, "board": 49, "chase": 49, "forev": 49, "rid": [49, 85, 92], "f2": 49, "templat": 49, "map2": [49, 53], "30th": 49, "100th": 49, "memoiz": [49, 50], "subsequ": 49, "misspel": 49, "suspens": 49, "eager": [49, 50, 62], "strict": [49, 50, 67], "lazili": [49, 62, 67], "unpleas": 49, "fib30long": 49, "832040": 49, "fib30lazi": 49, "fib30": 49, "fib30fast": 49, "sped": 49, "fib29": 49, "514229": 49, "gotten": 49, "sequencefib": 49, "take_aux": 49, "h_a": 49, "t_a": 49, "h_b": 49, "t_b": 49, "nth_fib": 49, "lazyfib": 49, "banker": 50, "oh": 50, "physicist": 50, "thread": [50, 74], "writer": [50, 65], "divers": [50, 60], "whitington": [50, 60], "map_tre": 51, "fold_mylist": 51, "fold_tre": 51, "catamorph": 51, "hardest": 51, "reshap": 51, "prune": 51, "filter_tre": 51, "spicier": 52, "spice": 52, "uncurried_add": 52, "curried_add": 52, "product_left": 53, "product_right": 53, "listlabel": [53, 55], "sum_cube_odd": 53, "exists_rec": 53, "exists_fold": 53, "exists_lib": 53, "debit": 53, "uncurried_nth": 53, "sep": 53, "bye": 53, "comma": [53, 63, 79], "uniqu": [53, 79, 80, 81], "bmatrix": 53, "is_valid_matrix": 53, "add_row_vector": 53, "wise": 53, "unspecifi": [53, 66, 67, 78], "add_matric": 53, "matric": [53, 89], "multiply_matric": 53, "transposit": 53, "fanci": 54, "filter_aux": 54, "tolist": [54, 58], "unifi": [55, 63, 64, 68, 96], "led": 55, "succinct": 55, "motiv": [55, 84], "nicer": [55, 67, 80], "combine_tr": 55, "procrastin": 55, "invoc": [55, 92], "crastin": 55, "sub_tr": 55, "fold_x": 55, "uniform": [55, 56, 74], "experienc": [55, 72], "perus": 55, "incorrectli": 55, "lst_and": 55, "lst_and_rec": 55, "lst_and_fold": 55, "lst_and_lib": 55, "for_al": [55, 80], "toi": 56, "recod": 56, "bruce": [56, 60], "maclennan": [56, 60], "recur": 56, "square_then_doubl": 56, "ds": 56, "cond": 56, "quantif": [56, 64], "itertool": 57, "2011": 57, "wizard": 57, "closur": [57, 62, 63, 67, 68], "obviat": 57, "fuss": [57, 74], "reusabl": 57, "add1": 58, "concat_bang": 58, "salti": 58, "guis": [58, 64], "contriv": 58, "anyon": [58, 81], "predispos": 58, "astut": 58, "extent": [58, 60], "unavoid": 58, "aw": 58, "map_tr_aux": 58, "map_tr": 58, "alic": [58, 89], "bob": [58, 70], "him": 58, "rev_map": 58, "rev_map_aux": 58, "theme": 58, "sum_sq": 59, "uglier": 59, "intermedi": [59, 65, 67, 68], "sq_l": 59, "rubi": [60, 64], "sequel": 60, "liber": 60, "von": 60, "neumann": 60, "backu": [60, 68], "award": [60, 72, 73, 85], "elabor": 60, "publish": [60, 64], "articl": 60, "stanford": 60, "encyclopedia": 60, "philosophi": 60, "tour": [61, 75], "lex": [61, 63, 65, 66, 67, 69], "tightli": 61, "crawl": 62, "mapsto": [62, 69], "aim": [62, 69], "fragment": [62, 66, 67], "coincid": [62, 92], "consensu": 62, "decad": [62, 70], "norm": [62, 89], "latex": 62, "perl": 62, "racket": [62, 73, 74], "travel": 62, "delimit": [62, 66], "evok": 62, "defenv": 62, "zip": [62, 63, 66, 67, 69, 95], "v3": [62, 67, 88], "interp": [63, 66], "lexer": [63, 68], "parser": [63, 65, 68], "ast": [63, 65, 67], "mly": [63, 66], "reevalu": 63, "typ": [63, 69], "typeof": [63, 69], "unif": [63, 64, 68], "ctx": 63, "parenthet": 63, "omega": 63, "inexhaust": 63, "is_valu": [63, 67], "subst": [63, 67], "not_empti": 63, "grammar": [63, 66, 68], "meta": [63, 64, 73], "insight": 63, "forgot": 63, "unfold": 63, "fv": [63, 67], "const": [63, 77, 79], "lexic": [63, 64, 66], "hm": [63, 64, 68], "contrast": 64, "disagre": 64, "sophist": [64, 74, 77, 84], "gather": 64, "literatur": 64, "roger": 64, "indlei": 64, "robin": [64, 73], "ilner": 64, "rediscov": 64, "1950": 64, "1930": 64, "he": [64, 70, 72, 73, 94], "1967": 64, "1969": 64, "hindlei": [64, 68], "morri": 64, "1968": 64, "milner": [64, 68, 73], "realm": [64, 85], "tarski": 64, "1920": 64, "histori": [64, 75, 85], "blow": 64, "f0": [64, 92], "repetit": [64, 72], "layer": 64, "untyp": [64, 67], "simplif": 64, "quaternari": 64, "turnstil": [64, 69], "c3": 64, "fresh": [64, 67, 68, 95], "elsewher": [64, 78], "foobar": 64, "strip": 64, "5x": 64, "2y": 64, "toss": 64, "gaussian": 64, "i1": [64, 78], "o1": 64, "i2": [64, 78], "o2": 64, "typeabl": 64, "princip": 64, "lenient": 64, "judgment": 64, "ramif": 64, "downstream": 64, "permiss": 64, "contradictori": 64, "unsatisfi": 64, "ill": [64, 67, 69, 78], "mylen": 64, "uncompl": 64, "u1": 64, "env1": 64, "glean": 64, "mistakenli": 64, "disast": 64, "_weak": [64, 92], "pin": 64, "everywher": [64, 69, 74, 77, 92], "topic": [64, 86, 94], "eleph": 64, "rabbit": 64, "subtyp": [64, 68, 80, 83, 85, 86], "arraystoreexcept": 64, "ouch": 64, "bun": 64, "artisan": 65, "carpent": 65, "plane": 65, "chef": 65, "knive": 65, "pot": 65, "demystifi": 65, "career": 65, "dsl": 65, "mip": 65, "x86": 65, "mixtur": 65, "virtual": [65, 68, 95], "jvm": 65, "zinc": [65, 68], "hotspot": 65, "jit": 65, "phase": [65, 67, 69], "sensit": 65, "delin": 65, "foo": [65, 69, 76, 83], "operand": [65, 67, 69], "gratuit": 65, "unambigu": [65, 85], "ir": [65, 67], "opcod": [65, 67], "begun": [65, 79], "runnabl": 65, "yacc": 66, "ocamlyacc": 66, "automata": [66, 68], "automaton": 66, "reset": 66, "pushdown": [66, 68], "cfl": 66, "parenthesi": 66, "ss": 66, "nontermin": [66, 68], "inventor": 66, "peter": 66, "picki": 66, "adher": 66, "metasyntax": [66, 67], "var": [66, 67, 69], "allud": 66, "awhil": 66, "header": 66, "trailer": 66, "lparen": 66, "rparen": 66, "IN": 66, "IF": 66, "THEN": 66, "nonassoc": 66, "prog": 66, "production1": 66, "action1": 66, "production2": 66, "action2": 66, "sixth": 66, "eighth": 66, "mll": 66, "fyi": 66, "regexp1": 66, "regexp2": 66, "lexbuf": 66, "lexem": 66, "explanatori": 66, "folder": [66, 95], "from_str": 66, "from_channel": 66, "reflex": 67, "axiomat": 67, "bridg": 67, "gap": 67, "faith": 67, "circumst": 67, "toolkit": 67, "eagerli": 67, "slash": 67, "deleg": 67, "3000": 67, "step_bop": 67, "eval_smal": 67, "eval_big": 67, "eval_bop": 67, "eval_if": 67, "kept": [67, 72, 73, 77], "rudimentari": 67, "makefil": 67, "closest": 67, "surprisingli": 67, "suddenli": 67, "elud": 67, "mathematician": 67, "reserv": 67, "counter": [67, 84], "gensym": 67, "erat": 67, "sym": 67, "bol": 67, "caution": 67, "intersect": 67, "exot": 67, "studiou": 68, "heavili": [68, 95], "naur": 68, "preliminari": 68, "operatiohn": 68, "reconstruct": 68, "andrew": [68, 70, 96], "appel": 68, "dexter": [68, 70, 96], "kozen": [68, 70, 96], "frontend": 68, "webpag": 68, "hastyp": 69, "vdash": 69, "friendlier": 69, "machineri": 69, "tint": 69, "tbool": 69, "disambigu": 69, "staticenviron": 69, "ty": [69, 92], "hasn": [69, 87], "typeof_let": 69, "typeof_bop": 69, "typeof_if": 69, "taught": [70, 96], "mit": [70, 86], "001": 70, "sicp": 70, "tim": 70, "teitelbaum": 70, "1988": [70, 79], "dan": [70, 96], "huttenloch": [70, 96], "faculti": 70, "inaugur": 70, "infus": 70, "rigor": 70, "homegrown": 70, "dialect": [70, 73, 75], "regularli": 70, "ramin": [70, 96], "zabih": [70, 96], "spring": 70, "1994": 70, "surviv": 70, "onlin": [70, 95], "greg": [70, 96], "morrisett": [70, 96], "dylan": 70, "312": 70, "curriculum": 70, "2112": 70, "410": 70, "chose": [70, 95], "prerequisit": 70, "parcel": 70, "482": 70, "2001": 70, "myer": [70, 96], "2002": 70, "2008": [70, 85], "2010": 70, "nate": [70, 96], "foster": [70, 96], "2012": 70, "constabl": [70, 96], "michael": [70, 96], "georg": [70, 96], "grossman": [70, 96], "2003": 70, "decompos": 70, "cse": 70, "341": 70, "washington": 70, "mooc": 70, "2018": 70, "synthes": 70, "wall": 70, "yesterdai": 71, "pascal": [71, 85], "cobol": [71, 85], "tomorrow": 71, "transcend": [71, 75, 86], "opportun": [71, 72], "scala": [71, 73], "tendenc": 71, "brought": [71, 85], "1958": 71, "2004": 71, "nan": 72, "\u5357\u96a0": 72, "japanes": 72, "master": [72, 77, 87], "meiji": 72, "1868": 72, "1912": 72, "inquir": 72, "zen": 72, "tea": 72, "pour": 72, "visitor": 72, "restrain": 72, "himself": 72, "overful": 72, "specul": 72, "freedom": [72, 74], "goodby": 72, "bloat": 72, "hate": 72, "love": [72, 95], "humbl": 72, "magic": [72, 92], "incant": 72, "perli": 72, "1922": 72, "recipi": 72, "aesthet": 72, "stylish": 72, "sanskrit": 72, "poetri": 72, "struggl": 72, "ugli": 72, "genealog": 73, "grandfath": 73, "clojur": [73, 75], "edinburgh": 73, "laboratori": 73, "scotland": 73, "late": 73, "1980": [73, 80, 85], "tradition": 73, "fledg": 73, "schism": 73, "french": 73, "british": 73, "brit": 73, "american": 73, "microsoft": [73, 95], "2005": [73, 86], "prais": 73, "articul": 73, "remix": 73, "influenc": 73, "linguist": 74, "stateless": 74, "fantasi": 74, "referenti": [74, 75], "transpar": [74, 75], "illus": 74, "immens": 74, "turkei": 74, "biggest": [74, 75], "emerg": 74, "cert": 74, "govern": 74, "agenc": 74, "cybersecur": 74, "due": 74, "reliev": 74, "dealloc": 74, "nowher": [74, 77], "strength": [74, 82], "yaron": 74, "minski": 74, "obstacl": 75, "freeli": 75, "gentl": 75, "cornellian": 75, "sml": 75, "essai": 75, "director": 75, "googl": [75, 95], "capit": [76, 87], "creator": 76, "placement": 76, "mystack": 76, "homework": 76, "lab1": 76, "rarer": 76, "everydai": 76, "customstack": [76, 77], "hpp": 76, "cpp": 76, "filenam": [76, 87], "gone": [77, 95], "opaqu": 77, "seal": [77, 78, 81, 86], "inaccess": 77, "mathcheck": 77, "c_public": 77, "cprivat": 77, "list_stack": [77, 85], "liststackcacheds": 77, "checkliststackcacheds": 77, "doubt": 77, "unawar": [77, 83], "overli": 77, "cap": [77, 85], "shout": [77, 85], "unwieldi": 77, "fairli": [77, 79], "angl": 77, "friendli": 77, "margin": [77, 94], "fprintf": [77, 78, 84], "kupo": 77, "kupo_pp": 77, "fmt": [77, 84], "uninstal": [77, 95], "remove_print": 77, "pp_val": 77, "pp_break": 77, "pp_print_list": 77, "pp_sep": 77, "lift": 77, "imaginari": 78, "complexsig": 78, "ctrl": [78, 95], "fill_listqueu": 78, "fill_batchedqueu": 78, "bstmap": 78, "fraction": 78, "to_float": 78, "euclid": 78, "gcd": 78, "greatest": 78, "charmap": 78, "orderedtyp": [78, 80], "sierra": 78, "victor": 78, "march": 78, "31st": 78, "june": 78, "calendar": 78, "datemap": 78, "event": 78, "birthdai": 78, "anniversari": 78, "print_calendar": 78, "is_for": 78, "k_i": 78, "v_i": 78, "fancier": 78, "first_aft": 78, "grr": 78, "argh": 78, "printint": 78, "printstr": 78, "mystr": 78, "albeit": 78, "super": [78, 85, 95], "stringwithprint": 78, "make_d": 78, "get_month": 78, "get_dai": 78, "reissu": 78, "arith": 78, "ring": [78, 84], "intr": [78, 84], "floatr": [78, 84], "intfield": 78, "floatfield": 78, "intrat": 78, "floatrat": 78, "advic": [78, 95], "coexist": 79, "peek_opt": 79, "pop_opt": 79, "melvil": 79, "dissert": 79, "1981": 79, "supersed": [79, 94], "718": 79, "618": 79, "assoclistmap": 79, "ki": 79, "willing": [79, 92], "uniqassoclistmap": 79, "morphism": 80, "intimid": 80, "quotat": 80, "stratifi": 80, "incx": 80, "add42": 80, "mn": 80, "sn": 80, "si": 80, "module_expression1": 80, "module_expression2": 80, "module_typ": [80, 85], "checkaddx": 80, "pair1": 80, "p0": 80, "pa": 80, "nameabl": 80, "difficulti": [80, 94], "fx": 80, "fz": 80, "lesser": 80, "lt": 80, "eq": 80, "ala": 80, "strcmp": 80, "intmap": 80, "filter_map": 80, "partit": 80, "min_bind": 80, "min_binding_opt": 80, "max_bind": 80, "max_binding_opt": 80, "choose_opt": 80, "find_opt": 80, "find_first": 80, "find_first_opt": 80, "find_last": 80, "find_last_opt": 80, "mapi": 80, "to_seq": 80, "seq": 80, "to_rev_seq": 80, "to_seq_from": 80, "add_seq": 80, "of_seq": 80, "stdlib__map": 80, "accordingli": 80, "v4": 80, "lightli": [80, 95], "ord": 80, "treemap": 80, "first1": 80, "last1": 80, "first2": 80, "last2": 80, "namemap": 80, "birth": 80, "kardashian": 80, "kourtnei": 80, "kimberli": 80, "k3": 80, "khloe": 80, "nm": 80, "1979": 80, "1984": 80, "reseal": 80, "unusablemap": 80, "variantstack": 80, "horribl": 80, "contempl": 80, "hundr": 80, "stacktest": 80, "liststacktest": 80, "variantstacktest": 80, "all_test": 80, "flatten": 80, "objection": 80, "newest": 80, "setoflist": [80, 81], "oflist": [80, 81], "uniqoflist": 80, "setwithoflist": 80, "setl": 80, "uniqsetl": 80, "necessit": 80, "grain": 80, "mixin": 80, "prolifer": 81, "prone": 81, "quicker": [81, 94], "neat": [81, 92], "parti": 81, "listsetextend": 81, "subclass": 81, "superclass": 81, "setextend": 81, "ah": 81, "workaround": 81, "listsetimpl": 81, "listsetextendedimpl": 81, "dispatch": 81, "subtli": 81, "consumpt": 81, "export": 81, "of_list_uniq": 81, "uniqlistsetextend": 81, "magnitud": 82, "colleg": 82, "plug": 82, "moder": 82, "industri": 82, "sole": 82, "serious": 82, "defici": 82, "decoupl": 82, "accompani": 83, "blissfulli": 83, "reassembl": 83, "intellig": 83, "imperfect": 83, "degre": 83, "extol": 84, "invers": 84, "pp_intr": 84, "pp_floatr": 84, "int_r": 84, "float_r": 84, "proxim": 84, "constraint1": 84, "constraint2": 84, "constraintn": 84, "xy": 84, "primary_color": 85, "mymodul": 85, "broaden": 85, "sight": 85, "vagu": 85, "let_modul": 85, "modulenam": 85, "module_item": 85, "module_express": 85, "alia": [85, 93, 95], "pervas": 85, "uppercase_al": 85, "uppercase_ascii": 85, "trim": 85, "lower_trim": 85, "eschew": 85, "moduletypenam": 85, "ls": [85, 87], "all_cap": 85, "older": [85, 95], "impolit": 85, "connot": 85, "liststackalia": 85, "opac": 85, "gain": 85, "she": 85, "twenti": [85, 94], "flavor": 85, "nomin": 85, "decre": 85, "mx": 85, "mz": 85, "xz": 85, "mxz": 85, "xstring": 85, "mxstring": 85, "intfun": 85, "idfun": 85, "iid": 85, "irrevoc": 85, "superset": 85, "ab": 85, "stackhistori": 85, "duck": 85, "un": 85, "brutal": 86, "equip": 86, "harper": 86, "ed": 86, "pragmat": 87, "topmost": 87, "ompil": 87, "odul": 87, "bject": 87, "ing": 87, "uncompil": 87, "downto": 88, "euclidean": 89, "dimension": [89, 91], "x_1": 89, "x_n": 89, "instinct": 89, "7071": 89, "make_matrix": 89, "init_matrix": 89, "till": 90, "analogu": 90, "mlist": [91, 92], "insert_first": [91, 92], "mutablestack": 91, "mutablerecordstack": 91, "0x3110bae0": 92, "forego": 92, "hick": 92, "dereferenc": 92, "allot": 92, "loc": 92, "next_val": 92, "decr": 92, "next_val_broken": 92, "malloc": 92, "segfault": 92, "deref": 92, "ptr": 92, "misunderstood": 92, "knowledg": [92, 94], "undocu": 92, "obj": 92, "circumv": 92, "fact_rec": 92, "fact0": 92, "rewrot": 92, "knot": 92, "tie": 92, "jacqu": 92, "garrigu": 92, "unequ": 92, "lst0": 92, "_weak3": 92, "linkedlist": 92, "_weak4": 92, "alias": 93, "heavier": 94, "fork": 94, "repositori": 94, "minor": 94, "uptak": 94, "prior": 94, "youtub": [94, 96], "pandem": 94, "overwhelmingli": 94, "profession": 94, "basement": 94, "ecosystem": 94, "2020": [94, 95], "alarm": 94, "plugin": 94, "ag": 94, "nearest": 94, "playlist": [94, 96], "collabor": 94, "hypoth": 94, "publicli": 94, "rocket": 94, "ship": 94, "binder": 94, "site": [94, 95], "mybind": 94, "cloud": 94, "servic": 94, "reproduc": 94, "shareabl": 94, "ui": 94, "jupyt": 94, "ipynb": 94, "narr": 94, "julia": 94, "analys": 94, "shift": [94, 95], "hotkei": 94, "scene": 94, "kernel": 94, "reload": 94, "studio": 94, "seamlessli": 94, "varieti": 94, "anaconda": 94, "rate": 94, "star": 94, "misjudg": 94, "tablet": 94, "epub": 94, "prefac": 95, "brush": 95, "sad": 95, "tower": 95, "solid": 95, "stranger": 95, "internet": 95, "beneath": 95, "maco": 95, "homebrew": 95, "macport": 95, "nudg": 95, "xcode": 95, "x11": 95, "subsystem": 95, "wsl": 95, "20262": 95, "novemb": 95, "bio": 95, "manufactur": 95, "hat": 95, "powershel": 95, "administr": 95, "reboot": 95, "reinstal": 95, "setup": 95, "wsl2": 95, "wsl1": 95, "04": 95, "app": 95, "bash": 95, "keystrok": 95, "unzip": 95, "your_ubuntu_user_nam": 95, "mnt": 95, "your_windows_user_nam": 95, "pc": 95, "brew": 95, "port": 95, "bare": 95, "profil": 95, "bashrc": 95, "sandbox": 95, "whenc": 95, "cs3110": 95, "2024fa": 95, "logout": 95, "vanilla": 95, "shell": 95, "reinit": 95, "odoc": 95, "menhir": 95, "lsp": 95, "vim": 95, "slate": 95, "zsh": 95, "cmd": 95, "login": 95, "pane": 95, "palett": 95, "yeah": 95, "orang": 95, "squiggl": 95, "troubleshoot": 95, "band": 95, "cure": 95, "tweak": 95, "json": 95, "tabsiz": 95, "ruler": 95, "formatonsav": 95, "doc": 95, "voic": 95, "spin": 95, "zoom": 95, "email": 95, "your_netid": 95, "emphasi": 96, "2024": 96, "justin": 96, "hsu": 96, "daniel": 96, "radu": 96, "rugina": 96, "2021": 96, "copyright": 96, "attribut": 96, "noncommerci": 96, "noderiv": 96, "licens": 96}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"The": [0, 9, 12, 16, 45, 47, 56, 66, 67, 73, 74, 80], "curri": [0, 52], "howard": 0, "correspond": 0, "comput": 0, "evid": 0, "type": [0, 7, 12, 25, 29, 38, 64, 69, 77, 80, 84, 85, 92], "proposit": 0, "program": [0, 3, 4, 19, 49, 57, 72, 82, 96], "proof": 0, "evalu": [0, 62, 67], "simplif": 0, "what": [0, 3, 5], "It": 0, "all": [0, 22, 25], "mean": [0, 56], "exercis": [0, 6, 15, 28, 41, 53, 63, 78, 89], "big": [1, 67], "oh": 1, "notat": 1, "algorithm": [1, 48], "effici": [1, 96], "attempt": [1, 62], "1": 1, "2": 1, "ell": 1, "finish": [1, 2, 64], "warn": 1, "3": 1, "virtual": 2, "machin": 2, "start": 2, "instal": [2, 95], "window": [2, 95], "mac": [2, 95], "compil": [3, 76, 87], "ocaml": [3, 4, 9, 12, 62, 64, 67, 72, 73, 74, 95, 96], "store": 3, "code": [3, 12, 81, 95], "file": 3, "about": [3, 22, 94], "main": 3, "dune": [3, 87], "creat": [3, 95], "project": 3, "manual": 3, "automat": 3, "run": 3, "continu": 3, "debug": [4, 24], "defens": 4, "against": 4, "bug": 4, "how": [4, 5, 49, 80], "document": [5, 16, 18, 76], "precondit": 5, "postcondit": 5, "express": 7, "primit": 7, "valu": [7, 12], "more": 7, "oper": [7, 8], "assert": 7, "If": 7, "let": [7, 34, 64], "scope": [7, 39, 62, 85], "annot": 7, "function": [8, 12, 16, 18, 20, 34, 42, 44, 55, 56, 79], "definit": [8, 85], "anonym": 8, "applic": 8, "pipelin": [8, 59], "polymorph": [8, 25, 64], "label": [8, 55], "option": [8, 32, 79], "argument": [8, 55], "partial": 8, "associ": [8, 26, 42], "tail": [8, 30, 54, 55, 58], "recurs": [8, 19, 22, 25, 30, 54, 55, 58, 92], "basic": 9, "print": [10, 77], "unit": [10, 33, 76], "semicolon": 10, "ignor": 10, "printf": 10, "summari": [11, 23, 36, 50, 60, 68, 75, 86, 93], "term": [11, 23, 36, 50, 60, 68, 75, 86, 93], "concept": [11, 23, 36, 50, 60, 68, 75, 86, 93], "further": [11, 23, 36, 50, 60, 68, 75, 86, 93], "read": [11, 23, 36, 50, 60, 68, 75, 86, 93], "toplevel": [12, 87], "load": [12, 87], "workflow": 12, "black": [13, 48], "box": 13, "glass": 13, "test": [13, 20, 24, 33, 80], "data": [13, 25, 29, 43, 79], "abstract": [13, 18, 20, 56, 77], "vs": [13, 19, 35, 55, 62, 79, 81, 87, 95], "bisect": 13, "equat": [14, 19], "specif": [14, 16, 19, 21], "exampl": [14, 16, 31, 33, 34, 37, 45, 61, 66, 76, 80, 91, 92], "stack": [14, 76, 79, 91], "queue": [14, 40, 79], "batch": [14, 40], "design": 14, "return": 16, "claus": 16, "requir": [16, 87], "rais": 16, "game": 16, "comment": [16, 76], "correct": [17, 19, 96], "modul": [18, 80, 81, 83, 84, 85, 87], "remind": 18, "implement": [18, 42, 47, 55, 62, 67], "commut": 18, "diagram": 18, "represent": [18, 37, 42], "invari": 18, "prove": 19, "equal": [19, 92], "reason": 19, "induct": [19, 22], "natur": [19, 22, 31], "number": [19, 20, 31], "iter": 19, "termin": 19, "random": 20, "qcheck": 20, "gener": [20, 66], "properti": 20, "inform": 20, "output": [20, 33], "from": [20, 48], "structur": [22, 43, 79], "list": [22, 26, 30, 42, 51, 79, 91, 92], "A": [22, 55, 62, 69, 70], "theorem": 22, "fold": [22, 51, 55], "tree": [22, 37, 46, 48, 51], "principl": [22, 56], "variant": [22, 25, 27, 35, 39], "acknowledg": [23, 68], "valid": 24, "algebra": 25, "carri": 25, "syntax": [25, 30, 80, 92], "semant": [25, 27, 80, 81, 85, 92], "catch": 25, "case": 25, "parameter": 25, "built": 25, "except": [27, 33, 79], "ar": [27, 85, 91], "extens": 27, "pattern": [27, 30, 34, 39], "match": [27, 30, 34, 39], "ounit": [27, 33], "build": 30, "access": 30, "Not": [30, 49], "mutat": 30, "deep": 30, "immedi": 30, "ocamldoc": 30, "comprehens": 30, "an": [33, 62, 76, 80, 95], "explan": 33, "improv": 33, "driven": 33, "develop": [33, 95], "advanc": 34, "record": [35, 37], "tupl": [35, 37], "synonym": 38, "amort": 40, "analysi": 40, "hash": [40, 42], "tabl": [40, 42], "banker": 40, "physicist": 40, "persist": [40, 46], "map": [42, 48, 51, 58, 79, 80], "arrai": [42, 46, 88], "chain": 42, "resiz": 42, "standard": 42, "librari": [42, 55, 87], "hashtbl": 42, "memoiz": 44, "fibonacci": 44, "us": [44, 55, 80, 87, 95], "higher": [44, 56, 57], "order": [44, 56, 57], "just": 44, "fun": 44, "parti": 44, "optim": 44, "monad": 45, "signatur": 45, "mayb": 45, "writer": 45, "lwt": [45, 47], "law": 45, "composit": 45, "copi": 46, "On": 46, "set": [46, 48, 79, 95], "version": 46, "rebas": 46, "citat": 46, "promis": 47, "concurr": 47, "thread": 47, "make": 47, "our": 47, "own": 47, "asynchron": 47, "i": 47, "o": 47, "callback": 47, "full": 47, "red": 48, "binari": 48, "search": 48, "balanc": 48, "membership": 48, "insert": 48, "okasaki": 48, "s": 48, "remov": 48, "bst": 48, "sequenc": [49, 92], "defin": [49, 67], "correctli": 49, "lazi": 49, "beyond": 51, "filter": [51, 54], "other": [54, 55, 58], "languag": [54, 58], "combin": 55, "right": 55, "left": 55, "digress": 55, "famou": 56, "side": 58, "effect": [58, 92], "calcul": 61, "environ": [62, 95], "model": [62, 67], "lambda": 62, "calculu": 62, "lexic": 62, "dynam": 62, "second": 62, "core": [62, 67], "infer": 64, "reconstruct": 64, "constraint": [64, 80, 84], "base": 64, "solv": 64, "mutabl": [64, 90, 91, 92], "interpret": [65, 67], "pars": 66, "lexer": 66, "parser": 66, "backu": 66, "naur": 66, "form": 66, "simpl": [66, 67, 69], "ast": 66, "menhir": 66, "ocamllex": 66, "driver": 66, "substitut": 67, "singl": 67, "step": 67, "relat": 67, "multistep": 67, "done": 67, "captur": 67, "avoid": 67, "check": [69, 95], "system": [69, 83], "checker": 69, "safeti": 69, "brief": 70, "histori": 70, "cs": 70, "3110": 70, "look": 71, "your": 71, "futur": 71, "better": 72, "through": 72, "past": 73, "present": 74, "featur": 74, "industri": 74, "incomplet": 76, "encapsul": [77, 81], "opac": 77, "pretti": 77, "functor": 80, "custom": 80, "kei": 80, "suit": 80, "extend": 80, "multipl": [80, 81], "includ": 81, "open": [81, 85], "modular": 82, "special": 84, "static": 85, "first": 85, "class": 85, "initi": [87, 95], "loop": 88, "field": 91, "ref": [91, 92], "singli": [91, 92], "link": [91, 92], "alias": 92, "counter": 92, "pointer": 92, "evil": 92, "secret": 92, "without": 92, "rec": 92, "weak": 92, "variabl": 92, "physic": 92, "thi": 94, "book": 94, "unix": 95, "linux": 95, "opam": 95, "switch": 95, "doubl": 95, "visual": 95, "studio": 95, "collabor": 95, "beauti": 96}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx": 56}}) \ No newline at end of file