CINXE.COM

microsoft/FStarDataSet · Datasets at Hugging Face

<!doctype html> <html class=""> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> <meta name="description" content="We’re on a journey to advance and democratize artificial intelligence through open source and open science." /> <meta property="fb:app_id" content="1321688464574422" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:site" content="@huggingface" /> <meta name="twitter:image" content="https://cdn-thumbnails.huggingface.co/social-thumbnails/datasets/microsoft/FStarDataSet.png" /> <meta property="og:title" content="microsoft/FStarDataSet · Datasets at Hugging Face" /> <meta property="og:type" content="website" /> <meta property="og:url" content="https://huggingface.co/datasets/microsoft/FStarDataSet" /> <meta property="og:image" content="https://cdn-thumbnails.huggingface.co/social-thumbnails/datasets/microsoft/FStarDataSet.png" /> <link rel="stylesheet" href="/front/build/kube-8645c4d/style.css" /> <link rel="preconnect" href="https://fonts.gstatic.com" /> <link href="https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,wght@0,200;0,300;0,400;0,600;0,700;0,900;1,200;1,300;1,400;1,600;1,700;1,900&display=swap" rel="stylesheet" /> <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;600;700&display=swap" rel="stylesheet" /> <link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.12.0/katex.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'" /> <noscript> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.12.0/katex.min.css" /> </noscript> <link rel="canonical" href="https://huggingface.co/datasets/microsoft/FStarDataSet"> <script type="application/ld+json">{ "@context": { "@language": "en", "@vocab": "https:\/\/schema.org\/", "citeAs": "cr:citeAs", "column": "cr:column", "conformsTo": "dct:conformsTo", "cr": "http:\/\/mlcommons.org\/croissant\/", "data": { "@id": "cr:data", "@type": "@json" }, "dataBiases": "cr:dataBiases", "dataCollection": "cr:dataCollection", "dataType": { "@id": "cr:dataType", "@type": "@vocab" }, "dct": "http:\/\/purl.org\/dc\/terms\/", "extract": "cr:extract", "field": "cr:field", "fileProperty": "cr:fileProperty", "fileObject": "cr:fileObject", "fileSet": "cr:fileSet", "format": "cr:format", "includes": "cr:includes", "isLiveDataset": "cr:isLiveDataset", "jsonPath": "cr:jsonPath", "key": "cr:key", "md5": "cr:md5", "parentField": "cr:parentField", "path": "cr:path", "personalSensitiveInformation": "cr:personalSensitiveInformation", "recordSet": "cr:recordSet", "references": "cr:references", "regex": "cr:regex", "repeated": "cr:repeated", "replace": "cr:replace", "sc": "https:\/\/schema.org\/", "separator": "cr:separator", "source": "cr:source", "subField": "cr:subField", "transform": "cr:transform" }, "@type": "sc:Dataset", "distribution": [ { "@type": "cr:FileObject", "@id": "repo", "name": "repo", "description": "The Hugging Face git repository.", "contentUrl": "https:\/\/huggingface.co\/datasets\/microsoft\/FStarDataSet\/tree\/refs%2Fconvert%2Fparquet", "encodingFormat": "git+https", "sha256": "https:\/\/github.com\/mlcommons\/croissant\/issues\/80" }, { "@type": "cr:FileSet", "@id": "parquet-files-for-config-default", "name": "parquet-files-for-config-default", "description": "The underlying Parquet files as converted by Hugging Face (see: https:\/\/huggingface.co\/docs\/dataset-viewer\/parquet).", "containedIn": { "@id": "repo" }, "encodingFormat": "application\/x-parquet", "includes": "default\/*\/*.parquet" } ], "recordSet": [ { "@type": "cr:RecordSet", "dataType": "cr:Split", "key": { "@id": "default_splits\/split_name" }, "@id": "default_splits", "name": "default_splits", "description": "Splits for the default config.", "field": [ { "@type": "cr:Field", "@id": "default_splits\/split_name", "name": "split_name", "description": "The name of the split.", "dataType": "sc:Text" } ], "data": [ { "default_splits\/split_name": "train" }, { "default_splits\/split_name": "validation" }, { "default_splits\/split_name": "test" } ] }, { "@type": "cr:RecordSet", "@id": "default", "name": "default", "description": "microsoft\/FStarDataSet - 'default' subset\n\nAdditional information:\n- 3 splits: train, validation, test\n- 2 skipped columns: is_type, is_simple_lemma", "field": [ { "@type": "cr:Field", "@id": "default\/split", "name": "default\/split", "description": "Split to which the example belongs to.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "fileProperty": "fullpath" }, "transform": { "regex": "default\/(?:partial-)?(train|validation|test)\/.+parquet$" } }, "references": { "field": { "@id": "default_splits\/split_name" } } }, { "@type": "cr:Field", "@id": "default\/effect", "name": "default\/effect", "description": "Column 'effect' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "effect" } } }, { "@type": "cr:Field", "@id": "default\/original_source_type", "name": "default\/original_source_type", "description": "Column 'original_source_type' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "original_source_type" } } }, { "@type": "cr:Field", "@id": "default\/opens_and_abbrevs", "name": "default\/opens_and_abbrevs", "description": "Column 'opens_and_abbrevs' from the Hugging Face parquet file.", "subField": [ { "@type": "cr:Field", "@id": "default\/opens_and_abbrevs\/abbrev", "name": "default\/opens_and_abbrevs\/abbrev", "description": "Column 'opens_and_abbrevs' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "opens_and_abbrevs" }, "transform": { "jsonPath": "abbrev" } } }, { "@type": "cr:Field", "@id": "default\/opens_and_abbrevs\/full_module", "name": "default\/opens_and_abbrevs\/full_module", "description": "Column 'opens_and_abbrevs' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "opens_and_abbrevs" }, "transform": { "jsonPath": "full_module" } } }, { "@type": "cr:Field", "@id": "default\/opens_and_abbrevs\/short_module", "name": "default\/opens_and_abbrevs\/short_module", "description": "Column 'opens_and_abbrevs' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "opens_and_abbrevs" }, "transform": { "jsonPath": "short_module" } } } ], "repeated": true }, { "@type": "cr:Field", "@id": "default\/isa_cross_project_example", "name": "default\/isa_cross_project_example", "description": "Column 'isa_cross_project_example' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "isa_cross_project_example" } } }, { "@type": "cr:Field", "@id": "default\/source_definition", "name": "default\/source_definition", "description": "Column 'source_definition' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "source_definition" } } }, { "@type": "cr:Field", "@id": "default\/partial_definition", "name": "default\/partial_definition", "description": "Column 'partial_definition' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "partial_definition" } } }, { "@type": "cr:Field", "@id": "default\/is_div", "name": "default\/is_div", "description": "Column 'is_div' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "is_div" } } }, { "@type": "cr:Field", "@id": "default\/is_proof", "name": "default\/is_proof", "description": "Column 'is_proof' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "is_proof" } } }, { "@type": "cr:Field", "@id": "default\/completed_definiton", "name": "default\/completed_definiton", "description": "Column 'completed_definiton' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "completed_definiton" } } }, { "@type": "cr:Field", "@id": "default\/dependencies", "name": "default\/dependencies", "description": "Column 'dependencies' from the Hugging Face parquet file.", "subField": [ { "@type": "cr:Field", "@id": "default\/dependencies\/checked_file", "name": "default\/dependencies\/checked_file", "description": "Column 'dependencies' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "dependencies" }, "transform": { "jsonPath": "checked_file" } } }, { "@type": "cr:Field", "@id": "default\/dependencies\/dependencies", "name": "default\/dependencies\/dependencies", "description": "Column 'dependencies' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "dependencies" } }, "repeated": true }, { "@type": "cr:Field", "@id": "default\/dependencies\/interface_file", "name": "default\/dependencies\/interface_file", "description": "Column 'dependencies' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "dependencies" }, "transform": { "jsonPath": "interface_file" } } }, { "@type": "cr:Field", "@id": "default\/dependencies\/source_file", "name": "default\/dependencies\/source_file", "description": "Column 'dependencies' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "dependencies" }, "transform": { "jsonPath": "source_file" } } } ] }, { "@type": "cr:Field", "@id": "default\/effect_flags", "name": "default\/effect_flags", "description": "Column 'effect_flags' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "effect_flags" } }, "repeated": true }, { "@type": "cr:Field", "@id": "default\/ideal_premises", "name": "default\/ideal_premises", "description": "Column 'ideal_premises' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "ideal_premises" } }, "repeated": true }, { "@type": "cr:Field", "@id": "default\/mutual_with", "name": "default\/mutual_with", "description": "Column 'mutual_with' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "mutual_with" } }, "repeated": true }, { "@type": "cr:Field", "@id": "default\/file_context", "name": "default\/file_context", "description": "Column 'file_context' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "file_context" } } }, { "@type": "cr:Field", "@id": "default\/interleaved", "name": "default\/interleaved", "description": "Column 'interleaved' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "interleaved" } } }, { "@type": "cr:Field", "@id": "default\/is_simply_typed", "name": "default\/is_simply_typed", "description": "Column 'is_simply_typed' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "is_simply_typed" } } }, { "@type": "cr:Field", "@id": "default\/file_name", "name": "default\/file_name", "description": "Column 'file_name' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "file_name" } } }, { "@type": "cr:Field", "@id": "default\/vconfig", "name": "default\/vconfig", "description": "Column 'vconfig' from the Hugging Face parquet file.", "subField": [ { "@type": "cr:Field", "@id": "default\/vconfig\/detail_errors", "name": "default\/vconfig\/detail_errors", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "detail_errors" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/detail_hint_replay", "name": "default\/vconfig\/detail_hint_replay", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "detail_hint_replay" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/initial_fuel", "name": "default\/vconfig\/initial_fuel", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Integer", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "initial_fuel" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/initial_ifuel", "name": "default\/vconfig\/initial_ifuel", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Integer", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "initial_ifuel" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/max_fuel", "name": "default\/vconfig\/max_fuel", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Integer", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "max_fuel" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/max_ifuel", "name": "default\/vconfig\/max_ifuel", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Integer", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "max_ifuel" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/no_plugins", "name": "default\/vconfig\/no_plugins", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "no_plugins" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/no_smt", "name": "default\/vconfig\/no_smt", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "no_smt" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/no_tactics", "name": "default\/vconfig\/no_tactics", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "no_tactics" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/quake_hi", "name": "default\/vconfig\/quake_hi", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Integer", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "quake_hi" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/quake_keep", "name": "default\/vconfig\/quake_keep", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "quake_keep" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/quake_lo", "name": "default\/vconfig\/quake_lo", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Integer", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "quake_lo" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/retry", "name": "default\/vconfig\/retry", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "retry" } } }, null, { "@type": "cr:Field", "@id": "default\/vconfig\/smtencoding_elim_box", "name": "default\/vconfig\/smtencoding_elim_box", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "smtencoding_elim_box" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/smtencoding_l_arith_repr", "name": "default\/vconfig\/smtencoding_l_arith_repr", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "smtencoding_l_arith_repr" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/smtencoding_nl_arith_repr", "name": "default\/vconfig\/smtencoding_nl_arith_repr", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "smtencoding_nl_arith_repr" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/smtencoding_valid_elim", "name": "default\/vconfig\/smtencoding_valid_elim", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "smtencoding_valid_elim" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/smtencoding_valid_intro", "name": "default\/vconfig\/smtencoding_valid_intro", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "smtencoding_valid_intro" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/tcnorm", "name": "default\/vconfig\/tcnorm", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "tcnorm" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/trivial_pre_for_unannotated_effectful_fns", "name": "default\/vconfig\/trivial_pre_for_unannotated_effectful_fns", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "trivial_pre_for_unannotated_effectful_fns" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/z3cliopt", "name": "default\/vconfig\/z3cliopt", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" } }, "repeated": true }, { "@type": "cr:Field", "@id": "default\/vconfig\/z3refresh", "name": "default\/vconfig\/z3refresh", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Boolean", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "z3refresh" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/z3rlimit", "name": "default\/vconfig\/z3rlimit", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Integer", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "z3rlimit" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/z3rlimit_factor", "name": "default\/vconfig\/z3rlimit_factor", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Integer", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "z3rlimit_factor" } } }, { "@type": "cr:Field", "@id": "default\/vconfig\/z3seed", "name": "default\/vconfig\/z3seed", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Integer", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "z3seed" } } }, null, { "@type": "cr:Field", "@id": "default\/vconfig\/z3version", "name": "default\/vconfig\/z3version", "description": "Column 'vconfig' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "vconfig" }, "transform": { "jsonPath": "z3version" } } } ] }, { "@type": "cr:Field", "@id": "default\/source_type", "name": "default\/source_type", "description": "Column 'source_type' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "source_type" } } }, { "@type": "cr:Field", "@id": "default\/proof_features", "name": "default\/proof_features", "description": "Column 'proof_features' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "proof_features" } }, "repeated": true }, { "@type": "cr:Field", "@id": "default\/name", "name": "default\/name", "description": "Column 'name' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "name" } } }, { "@type": "cr:Field", "@id": "default\/source", "name": "default\/source", "description": "Column 'source' from the Hugging Face parquet file.", "subField": [ { "@type": "cr:Field", "@id": "default\/source\/file_name", "name": "default\/source\/file_name", "description": "Column 'source' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "source" }, "transform": { "jsonPath": "file_name" } } }, { "@type": "cr:Field", "@id": "default\/source\/git_rev", "name": "default\/source\/git_rev", "description": "Column 'source' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "source" }, "transform": { "jsonPath": "git_rev" } } }, { "@type": "cr:Field", "@id": "default\/source\/git_url", "name": "default\/source\/git_url", "description": "Column 'source' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "source" }, "transform": { "jsonPath": "git_url" } } }, { "@type": "cr:Field", "@id": "default\/source\/project_name", "name": "default\/source\/project_name", "description": "Column 'source' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "source" }, "transform": { "jsonPath": "project_name" } } } ] }, { "@type": "cr:Field", "@id": "default\/verbose_type", "name": "default\/verbose_type", "description": "Column 'verbose_type' from the Hugging Face parquet file.", "dataType": "sc:Text", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "verbose_type" } } }, { "@type": "cr:Field", "@id": "default\/source_range", "name": "default\/source_range", "description": "Column 'source_range' from the Hugging Face parquet file.", "subField": [ { "@type": "cr:Field", "@id": "default\/source_range\/end_col", "name": "default\/source_range\/end_col", "description": "Column 'source_range' from the Hugging Face parquet file.", "dataType": "sc:Integer", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "source_range" }, "transform": { "jsonPath": "end_col" } } }, { "@type": "cr:Field", "@id": "default\/source_range\/end_line", "name": "default\/source_range\/end_line", "description": "Column 'source_range' from the Hugging Face parquet file.", "dataType": "sc:Integer", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "source_range" }, "transform": { "jsonPath": "end_line" } } }, { "@type": "cr:Field", "@id": "default\/source_range\/start_col", "name": "default\/source_range\/start_col", "description": "Column 'source_range' from the Hugging Face parquet file.", "dataType": "sc:Integer", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "source_range" }, "transform": { "jsonPath": "start_col" } } }, { "@type": "cr:Field", "@id": "default\/source_range\/start_line", "name": "default\/source_range\/start_line", "description": "Column 'source_range' from the Hugging Face parquet file.", "dataType": "sc:Integer", "source": { "fileSet": { "@id": "parquet-files-for-config-default" }, "extract": { "column": "source_range" }, "transform": { "jsonPath": "start_line" } } } ] } ] } ], "conformsTo": "http:\/\/mlcommons.org\/croissant\/1.0", "name": "FStarDataSet", "description": "\n\t\n\t\t\n\t\n\t\n\t\tProof Oriented Programming with AI (PoPAI) - FStarDataSet\n\t\n\nThis dataset contains programs and proofs in F* proof-oriented programming language. \nThe data, proposed in Towards Neural Synthesis for SMT-Assisted Proof-Oriented Programming,\nis an archive of source code, build artifacts, and metadata assembled from eight different F⋆-based open source projects on GitHub.\n\n\t\n\t\t\n\t\n\t\n\t\tPrimary-Objective\n\t\n\nThis dataset's primary objective is to train and evaluate Proof-oriented… See the full description on the dataset page: https:\/\/huggingface.co\/datasets\/microsoft\/FStarDataSet.", "alternateName": [ "microsoft\/FStarDataSet", "PoPAI-FStarDataSet" ], "creator": { "@type": "Organization", "name": "Microsoft", "url": "https:\/\/huggingface.co\/microsoft" }, "keywords": [ "text-generation", "text2text-generation", "other", "code", "fst", "cdla-permissive-2.0", "10K - 100K", "json", "Text", "Datasets", "Dask", "Croissant", "Polars", "arxiv:2405.01787", "🇺🇸 Region: US", "code", "fstar", "popai" ], "license": "https:\/\/choosealicense.com\/licenses\/cdla-permissive-2.0\/", "url": "https:\/\/huggingface.co\/datasets\/microsoft\/FStarDataSet" }</script> <title>microsoft/FStarDataSet · Datasets at Hugging Face</title> <script defer data-domain="huggingface.co" event-loggedIn="false" src="/js/script.pageview-props.js" ></script> <script> window.plausible = window.plausible || function () { (window.plausible.q = window.plausible.q || []).push(arguments); }; </script> <script> window.hubConfig = {"features":{"signupDisabled":false},"sshGitUrl":"git@hf.co","moonHttpUrl":"https:\/\/huggingface.co","captchaApiKey":"bd5f2066-93dc-4bdd-a64b-a24646ca3859","captchaDisabledOnSignup":false,"datasetViewerPublicUrl":"https:\/\/datasets-server.huggingface.co","stripePublicKey":"pk_live_x2tdjFXBCvXo2FFmMybezpeM00J6gPCAAc","environment":"production","userAgent":"HuggingFace (production)","spacesIframeDomain":"hf.space","spacesApiUrl":"https:\/\/api.hf.space","docSearchKey":"ece5e02e57300e17d152c08056145326e90c4bff3dd07d7d1ae40cf1c8d39cb6","logoDev":{"apiUrl":"https:\/\/img.logo.dev\/","apiKey":"pk_UHS2HZOeRnaSOdDp7jbd5w"}}; </script> <script type="text/javascript" src="https://de5282c3ca0c.edge.sdk.awswaf.com/de5282c3ca0c/526cf06acb0d/challenge.js" defer></script> </head> <body class="flex flex-col min-h-dvh bg-white dark:bg-gray-950 text-black DatasetPage"> <div class="flex min-h-dvh flex-col"> <div class="SVELTE_HYDRATER contents" data-target="MainHeader" data-props="{&quot;classNames&quot;:&quot;&quot;,&quot;isWide&quot;:false,&quot;isZh&quot;:false}"><header class="border-b border-gray-100 "><div class="w-full px-4 container flex h-16 items-center"><div class="flex flex-1 items-center"><a class="mr-5 flex flex-none items-center lg:mr-6" href="/"><img alt="Hugging Face's logo" class="w-7 md:mr-2" src="/front/assets/huggingface_logo-noborder.svg"> <span class="hidden whitespace-nowrap text-lg font-bold md:block">Hugging Face</span></a> <div class="relative flex-1 lg:max-w-sm mr-2 sm:mr-4 md:mr-3 xl:mr-6"><input autocomplete="off" class="w-full dark:bg-gray-950 pl-8 form-input-alt h-9 pr-3 focus:shadow-xl " name="" placeholder="Search models, datasets, users..." spellcheck="false" type="text" value=""> <svg class="absolute left-2.5 text-gray-400 top-1/2 transform -translate-y-1/2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M30 28.59L22.45 21A11 11 0 1 0 21 22.45L28.59 30zM5 14a9 9 0 1 1 9 9a9 9 0 0 1-9-9z" fill="currentColor"></path></svg> </div> <div class="flex flex-none items-center justify-center p-0.5 place-self-stretch lg:hidden"><button class="relative z-40 flex h-6 w-8 items-center justify-center" type="button"><svg width="1em" height="1em" viewBox="0 0 10 10" class="text-xl" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" preserveAspectRatio="xMidYMid meet" fill="currentColor"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.65039 2.9999C1.65039 2.8066 1.80709 2.6499 2.00039 2.6499H8.00039C8.19369 2.6499 8.35039 2.8066 8.35039 2.9999C8.35039 3.1932 8.19369 3.3499 8.00039 3.3499H2.00039C1.80709 3.3499 1.65039 3.1932 1.65039 2.9999ZM1.65039 4.9999C1.65039 4.8066 1.80709 4.6499 2.00039 4.6499H8.00039C8.19369 4.6499 8.35039 4.8066 8.35039 4.9999C8.35039 5.1932 8.19369 5.3499 8.00039 5.3499H2.00039C1.80709 5.3499 1.65039 5.1932 1.65039 4.9999ZM2.00039 6.6499C1.80709 6.6499 1.65039 6.8066 1.65039 6.9999C1.65039 7.1932 1.80709 7.3499 2.00039 7.3499H8.00039C8.19369 7.3499 8.35039 7.1932 8.35039 6.9999C8.35039 6.8066 8.19369 6.6499 8.00039 6.6499H2.00039Z"></path></svg> </button> </div></div> <nav aria-label="Main" class="ml-auto hidden lg:block"><ul class="flex items-center space-x-1.5 2xl:space-x-2"><li class="hover:text-indigo-700"><a class="group flex items-center px-2 py-0.5 dark:hover:text-gray-400" href="/models"><svg class="mr-1.5 text-gray-400 group-hover:text-indigo-500" style="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path class="uim-quaternary" d="M20.23 7.24L12 12L3.77 7.24a1.98 1.98 0 0 1 .7-.71L11 2.76c.62-.35 1.38-.35 2 0l6.53 3.77c.29.173.531.418.7.71z" opacity=".25" fill="currentColor"></path><path class="uim-tertiary" d="M12 12v9.5a2.09 2.09 0 0 1-.91-.21L4.5 17.48a2.003 2.003 0 0 1-1-1.73v-7.5a2.06 2.06 0 0 1 .27-1.01L12 12z" opacity=".5" fill="currentColor"></path><path class="uim-primary" d="M20.5 8.25v7.5a2.003 2.003 0 0 1-1 1.73l-6.62 3.82c-.275.13-.576.198-.88.2V12l8.23-4.76c.175.308.268.656.27 1.01z" fill="currentColor"></path></svg> Models</a> </li><li class="hover:text-red-700"><a class="group flex items-center px-2 py-0.5 dark:hover:text-gray-400" href="/datasets"><svg class="mr-1.5 text-gray-400 group-hover:text-red-500" style="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 25 25"><ellipse cx="12.5" cy="5" fill="currentColor" fill-opacity="0.25" rx="7.5" ry="2"></ellipse><path d="M12.5 15C16.6421 15 20 14.1046 20 13V20C20 21.1046 16.6421 22 12.5 22C8.35786 22 5 21.1046 5 20V13C5 14.1046 8.35786 15 12.5 15Z" fill="currentColor" opacity="0.5"></path><path d="M12.5 7C16.6421 7 20 6.10457 20 5V11.5C20 12.6046 16.6421 13.5 12.5 13.5C8.35786 13.5 5 12.6046 5 11.5V5C5 6.10457 8.35786 7 12.5 7Z" fill="currentColor" opacity="0.5"></path><path d="M5.23628 12C5.08204 12.1598 5 12.8273 5 13C5 14.1046 8.35786 15 12.5 15C16.6421 15 20 14.1046 20 13C20 12.8273 19.918 12.1598 19.7637 12C18.9311 12.8626 15.9947 13.5 12.5 13.5C9.0053 13.5 6.06886 12.8626 5.23628 12Z" fill="currentColor"></path></svg> Datasets</a> </li><li class="hover:text-blue-700"><a class="group flex items-center px-2 py-0.5 dark:hover:text-gray-400" href="/spaces"><svg class="mr-1.5 text-gray-400 group-hover:text-blue-500" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" viewBox="0 0 25 25"><path opacity=".5" d="M6.016 14.674v4.31h4.31v-4.31h-4.31ZM14.674 14.674v4.31h4.31v-4.31h-4.31ZM6.016 6.016v4.31h4.31v-4.31h-4.31Z" fill="currentColor"></path><path opacity=".75" fill-rule="evenodd" clip-rule="evenodd" d="M3 4.914C3 3.857 3.857 3 4.914 3h6.514c.884 0 1.628.6 1.848 1.414a5.171 5.171 0 0 1 7.31 7.31c.815.22 1.414.964 1.414 1.848v6.514A1.914 1.914 0 0 1 20.086 22H4.914A1.914 1.914 0 0 1 3 20.086V4.914Zm3.016 1.102v4.31h4.31v-4.31h-4.31Zm0 12.968v-4.31h4.31v4.31h-4.31Zm8.658 0v-4.31h4.31v4.31h-4.31Zm0-10.813a2.155 2.155 0 1 1 4.31 0 2.155 2.155 0 0 1-4.31 0Z" fill="currentColor"></path><path opacity=".25" d="M16.829 6.016a2.155 2.155 0 1 0 0 4.31 2.155 2.155 0 0 0 0-4.31Z" fill="currentColor"></path></svg> Spaces</a> </li><li class="hover:text-yellow-700 max-xl:hidden"><a class="group flex items-center px-2 py-0.5 dark:hover:text-gray-400" href="/posts"><svg class="mr-1.5 text-gray-400 group-hover:text-yellow-500 !text-yellow-500" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" viewBox="0 0 12 12" preserveAspectRatio="xMidYMid meet"><path fill="currentColor" fill-rule="evenodd" d="M3.73 2.4A4.25 4.25 0 1 1 6 10.26H2.17l-.13-.02a.43.43 0 0 1-.3-.43l.01-.06a.43.43 0 0 1 .12-.22l.84-.84A4.26 4.26 0 0 1 3.73 2.4Z" clip-rule="evenodd"></path></svg> Posts</a> </li><li class="hover:text-yellow-700"><a class="group flex items-center px-2 py-0.5 dark:hover:text-gray-400" href="/docs"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="mr-1.5 text-gray-400 group-hover:text-yellow-500" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path opacity="0.5" d="M20.9022 5.10334L10.8012 10.8791L7.76318 9.11193C8.07741 8.56791 8.5256 8.11332 9.06512 7.7914L15.9336 3.73907C17.0868 3.08811 18.5002 3.26422 19.6534 3.91519L19.3859 3.73911C19.9253 4.06087 20.5879 4.56025 20.9022 5.10334Z" fill="currentColor"></path><path d="M10.7999 10.8792V28.5483C10.2136 28.5475 9.63494 28.4139 9.10745 28.1578C8.5429 27.8312 8.074 27.3621 7.74761 26.7975C7.42122 26.2327 7.24878 25.5923 7.24756 24.9402V10.9908C7.25062 10.3319 7.42358 9.68487 7.74973 9.1123L10.7999 10.8792Z" fill="currentColor" fill-opacity="0.75"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M21.3368 10.8499V6.918C21.3331 6.25959 21.16 5.61234 20.8346 5.03949L10.7971 10.8727L10.8046 10.874L21.3368 10.8499Z" fill="currentColor"></path><path opacity="0.5" d="M21.7937 10.8488L10.7825 10.8741V28.5486L21.7937 28.5234C23.3344 28.5234 24.5835 27.2743 24.5835 25.7335V13.6387C24.5835 12.0979 23.4365 11.1233 21.7937 10.8488Z" fill="currentColor"></path></svg> Docs</a> </li><li class="hover:text-green-700"><a class="group flex items-center px-2 py-0.5 dark:hover:text-gray-400" href="/enterprise"><svg class="mr-1.5 text-gray-400 group-hover:text-green-500" xmlns="http://www.w3.org/2000/svg" fill="none" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 33 27"><path fill="currentColor" fill-rule="evenodd" d="M13.5.7a8.7 8.7 0 0 0-7.7 5.7L1 20.6c-1 3.1.9 5.7 4.1 5.7h15c3.3 0 6.8-2.6 7.8-5.7l4.6-14.2c1-3.1-.8-5.7-4-5.7h-15Zm1.1 5.7L9.8 20.3h9.8l1-3.1h-5.8l.8-2.5h4.8l1.1-3h-4.8l.8-2.3H23l1-3h-9.5Z" clip-rule="evenodd"></path></svg> Enterprise</a> </li> <li><a class="group flex items-center px-2 py-0.5 hover:text-gray-500 dark:hover:text-gray-400" href="/pricing">Pricing </a></li> <li><div class="relative group"> <button class="px-2 py-0.5 hover:text-gray-500 dark:hover:text-gray-600 flex items-center " type="button"> <svg class=" text-gray-500 w-5 group-hover:text-gray-400 dark:text-gray-300 dark:group-hover:text-gray-400" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" viewBox="0 0 32 18" preserveAspectRatio="xMidYMid meet"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.4504 3.30221C14.4504 2.836 14.8284 2.45807 15.2946 2.45807H28.4933C28.9595 2.45807 29.3374 2.836 29.3374 3.30221C29.3374 3.76842 28.9595 4.14635 28.4933 4.14635H15.2946C14.8284 4.14635 14.4504 3.76842 14.4504 3.30221Z" fill="currentColor"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M14.4504 9.00002C14.4504 8.53382 14.8284 8.15588 15.2946 8.15588H28.4933C28.9595 8.15588 29.3374 8.53382 29.3374 9.00002C29.3374 9.46623 28.9595 9.84417 28.4933 9.84417H15.2946C14.8284 9.84417 14.4504 9.46623 14.4504 9.00002Z" fill="currentColor"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M14.4504 14.6978C14.4504 14.2316 14.8284 13.8537 15.2946 13.8537H28.4933C28.9595 13.8537 29.3374 14.2316 29.3374 14.6978C29.3374 15.164 28.9595 15.542 28.4933 15.542H15.2946C14.8284 15.542 14.4504 15.164 14.4504 14.6978Z" fill="currentColor"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M1.94549 6.87377C2.27514 6.54411 2.80962 6.54411 3.13928 6.87377L6.23458 9.96907L9.32988 6.87377C9.65954 6.54411 10.194 6.54411 10.5237 6.87377C10.8533 7.20343 10.8533 7.73791 10.5237 8.06756L6.23458 12.3567L1.94549 8.06756C1.61583 7.73791 1.61583 7.20343 1.94549 6.87377Z" fill="currentColor"></path></svg> </button> </div></li> <li><hr class="h-5 w-0.5 border-none bg-gray-100 dark:bg-gray-800"></li> <li><a class="block cursor-pointer whitespace-nowrap px-2 py-0.5 hover:text-gray-500 dark:hover:text-gray-400" href="/login">Log In </a></li> <li><a class="whitespace-nowrap rounded-full border border-transparent bg-gray-900 px-3 py-1 leading-none text-white hover:border-black hover:bg-white hover:text-black" href="/join">Sign Up </a></li></ul></nav></div></header></div> <div class="SVELTE_HYDRATER contents" data-target="SSOBanner" data-props="{}"></div> <main class="flex flex-1 flex-col"> <div class="SVELTE_HYDRATER contents" data-target="DatasetHeader" data-props="{&quot;activeTab&quot;:&quot;datasetCard&quot;,&quot;author&quot;:{&quot;avatarUrl&quot;:&quot;https://cdn-avatars.huggingface.co/v1/production/uploads/1583646260758-5e64858c87403103f9f1055d.png&quot;,&quot;fullname&quot;:&quot;Microsoft&quot;,&quot;name&quot;:&quot;microsoft&quot;,&quot;type&quot;:&quot;org&quot;,&quot;isHf&quot;:false,&quot;isMod&quot;:false,&quot;isEnterprise&quot;:false,&quot;followerCount&quot;:5413},&quot;canReadRepoSettings&quot;:false,&quot;dataset&quot;:{&quot;author&quot;:&quot;microsoft&quot;,&quot;cardData&quot;:{&quot;license&quot;:&quot;cdla-permissive-2.0&quot;,&quot;task_categories&quot;:[&quot;text-generation&quot;,&quot;text2text-generation&quot;,&quot;other&quot;],&quot;tags&quot;:[&quot;code&quot;,&quot;fstar&quot;,&quot;popai&quot;],&quot;pretty_name&quot;:&quot;PoPAI-FStarDataSet&quot;,&quot;size_categories&quot;:[&quot;10K<n<100K&quot;],&quot;language&quot;:[&quot;code&quot;,&quot;fst&quot;]},&quot;cardExists&quot;:true,&quot;createdAt&quot;:&quot;2024-07-16T20:18:35.000Z&quot;,&quot;description&quot;:&quot;\n\t\n\t\t\n\t\n\t\n\t\tProof Oriented Programming with AI (PoPAI) - FStarDataSet\n\t\n\nThis dataset contains programs and proofs in F* proof-oriented programming language. \nThe data, proposed in Towards Neural Synthesis for SMT-Assisted Proof-Oriented Programming,\nis an archive of source code, build artifacts, and metadata assembled from eight different F⋆-based open source projects on GitHub.\n\n\t\n\t\t\n\t\n\t\n\t\tPrimary-Objective\n\t\n\nThis dataset's primary objective is to train and evaluate Proof-oriented… See the full description on the dataset page: https://huggingface.co/datasets/microsoft/FStarDataSet.&quot;,&quot;downloads&quot;:131,&quot;downloadsAllTime&quot;:290,&quot;id&quot;:&quot;microsoft/FStarDataSet&quot;,&quot;isLikedByUser&quot;:false,&quot;lastModified&quot;:&quot;2024-07-25T22:35:13.000Z&quot;,&quot;likes&quot;:2,&quot;datasetsServerInfo&quot;:{&quot;viewer&quot;:&quot;viewer&quot;,&quot;numRows&quot;:32054,&quot;libraries&quot;:[&quot;datasets&quot;,&quot;dask&quot;,&quot;mlcroissant&quot;,&quot;polars&quot;],&quot;formats&quot;:[&quot;json&quot;],&quot;modalities&quot;:[&quot;text&quot;]},&quot;discussionsDisabled&quot;:false,&quot;repoType&quot;:&quot;dataset&quot;,&quot;private&quot;:false,&quot;gated&quot;:false,&quot;tags&quot;:[&quot;task_categories:text-generation&quot;,&quot;task_categories:text2text-generation&quot;,&quot;task_categories:other&quot;,&quot;language:code&quot;,&quot;language:fst&quot;,&quot;license:cdla-permissive-2.0&quot;,&quot;size_categories:10K<n<100K&quot;,&quot;format:json&quot;,&quot;modality:text&quot;,&quot;library:datasets&quot;,&quot;library:dask&quot;,&quot;library:mlcroissant&quot;,&quot;library:polars&quot;,&quot;arxiv:2405.01787&quot;,&quot;region:us&quot;,&quot;code&quot;,&quot;fstar&quot;,&quot;popai&quot;],&quot;tag_objs&quot;:[{&quot;id&quot;:&quot;task_categories:text-generation&quot;,&quot;label&quot;:&quot;text-generation&quot;,&quot;type&quot;:&quot;task_categories&quot;,&quot;subType&quot;:&quot;nlp&quot;},{&quot;id&quot;:&quot;task_categories:text2text-generation&quot;,&quot;label&quot;:&quot;text2text-generation&quot;,&quot;type&quot;:&quot;task_categories&quot;,&quot;subType&quot;:&quot;nlp&quot;},{&quot;id&quot;:&quot;task_categories:other&quot;,&quot;label&quot;:&quot;other&quot;,&quot;type&quot;:&quot;task_categories&quot;,&quot;subType&quot;:&quot;other&quot;},{&quot;id&quot;:&quot;language:code&quot;,&quot;label&quot;:&quot;code&quot;,&quot;type&quot;:&quot;language&quot;},{&quot;id&quot;:&quot;language:fst&quot;,&quot;label&quot;:&quot;fst&quot;,&quot;type&quot;:&quot;language&quot;},{&quot;id&quot;:&quot;license:cdla-permissive-2.0&quot;,&quot;label&quot;:&quot;cdla-permissive-2.0&quot;,&quot;type&quot;:&quot;license&quot;},{&quot;id&quot;:&quot;size_categories:10K<n<100K&quot;,&quot;label&quot;:&quot;10K - 100K&quot;,&quot;type&quot;:&quot;size_categories&quot;},{&quot;id&quot;:&quot;format:json&quot;,&quot;label&quot;:&quot;json&quot;,&quot;type&quot;:&quot;format&quot;},{&quot;id&quot;:&quot;modality:text&quot;,&quot;label&quot;:&quot;Text&quot;,&quot;type&quot;:&quot;modality&quot;},{&quot;id&quot;:&quot;library:datasets&quot;,&quot;label&quot;:&quot;Datasets&quot;,&quot;type&quot;:&quot;library&quot;},{&quot;id&quot;:&quot;library:dask&quot;,&quot;label&quot;:&quot;Dask&quot;,&quot;type&quot;:&quot;library&quot;},{&quot;id&quot;:&quot;library:mlcroissant&quot;,&quot;label&quot;:&quot;Croissant&quot;,&quot;type&quot;:&quot;library&quot;},{&quot;id&quot;:&quot;library:polars&quot;,&quot;label&quot;:&quot;Polars&quot;,&quot;type&quot;:&quot;library&quot;},{&quot;id&quot;:&quot;arxiv:2405.01787&quot;,&quot;label&quot;:&quot;arxiv:2405.01787&quot;,&quot;type&quot;:&quot;arxiv&quot;,&quot;extra&quot;:{&quot;paperTitle&quot;:&quot;Towards Neural Synthesis for SMT-Assisted Proof-Oriented Programming&quot;}},{&quot;type&quot;:&quot;region&quot;,&quot;label&quot;:&quot;🇺🇸 Region: US&quot;,&quot;id&quot;:&quot;region:us&quot;},{&quot;id&quot;:&quot;code&quot;,&quot;label&quot;:&quot;code&quot;,&quot;type&quot;:&quot;other&quot;},{&quot;id&quot;:&quot;fstar&quot;,&quot;label&quot;:&quot;fstar&quot;,&quot;type&quot;:&quot;other&quot;},{&quot;id&quot;:&quot;popai&quot;,&quot;label&quot;:&quot;popai&quot;,&quot;type&quot;:&quot;other&quot;}],&quot;hasBlockedOids&quot;:false},&quot;discussionsStats&quot;:{&quot;closed&quot;:1,&quot;open&quot;:1,&quot;total&quot;:2}}"><header class="from-gray-50-to-white border-b border-gray-100 bg-gradient-to-t via-white dark:via-gray-950 pt-6 sm:pt-9"><div class="container relative "><h1 class="flex flex-wrap items-center leading-tight mb-3 text-lg max-sm:gap-y-1.5 md:text-xl"><a href="/datasets" class="group flex items-center"><svg class="mr-1.5 text-gray-400" style="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 25 25"><ellipse cx="12.5" cy="5" fill="currentColor" fill-opacity="0.25" rx="7.5" ry="2"></ellipse><path d="M12.5 15C16.6421 15 20 14.1046 20 13V20C20 21.1046 16.6421 22 12.5 22C8.35786 22 5 21.1046 5 20V13C5 14.1046 8.35786 15 12.5 15Z" fill="currentColor" opacity="0.5"></path><path d="M12.5 7C16.6421 7 20 6.10457 20 5V11.5C20 12.6046 16.6421 13.5 12.5 13.5C8.35786 13.5 5 12.6046 5 11.5V5C5 6.10457 8.35786 7 12.5 7Z" fill="currentColor" opacity="0.5"></path><path d="M5.23628 12C5.08204 12.1598 5 12.8273 5 13C5 14.1046 8.35786 15 12.5 15C16.6421 15 20 14.1046 20 13C20 12.8273 19.918 12.1598 19.7637 12C18.9311 12.8626 15.9947 13.5 12.5 13.5C9.0053 13.5 6.06886 12.8626 5.23628 12Z" fill="currentColor"></path></svg> <span class="mr-2.5 font-semibold text-gray-400 group-hover:text-gray-500">Datasets:</span></a> <div class="group flex flex-none items-center"><div class="relative mr-1 flex items-center"> <img alt="" class="w-3.5 h-3.5 rounded flex-none" src="https://cdn-avatars.huggingface.co/v1/production/uploads/1583646260758-5e64858c87403103f9f1055d.png" crossorigin="anonymous"></div> <a href="/microsoft" class="text-gray-400 hover:text-blue-600">microsoft</a> <div class="mx-0.5 text-gray-300">/</div></div> <div class="max-w-full "><a class="break-words font-mono font-semibold hover:text-blue-600 " href="/datasets/microsoft/FStarDataSet">FStarDataSet</a> <button class="relative text-sm mr-4 inline-flex cursor-pointer items-center text-sm focus:outline-none mx-0.5 text-gray-600 " title="Copy dataset name to clipboard" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> </button></div> <div class="inline-flex items-center overflow-hidden whitespace-nowrap rounded-md border bg-white text-sm leading-none text-gray-500 mr-2"><button class="relative flex items-center overflow-hidden from-red-50 to-transparent dark:from-red-900 px-1.5 py-1 hover:bg-gradient-to-t focus:outline-none" title="Like"><svg class="left-1.5 absolute" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32" fill="currentColor"><path d="M22.45,6a5.47,5.47,0,0,1,3.91,1.64,5.7,5.7,0,0,1,0,8L16,26.13,5.64,15.64a5.7,5.7,0,0,1,0-8,5.48,5.48,0,0,1,7.82,0L16,10.24l2.53-2.58A5.44,5.44,0,0,1,22.45,6m0-2a7.47,7.47,0,0,0-5.34,2.24L16,7.36,14.89,6.24a7.49,7.49,0,0,0-10.68,0,7.72,7.72,0,0,0,0,10.82L16,29,27.79,17.06a7.72,7.72,0,0,0,0-10.82A7.49,7.49,0,0,0,22.45,4Z"></path></svg> <span class="ml-4 pl-0.5 ">like</span></button> <button class="flex items-center border-l px-1.5 py-1 text-gray-400 hover:bg-gray-50 focus:bg-gray-100 focus:outline-none dark:hover:bg-gray-900 dark:focus:bg-gray-800" title="See users who liked this repository">2</button></div> <div class="relative flex items-center gap-1.5 "><div class="mr-2 inline-flex h-6 items-center overflow-hidden whitespace-nowrap rounded-md border text-sm text-gray-500"><button class="relative flex h-full max-w-56 items-center gap-1.5 overflow-hidden px-1.5 hover:bg-gray-50 focus:bg-gray-100 focus:outline-none dark:hover:bg-gray-900 dark:focus:bg-gray-800" type="button" ><div class="flex h-full flex-1 items-center justify-center ">Follow</div> <img alt="" class="size-3 flex-none rounded-sm" src="https://cdn-avatars.huggingface.co/v1/production/uploads/1583646260758-5e64858c87403103f9f1055d.png"> <span class="truncate">Microsoft</span></button> <button class="flex h-full items-center border-l pl-1.5 pr-1.5 text-gray-400 hover:bg-gray-50 focus:bg-gray-100 focus:outline-none dark:hover:bg-gray-900 dark:focus:bg-gray-800" title="Show Microsoft's followers" type="button">5,413</button></div> </div> </h1> <div class="mb-3 flex flex-wrap md:mb-4"><div class="mr-1 flex flex-wrap items-center"><span class="mb-1 mr-1 p-1 text-sm leading-tight text-gray-400 md:mb-1.5">Tasks: </span> <a class="mb-1 mr-1 md:mb-1.5 md:mr-1.5 rounded-lg" href="/datasets?task_categories=task_categories%3Atext-generation"><div class="tag tag-white "><div class="tag-ico -ml-2 tag-ico-indigo"><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 18 18"><path d="M16.2607 8.08202L14.468 6.28928C14.3063 6.12804 14.0873 6.03749 13.859 6.03749C13.6307 6.03749 13.4117 6.12804 13.25 6.28928L5.6375 13.904V16.9125H8.64607L16.2607 9.30002C16.422 9.13836 16.5125 8.91935 16.5125 8.69102C16.5125 8.4627 16.422 8.24369 16.2607 8.08202V8.08202ZM8.1953 15.825H6.725V14.3547L11.858 9.22118L13.3288 10.6915L8.1953 15.825ZM14.0982 9.92262L12.6279 8.45232L13.8606 7.21964L15.3309 8.68994L14.0982 9.92262Z"></path><path d="M6.18125 9.84373H7.26875V6.03748H8.9V4.94998H4.55V6.03748H6.18125V9.84373Z"></path><path d="M4.55 11.475H2.375V2.775H11.075V4.95H12.1625V2.775C12.1625 2.48658 12.0479 2.20997 11.844 2.00602C11.64 1.80208 11.3634 1.6875 11.075 1.6875H2.375C2.08658 1.6875 1.80997 1.80208 1.60602 2.00602C1.40207 2.20997 1.2875 2.48658 1.2875 2.775V11.475C1.2875 11.7634 1.40207 12.04 1.60602 12.244C1.80997 12.4479 2.08658 12.5625 2.375 12.5625H4.55V11.475Z"></path></svg></div> <span>Text Generation</span> </div></a><a class="mb-1 mr-1 md:mb-1.5 md:mr-1.5 rounded-lg" href="/datasets?task_categories=task_categories%3Atext2text-generation"><div class="tag tag-white "><div class="tag-ico -ml-2 tag-ico-indigo"><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 18 18"><path d="M4.00626 16.5125C3.46854 16.5125 2.9429 16.353 2.4958 16.0543C2.0487 15.7556 1.70024 15.3309 1.49446 14.8342C1.28868 14.3374 1.23484 13.7907 1.33975 13.2633C1.44465 12.7359 1.70359 12.2515 2.08381 11.8713C2.46403 11.4911 2.94847 11.2321 3.47586 11.1272C4.00324 11.0223 4.54989 11.0762 5.04668 11.2819C5.54346 11.4877 5.96807 11.8362 6.26681 12.2833C6.56555 12.7304 6.72501 13.256 6.72501 13.7937C6.72414 14.5145 6.43743 15.2055 5.92775 15.7152C5.41807 16.2249 4.72705 16.5116 4.00626 16.5125V16.5125ZM4.00626 12.1625C3.68363 12.1625 3.36824 12.2582 3.09998 12.4374C2.83173 12.6166 2.62264 12.8714 2.49918 13.1695C2.37571 13.4676 2.34341 13.7955 2.40635 14.112C2.46929 14.4284 2.62465 14.7191 2.85279 14.9472C3.08092 15.1753 3.37158 15.3307 3.68802 15.3936C4.00445 15.4566 4.33244 15.4243 4.63051 15.3008C4.92858 15.1773 5.18335 14.9683 5.36259 14.7C5.54184 14.4317 5.63751 14.1164 5.63751 13.7937C5.63708 13.3612 5.46507 12.9466 5.15925 12.6407C4.85342 12.3349 4.43876 12.1629 4.00626 12.1625Z"></path><path d="M13.25 14.3375H7.81251V13.25H13.25V9.44371H4.55001C4.26167 9.44343 3.98523 9.32876 3.78135 9.12487C3.57747 8.92099 3.4628 8.64455 3.46251 8.35621V4.54996C3.4628 4.26163 3.57747 3.98519 3.78135 3.7813C3.98523 3.57742 4.26167 3.46275 4.55001 3.46246H9.98751V4.54996H4.55001V8.35621H13.25C13.5383 8.3565 13.8148 8.47117 14.0187 8.67505C14.2226 8.87894 14.3372 9.15538 14.3375 9.44371V13.25C14.3372 13.5383 14.2226 13.8147 14.0187 14.0186C13.8148 14.2225 13.5383 14.3372 13.25 14.3375V14.3375Z"></path><path d="M15.425 6.72504H12.1625C11.8742 6.72475 11.5977 6.61008 11.3939 6.4062C11.19 6.20231 11.0753 5.92587 11.075 5.63754V2.37504C11.0753 2.0867 11.19 1.81026 11.3939 1.60638C11.5977 1.40249 11.8742 1.28782 12.1625 1.28754H15.425C15.7133 1.28782 15.9898 1.40249 16.1937 1.60638C16.3976 1.81026 16.5122 2.0867 16.5125 2.37504V5.63754C16.5122 5.92587 16.3976 6.20231 16.1937 6.4062C15.9898 6.61008 15.7133 6.72475 15.425 6.72504V6.72504ZM12.1625 2.37504V5.63754H15.425V2.37504H12.1625Z"></path></svg></div> <span>Text2Text Generation</span> </div></a><a class="mb-1 mr-1 md:mb-1.5 md:mr-1.5 rounded-lg" href="/datasets?task_categories=task_categories%3Aother"><div class="tag tag-white "><div class="tag-ico -ml-2 tag-ico-blue"><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 18 19"><path d="M12.3625 13.85H10.1875V12.7625H12.3625V10.5875H13.45V12.7625C13.4497 13.0508 13.335 13.3272 13.1312 13.5311C12.9273 13.735 12.6508 13.8497 12.3625 13.85V13.85Z"></path><path d="M5.8375 8.41246H4.75V6.23746C4.75029 5.94913 4.86496 5.67269 5.06884 5.4688C5.27272 5.26492 5.54917 5.15025 5.8375 5.14996H8.0125V6.23746H5.8375V8.41246Z"></path><path d="M15.625 5.14998H13.45V2.97498C13.4497 2.68665 13.335 2.4102 13.1312 2.20632C12.9273 2.00244 12.6508 1.88777 12.3625 1.88748H2.575C2.28666 1.88777 2.01022 2.00244 1.80633 2.20632C1.60245 2.4102 1.48778 2.68665 1.4875 2.97498V12.7625C1.48778 13.0508 1.60245 13.3273 1.80633 13.5311C2.01022 13.735 2.28666 13.8497 2.575 13.85H4.75V16.025C4.75028 16.3133 4.86495 16.5898 5.06883 16.7936C5.27272 16.9975 5.54916 17.1122 5.8375 17.1125H15.625C15.9133 17.1122 16.1898 16.9975 16.3937 16.7936C16.5975 16.5898 16.7122 16.3133 16.7125 16.025V6.23748C16.7122 5.94915 16.5975 5.6727 16.3937 5.46882C16.1898 5.26494 15.9133 5.15027 15.625 5.14998V5.14998ZM15.625 16.025H5.8375V13.85H8.0125V12.7625H5.8375V10.5875H4.75V12.7625H2.575V2.97498H12.3625V5.14998H10.1875V6.23748H12.3625V8.41248H13.45V6.23748H15.625V16.025Z"></path></svg></div> <span>Other</span> </div></a> </div><div class="mr-1 flex flex-wrap items-center"><span class="mb-1 mr-1 p-1 text-sm leading-tight text-gray-400 md:mb-1.5">Modalities: </span> <a class="mb-1 mr-1 md:mb-1.5 md:mr-1.5 rounded-lg" href="/datasets?modality=modality%3Atext"><div class="tag tag-white "> <svg class="text-red-700 dark:text-red-600" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.619 4.619C2.667 6.573 2.667 9.715 2.667 16s0 9.428 1.952 11.38C6.573 29.333 9.715 29.333 16 29.333s9.428 0 11.38-1.953c1.953-1.95 1.953-5.095 1.953-11.38s0-9.428-1.953-11.381C25.43 2.667 22.285 2.667 16 2.667s-9.428 0-11.381 1.952m8.65 3.714c-.573 0-1.109 0-1.546.066-.495.073-1.003.248-1.41.7-.392.436-.53.956-.59 1.452-.056.464-.056 1.04-.056 1.689V13a1 1 0 1 0 2 0v-.704c0-.724.001-1.176.041-1.505q.015-.15.061-.294a.2.2 0 0 1 .031-.061q0-.003.016-.01a.8.8 0 0 1 .203-.05c.272-.04.654-.043 1.314-.043H15v11.334h-2.333a1 1 0 1 0 0 2H20a1 1 0 0 0 0-2h-3V10.333h1.667c.66 0 1.042.003 1.314.043.123.019.18.04.203.05l.015.009a.2.2 0 0 1 .032.061c.018.05.042.14.061.295.04.329.041.781.041 1.506V13a1 1 0 1 0 2 0v-.76c0-.65 0-1.225-.056-1.69-.06-.495-.198-1.015-.59-1.453-.407-.45-.915-.625-1.41-.698-.437-.067-.973-.067-1.546-.066z" fill="currentColor"></path></svg> <span>Text</span> </div></a> </div><div class="mr-1 flex flex-wrap items-center"><span class="mb-1 mr-1 p-1 text-sm leading-tight text-gray-400 md:mb-1.5">Formats: </span> <a class="mb-1 mr-1 md:mb-1.5 md:mr-1.5 rounded-lg" href="/datasets?format=format%3Ajson"><div class="tag tag-white "> <svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 12 12"><path fill-rule="evenodd" clip-rule="evenodd" d="M8.917 2.25h-.834v.833h.834v2.084A.833.833 0 0 0 9.75 6a.833.833 0 0 0-.833.833v2.084h-.834v.833h.834c.446-.113.833-.375.833-.833V7.25a.833.833 0 0 1 .833-.833H11v-.834h-.417a.833.833 0 0 1-.833-.833V3.083a.833.833 0 0 0-.833-.833Zm-5.834 0a.833.833 0 0 0-.833.833V4.75a.833.833 0 0 1-.833.833H1v.834h.417a.833.833 0 0 1 .833.833v1.667a.833.833 0 0 0 .833.833h.834v-.833h-.834V6.833A.833.833 0 0 0 2.25 6a.833.833 0 0 0 .833-.833V3.083h.834V2.25h-.834ZM6 7.25a.417.417 0 1 0 0 .833.417.417 0 0 0 0-.833Zm1.667 0a.417.417 0 1 0 0 .833.417.417 0 0 0 0-.833Zm-3.334 0a.417.417 0 1 0 0 .833.417.417 0 0 0 0-.833Z" fill="currentColor"></path></svg> <span>json</span> </div></a> </div><div class="mr-1 flex flex-wrap items-center"><span class="mb-1 mr-1 p-1 text-sm leading-tight text-gray-400 md:mb-1.5">Languages: </span> <a class="mb-1 mr-1 md:mb-1.5 md:mr-1.5 rounded-lg" href="/datasets?language=language%3Acode"><div class="tag tag-white "> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="text-green-600/80" preserveAspectRatio="xMidYMid meet" width="1em" height="1em" viewBox="0 0 10 10"><path fill-rule="evenodd" clip-rule="evenodd" d="M0.625 5C0.625 6.16032 1.08594 7.27312 1.90641 8.09359C2.72688 8.91406 3.83968 9.375 5 9.375C6.16032 9.375 7.27312 8.91406 8.09359 8.09359C8.91406 7.27312 9.375 6.16032 9.375 5C9.375 3.83968 8.91406 2.72688 8.09359 1.90641C7.27312 1.08594 6.16032 0.625 5 0.625C3.83968 0.625 2.72688 1.08594 1.90641 1.90641C1.08594 2.72688 0.625 3.83968 0.625 5ZM7.64365 7.48027C7.61734 7.50832 7.59054 7.53598 7.56326 7.56326C7.13828 7.98824 6.61864 8.2968 6.0539 8.46842C6.29802 8.11949 6.49498 7.64804 6.63475 7.09483C7.00845 7.18834 7.35014 7.3187 7.64365 7.48027ZM8.10076 6.87776C8.37677 6.42196 8.55005 5.90894 8.60556 5.37499H6.86808C6.85542 5.71597 6.82551 6.04557 6.77971 6.35841C7.25309 6.47355 7.68808 6.6414 8.062 6.85549C8.07497 6.86283 8.08789 6.87025 8.10076 6.87776ZM6.03795 6.22536C6.07708 5.95737 6.1044 5.67232 6.11705 5.37499H3.88295C3.89666 5.69742 3.92764 6.00542 3.9722 6.29287C4.37075 6.21726 4.79213 6.17749 5.224 6.17749C5.50054 6.17749 5.77294 6.19376 6.03795 6.22536ZM4.1261 7.02673C4.34894 7.84835 4.68681 8.375 5 8.375C5.32122 8.375 5.66839 7.82101 5.8908 6.963C5.67389 6.93928 5.45082 6.92699 5.224 6.92699C4.84316 6.92699 4.47332 6.96176 4.1261 7.02673ZM3.39783 7.21853C3.53498 7.71842 3.72038 8.14579 3.9461 8.46842C3.42141 8.30898 2.93566 8.03132 2.52857 7.65192C2.77253 7.48017 3.06711 7.33382 3.39783 7.21853ZM3.23916 6.48077C3.18263 6.13193 3.14625 5.76074 3.13192 5.37499H1.39444C1.4585 5.99112 1.67936 6.57938 2.03393 7.08403C2.3706 6.83531 2.78055 6.63162 3.23916 6.48077ZM1.39444 4.62499H3.13192C3.14615 4.24204 3.18211 3.87344 3.23794 3.52681C2.77814 3.37545 2.36731 3.17096 2.03024 2.92123C1.67783 3.42469 1.45828 4.011 1.39444 4.62499ZM2.5237 2.35262C2.76812 2.52552 3.06373 2.67281 3.39584 2.78875C3.53318 2.28573 3.71928 1.85578 3.9461 1.53158C3.41932 1.69166 2.93178 1.97089 2.5237 2.35262ZM3.97101 3.71489C3.92709 4.00012 3.89654 4.30547 3.88295 4.62499H6.11705C6.10453 4.33057 6.07761 4.04818 6.03909 3.78248C5.77372 3.81417 5.50093 3.83049 5.224 3.83049C4.79169 3.83049 4.3699 3.79065 3.97101 3.71489ZM5.8928 3.04476C5.67527 3.06863 5.45151 3.08099 5.224 3.08099C4.84241 3.08099 4.47186 3.04609 4.12405 2.98086C4.34686 2.1549 4.68584 1.625 5 1.625C5.32218 1.625 5.67048 2.18233 5.8928 3.04476ZM6.78083 3.6493C6.826 3.95984 6.85552 4.28682 6.86808 4.62499H8.60556C8.55029 4.09337 8.37827 3.58251 8.10436 3.1282C8.0903 3.1364 8.07618 3.14449 8.062 3.15249C7.68838 3.36641 7.25378 3.53417 6.78083 3.6493ZM7.64858 2.52499C7.35446 2.68754 7.0117 2.81868 6.63664 2.91268C6.49676 2.35623 6.29913 1.88209 6.0539 1.53158C6.61864 1.7032 7.13828 2.01176 7.56326 2.43674C7.59224 2.46572 7.62068 2.49514 7.64858 2.52499Z" fill="currentColor"></path></svg> <span>code</span> </div></a><a class="mb-1 mr-1 md:mb-1.5 md:mr-1.5 rounded-lg" href="/datasets?language=language%3Afst"><div class="tag tag-white "> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="text-green-600/80" preserveAspectRatio="xMidYMid meet" width="1em" height="1em" viewBox="0 0 10 10"><path fill-rule="evenodd" clip-rule="evenodd" d="M0.625 5C0.625 6.16032 1.08594 7.27312 1.90641 8.09359C2.72688 8.91406 3.83968 9.375 5 9.375C6.16032 9.375 7.27312 8.91406 8.09359 8.09359C8.91406 7.27312 9.375 6.16032 9.375 5C9.375 3.83968 8.91406 2.72688 8.09359 1.90641C7.27312 1.08594 6.16032 0.625 5 0.625C3.83968 0.625 2.72688 1.08594 1.90641 1.90641C1.08594 2.72688 0.625 3.83968 0.625 5ZM7.64365 7.48027C7.61734 7.50832 7.59054 7.53598 7.56326 7.56326C7.13828 7.98824 6.61864 8.2968 6.0539 8.46842C6.29802 8.11949 6.49498 7.64804 6.63475 7.09483C7.00845 7.18834 7.35014 7.3187 7.64365 7.48027ZM8.10076 6.87776C8.37677 6.42196 8.55005 5.90894 8.60556 5.37499H6.86808C6.85542 5.71597 6.82551 6.04557 6.77971 6.35841C7.25309 6.47355 7.68808 6.6414 8.062 6.85549C8.07497 6.86283 8.08789 6.87025 8.10076 6.87776ZM6.03795 6.22536C6.07708 5.95737 6.1044 5.67232 6.11705 5.37499H3.88295C3.89666 5.69742 3.92764 6.00542 3.9722 6.29287C4.37075 6.21726 4.79213 6.17749 5.224 6.17749C5.50054 6.17749 5.77294 6.19376 6.03795 6.22536ZM4.1261 7.02673C4.34894 7.84835 4.68681 8.375 5 8.375C5.32122 8.375 5.66839 7.82101 5.8908 6.963C5.67389 6.93928 5.45082 6.92699 5.224 6.92699C4.84316 6.92699 4.47332 6.96176 4.1261 7.02673ZM3.39783 7.21853C3.53498 7.71842 3.72038 8.14579 3.9461 8.46842C3.42141 8.30898 2.93566 8.03132 2.52857 7.65192C2.77253 7.48017 3.06711 7.33382 3.39783 7.21853ZM3.23916 6.48077C3.18263 6.13193 3.14625 5.76074 3.13192 5.37499H1.39444C1.4585 5.99112 1.67936 6.57938 2.03393 7.08403C2.3706 6.83531 2.78055 6.63162 3.23916 6.48077ZM1.39444 4.62499H3.13192C3.14615 4.24204 3.18211 3.87344 3.23794 3.52681C2.77814 3.37545 2.36731 3.17096 2.03024 2.92123C1.67783 3.42469 1.45828 4.011 1.39444 4.62499ZM2.5237 2.35262C2.76812 2.52552 3.06373 2.67281 3.39584 2.78875C3.53318 2.28573 3.71928 1.85578 3.9461 1.53158C3.41932 1.69166 2.93178 1.97089 2.5237 2.35262ZM3.97101 3.71489C3.92709 4.00012 3.89654 4.30547 3.88295 4.62499H6.11705C6.10453 4.33057 6.07761 4.04818 6.03909 3.78248C5.77372 3.81417 5.50093 3.83049 5.224 3.83049C4.79169 3.83049 4.3699 3.79065 3.97101 3.71489ZM5.8928 3.04476C5.67527 3.06863 5.45151 3.08099 5.224 3.08099C4.84241 3.08099 4.47186 3.04609 4.12405 2.98086C4.34686 2.1549 4.68584 1.625 5 1.625C5.32218 1.625 5.67048 2.18233 5.8928 3.04476ZM6.78083 3.6493C6.826 3.95984 6.85552 4.28682 6.86808 4.62499H8.60556C8.55029 4.09337 8.37827 3.58251 8.10436 3.1282C8.0903 3.1364 8.07618 3.14449 8.062 3.15249C7.68838 3.36641 7.25378 3.53417 6.78083 3.6493ZM7.64858 2.52499C7.35446 2.68754 7.0117 2.81868 6.63664 2.91268C6.49676 2.35623 6.29913 1.88209 6.0539 1.53158C6.61864 1.7032 7.13828 2.01176 7.56326 2.43674C7.59224 2.46572 7.62068 2.49514 7.64858 2.52499Z" fill="currentColor"></path></svg> <span>fst</span> </div></a> </div><div class="mr-1 flex flex-wrap items-center"><span class="mb-1 mr-1 p-1 text-sm leading-tight text-gray-400 md:mb-1.5">Size: </span> <a class="mb-1 mr-1 md:mb-1.5 md:mr-1.5 rounded-lg" href="/datasets?size_categories=size_categories%3A10K%3Cn%3C100K"><div class="tag tag-white "> <span>10K - 100K</span> </div></a> </div><div class="mr-1 flex flex-wrap items-center"><span class="mb-1 mr-1 p-1 text-sm leading-tight text-gray-400 md:mb-1.5">ArXiv: </span> <div class="relative inline-block "> <button class="group mr-1 mb-1 md:mr-1.5 md:mb-1.5 rounded-full rounded-br-none " type="button"> <div class="tag tag-white rounded-full relative rounded-br-none pr-2.5"> <svg class="-mr-1 text-gray-400" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" viewBox="0 0 12 12" preserveAspectRatio="xMidYMid meet" fill="none"><path fill="currentColor" fill-rule="evenodd" d="M8.007 1.814a1.176 1.176 0 0 0-.732-.266H3.088c-.64 0-1.153.512-1.153 1.152v6.803c0 .64.513 1.152 1.153 1.152h5.54c.632 0 1.144-.511 1.144-1.152V3.816c0-.338-.137-.658-.412-.887L8.007 1.814Zm-1.875 1.81c0 .695.55 1.253 1.244 1.253h.983a.567.567 0 0 1 .553.585v4.041c0 .165-.119.302-.283.302h-5.55c-.156 0-.275-.137-.275-.302V2.7a.284.284 0 0 1 .284-.301h2.468a.574.574 0 0 1 .434.19.567.567 0 0 1 .142.395v.64Z" clip-rule="evenodd"></path><path fill="currentColor" fill-opacity=".2" fill-rule="evenodd" d="M6.132 3.624c0 .695.55 1.253 1.244 1.253h.97a.567.567 0 0 1 .566.585v4.041c0 .165-.119.302-.283.302h-5.55c-.156 0-.275-.137-.275-.302V2.7a.284.284 0 0 1 .284-.301h2.468a.567.567 0 0 1 .576.585v.64Z" clip-rule="evenodd"></path></svg> <span class="-mr-2 text-gray-400">arxiv:</span> <span>2405.01787</span> <div class="border-br-gray-200 absolute bottom-0.5 right-0.5 h-1 w-1 border-[3px] border-l-transparent border-t-transparent border-b-gray-200 border-r-gray-200 dark:border-b-gray-700 dark:border-r-gray-700"></div></div> </button> </div> </div><div class="mr-1 flex flex-wrap items-center"><span class="mb-1 mr-1 p-1 text-sm leading-tight text-gray-400 md:mb-1.5">Tags: </span> <a class="mb-1 mr-1 md:mb-1.5 md:mr-1.5 rounded-lg" href="/datasets?other=code"><div class="tag tag-white "> <span>code</span> </div></a><a class="mb-1 mr-1 md:mb-1.5 md:mr-1.5 rounded-lg" href="/datasets?other=fstar"><div class="tag tag-white "> <span>fstar</span> </div></a><a class="mb-1 mr-1 md:mb-1.5 md:mr-1.5 rounded-lg" href="/datasets?other=popai"><div class="tag tag-white "> <span>popai</span> </div></a> </div><div class="mr-1 flex flex-wrap items-center"><span class="mb-1 mr-1 p-1 text-sm leading-tight text-gray-400 md:mb-1.5">Libraries: </span> <a class="mb-1 mr-1 md:mb-1.5 md:mr-1.5 rounded-lg" href="/datasets?library=library%3Adatasets"><div class="tag tag-white "><svg class="text-black inline-block text-sm" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" preserveAspectRatio="xMidYMid meet" width="1em" height="1em" viewBox="0 0 95 88"><path fill="#fff" d="M94.25 70.08a8.28 8.28 0 0 1-.43 6.46 10.57 10.57 0 0 1-3 3.6 25.18 25.18 0 0 1-5.7 3.2 65.74 65.74 0 0 1-7.56 2.65 46.67 46.67 0 0 1-11.42 1.68c-5.42.05-10.09-1.23-13.4-4.5a40.4 40.4 0 0 1-10.14.03c-3.34 3.25-7.99 4.52-13.39 4.47a46.82 46.82 0 0 1-11.43-1.68 66.37 66.37 0 0 1-7.55-2.65c-2.28-.98-4.17-2-5.68-3.2a10.5 10.5 0 0 1-3.02-3.6c-.99-2-1.18-4.3-.42-6.46a8.54 8.54 0 0 1-.33-5.63c.25-.95.66-1.83 1.18-2.61a8.67 8.67 0 0 1 2.1-8.47 8.23 8.23 0 0 1 2.82-2.07 41.75 41.75 0 1 1 81.3-.12 8.27 8.27 0 0 1 3.11 2.19 8.7 8.7 0 0 1 2.1 8.47c.52.78.93 1.66 1.18 2.61a8.61 8.61 0 0 1-.32 5.63Z"></path><path fill="#FFD21E" d="M47.21 76.5a34.75 34.75 0 1 0 0-69.5 34.75 34.75 0 0 0 0 69.5Z"></path><path fill="#FF9D0B" d="M81.96 41.75a34.75 34.75 0 1 0-69.5 0 34.75 34.75 0 0 0 69.5 0Zm-73.5 0a38.75 38.75 0 1 1 77.5 0 38.75 38.75 0 0 1-77.5 0Z"></path><path fill="#3A3B45" d="M58.5 32.3c1.28.44 1.78 3.06 3.07 2.38a5 5 0 1 0-6.76-2.07c.61 1.15 2.55-.72 3.7-.32ZM34.95 32.3c-1.28.44-1.79 3.06-3.07 2.38a5 5 0 1 1 6.76-2.07c-.61 1.15-2.56-.72-3.7-.32Z"></path><path fill="#FF323D" d="M46.96 56.29c9.83 0 13-8.76 13-13.26 0-2.34-1.57-1.6-4.09-.36-2.33 1.15-5.46 2.74-8.9 2.74-7.19 0-13-6.88-13-2.38s3.16 13.26 13 13.26Z"></path><path fill="#3A3B45" fill-rule="evenodd" d="M39.43 54a8.7 8.7 0 0 1 5.3-4.49c.4-.12.81.57 1.24 1.28.4.68.82 1.37 1.24 1.37.45 0 .9-.68 1.33-1.35.45-.7.89-1.38 1.32-1.25a8.61 8.61 0 0 1 5 4.17c3.73-2.94 5.1-7.74 5.1-10.7 0-2.34-1.57-1.6-4.09-.36l-.14.07c-2.31 1.15-5.39 2.67-8.77 2.67s-6.45-1.52-8.77-2.67c-2.6-1.29-4.23-2.1-4.23.29 0 3.05 1.46 8.06 5.47 10.97Z" clip-rule="evenodd"></path><path fill="#FF9D0B" d="M70.71 37a3.25 3.25 0 1 0 0-6.5 3.25 3.25 0 0 0 0 6.5ZM24.21 37a3.25 3.25 0 1 0 0-6.5 3.25 3.25 0 0 0 0 6.5ZM17.52 48c-1.62 0-3.06.66-4.07 1.87a5.97 5.97 0 0 0-1.33 3.76 7.1 7.1 0 0 0-1.94-.3c-1.55 0-2.95.59-3.94 1.66a5.8 5.8 0 0 0-.8 7 5.3 5.3 0 0 0-1.79 2.82c-.24.9-.48 2.8.8 4.74a5.22 5.22 0 0 0-.37 5.02c1.02 2.32 3.57 4.14 8.52 6.1 3.07 1.22 5.89 2 5.91 2.01a44.33 44.33 0 0 0 10.93 1.6c5.86 0 10.05-1.8 12.46-5.34 3.88-5.69 3.33-10.9-1.7-15.92-2.77-2.78-4.62-6.87-5-7.77-.78-2.66-2.84-5.62-6.25-5.62a5.7 5.7 0 0 0-4.6 2.46c-1-1.26-1.98-2.25-2.86-2.82A7.4 7.4 0 0 0 17.52 48Zm0 4c.51 0 1.14.22 1.82.65 2.14 1.36 6.25 8.43 7.76 11.18.5.92 1.37 1.31 2.14 1.31 1.55 0 2.75-1.53.15-3.48-3.92-2.93-2.55-7.72-.68-8.01.08-.02.17-.02.24-.02 1.7 0 2.45 2.93 2.45 2.93s2.2 5.52 5.98 9.3c3.77 3.77 3.97 6.8 1.22 10.83-1.88 2.75-5.47 3.58-9.16 3.58-3.81 0-7.73-.9-9.92-1.46-.11-.03-13.45-3.8-11.76-7 .28-.54.75-.76 1.34-.76 2.38 0 6.7 3.54 8.57 3.54.41 0 .7-.17.83-.6.79-2.85-12.06-4.05-10.98-8.17.2-.73.71-1.02 1.44-1.02 3.14 0 10.2 5.53 11.68 5.53.11 0 .2-.03.24-.1.74-1.2.33-2.04-4.9-5.2-5.21-3.16-8.88-5.06-6.8-7.33.24-.26.58-.38 1-.38 3.17 0 10.66 6.82 10.66 6.82s2.02 2.1 3.25 2.1c.28 0 .52-.1.68-.38.86-1.46-8.06-8.22-8.56-11.01-.34-1.9.24-2.85 1.31-2.85Z"></path><path fill="#FFD21E" d="M38.6 76.69c2.75-4.04 2.55-7.07-1.22-10.84-3.78-3.77-5.98-9.3-5.98-9.3s-.82-3.2-2.69-2.9c-1.87.3-3.24 5.08.68 8.01 3.91 2.93-.78 4.92-2.29 2.17-1.5-2.75-5.62-9.82-7.76-11.18-2.13-1.35-3.63-.6-3.13 2.2.5 2.79 9.43 9.55 8.56 11-.87 1.47-3.93-1.71-3.93-1.71s-9.57-8.71-11.66-6.44c-2.08 2.27 1.59 4.17 6.8 7.33 5.23 3.16 5.64 4 4.9 5.2-.75 1.2-12.28-8.53-13.36-4.4-1.08 4.11 11.77 5.3 10.98 8.15-.8 2.85-9.06-5.38-10.74-2.18-1.7 3.21 11.65 6.98 11.76 7.01 4.3 1.12 15.25 3.49 19.08-2.12Z"></path><path fill="#FF9D0B" d="M77.4 48c1.62 0 3.07.66 4.07 1.87a5.97 5.97 0 0 1 1.33 3.76 7.1 7.1 0 0 1 1.95-.3c1.55 0 2.95.59 3.94 1.66a5.8 5.8 0 0 1 .8 7 5.3 5.3 0 0 1 1.78 2.82c.24.9.48 2.8-.8 4.74a5.22 5.22 0 0 1 .37 5.02c-1.02 2.32-3.57 4.14-8.51 6.1-3.08 1.22-5.9 2-5.92 2.01a44.33 44.33 0 0 1-10.93 1.6c-5.86 0-10.05-1.8-12.46-5.34-3.88-5.69-3.33-10.9 1.7-15.92 2.78-2.78 4.63-6.87 5.01-7.77.78-2.66 2.83-5.62 6.24-5.62a5.7 5.7 0 0 1 4.6 2.46c1-1.26 1.98-2.25 2.87-2.82A7.4 7.4 0 0 1 77.4 48Zm0 4c-.51 0-1.13.22-1.82.65-2.13 1.36-6.25 8.43-7.76 11.18a2.43 2.43 0 0 1-2.14 1.31c-1.54 0-2.75-1.53-.14-3.48 3.91-2.93 2.54-7.72.67-8.01a1.54 1.54 0 0 0-.24-.02c-1.7 0-2.45 2.93-2.45 2.93s-2.2 5.52-5.97 9.3c-3.78 3.77-3.98 6.8-1.22 10.83 1.87 2.75 5.47 3.58 9.15 3.58 3.82 0 7.73-.9 9.93-1.46.1-.03 13.45-3.8 11.76-7-.29-.54-.75-.76-1.34-.76-2.38 0-6.71 3.54-8.57 3.54-.42 0-.71-.17-.83-.6-.8-2.85 12.05-4.05 10.97-8.17-.19-.73-.7-1.02-1.44-1.02-3.14 0-10.2 5.53-11.68 5.53-.1 0-.19-.03-.23-.1-.74-1.2-.34-2.04 4.88-5.2 5.23-3.16 8.9-5.06 6.8-7.33-.23-.26-.57-.38-.98-.38-3.18 0-10.67 6.82-10.67 6.82s-2.02 2.1-3.24 2.1a.74.74 0 0 1-.68-.38c-.87-1.46 8.05-8.22 8.55-11.01.34-1.9-.24-2.85-1.31-2.85Z"></path><path fill="#FFD21E" d="M56.33 76.69c-2.75-4.04-2.56-7.07 1.22-10.84 3.77-3.77 5.97-9.3 5.97-9.3s.82-3.2 2.7-2.9c1.86.3 3.23 5.08-.68 8.01-3.92 2.93.78 4.92 2.28 2.17 1.51-2.75 5.63-9.82 7.76-11.18 2.13-1.35 3.64-.6 3.13 2.2-.5 2.79-9.42 9.55-8.55 11 .86 1.47 3.92-1.71 3.92-1.71s9.58-8.71 11.66-6.44c2.08 2.27-1.58 4.17-6.8 7.33-5.23 3.16-5.63 4-4.9 5.2.75 1.2 12.28-8.53 13.36-4.4 1.08 4.11-11.76 5.3-10.97 8.15.8 2.85 9.05-5.38 10.74-2.18 1.69 3.21-11.65 6.98-11.76 7.01-4.31 1.12-15.26 3.49-19.08-2.12Z"></path></svg> <span>Datasets</span> </div></a><a class="mb-1 mr-1 md:mb-1.5 md:mr-1.5 rounded-lg" href="/datasets?library=library%3Adask"><div class="tag tag-white "><svg class="text-black inline-block text-sm" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 12 12"><path d="m3.368 3.694 2.965-1.71A.095.095 0 0 0 6.38 1.9V.875a.49.49 0 0 0-.183-.394.468.468 0 0 0-.523-.034L1.526 2.84a.471.471 0 0 0-.235.408l-.002 5.405c0 .151.062.302.183.394.157.118.358.13.524.035l.878-.507a.095.095 0 0 0 .048-.082V4.465a.89.89 0 0 1 .446-.771Z" fill="#FFC11E"></path><path d="M10.475 2.919a.47.47 0 0 0-.47 0L5.856 5.312a.473.473 0 0 0-.236.408l-.002 5.425c0 .17.088.323.236.408a.466.466 0 0 0 .471 0l4.147-2.393a.473.473 0 0 0 .236-.408l.002-5.425a.467.467 0 0 0-.236-.408Z" fill="#EF1161"></path><path d="m5.647 4.949 2.737-1.58a.095.095 0 0 0 .047-.082V2.093a.49.49 0 0 0-.183-.394.468.468 0 0 0-.523-.035l-1.135.655-3.013 1.738a.471.471 0 0 0-.236.408v4.083L3.34 9.87c0 .152.062.302.183.394.157.118.358.13.524.035l1.106-.639a.094.094 0 0 0 .047-.082l.001-3.859a.89.89 0 0 1 .446-.77Z" fill="#FC6E6B"></path></svg> <span>Dask</span> </div></a><div class="relative inline-block "> <button class="group mr-1 mb-1 md:mr-1.5 md:mb-1.5 rounded-lg rounded-br-none " type="button"> <div class="tag tag-white relative rounded-br-none pr-2.5"><svg class="text-black inline-block text-sm" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" fill="none" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M22.2812 12.2656L25.9532 15.7187C26.8932 16.6587 28.0913 17.3931 29.0313 16.4531C29.8594 15.7812 29.9332 14.1 29.9532 13.5C29.9532 11.5625 28.9219 8.375 27.25 6.71875C25.5604 5.04493 23.3782 3.91692 22.7032 3.78125L22.2812 12.2656Z" fill="#F5AB6A"></path><path d="M22.2812 12.2656L25.9532 15.7187C26.8932 16.6587 28.0913 17.3931 29.0313 16.4531C29.8594 15.7812 29.9332 14.1 29.9532 13.5C29.9532 11.5625 28.9219 8.375 27.25 6.71875C25.5604 5.04493 23.3782 3.91692 22.7032 3.78125L22.2812 12.2656Z" fill="url(#paint0_radial_18_31665)"></path><g filter="url(#filter0_f_18_31665)"><path d="M22.2849 12.1817L23.4375 13.2656L24.4375 4.70312C23.5121 4.1242 23.0198 3.96369 22.6563 3.89062L22.2849 12.1817Z" fill="url(#paint1_linear_18_31665)"></path></g><path d="M22.7969 3.05741L21.8437 2.65269C19.6421 1.96765 17.2344 1.81208 14.6719 2.23236C12.1094 2.65264 11.5156 3.2442 11.5156 3.2442C10.896 3.3674 10.8671 3.88898 11.1718 4.45363C13.0797 6.72576 15.176 13.4043 18.0469 14.2506C18.89 14.4662 21.3791 14.4776 22.2019 14.1593L22.3238 14.108C22.6692 13.9745 23.1672 13.2814 23.1875 12.9118L23.4219 4.03043C23.4523 3.59924 23.1484 3.25204 22.7969 3.05741Z" fill="url(#paint2_radial_18_31665)"></path><path d="M22.7969 3.05741L21.8437 2.65269C19.6421 1.96765 17.2344 1.81208 14.6719 2.23236C12.1094 2.65264 11.5156 3.2442 11.5156 3.2442C10.896 3.3674 10.8671 3.88898 11.1718 4.45363C13.0797 6.72576 15.176 13.4043 18.0469 14.2506C18.89 14.4662 21.3791 14.4776 22.2019 14.1593L22.3238 14.108C22.6692 13.9745 23.1672 13.2814 23.1875 12.9118L23.4219 4.03043C23.4523 3.59924 23.1484 3.25204 22.7969 3.05741Z" fill="url(#paint3_radial_18_31665)"></path><path d="M22.7969 3.05741L21.8437 2.65269C19.6421 1.96765 17.2344 1.81208 14.6719 2.23236C12.1094 2.65264 11.5156 3.2442 11.5156 3.2442C10.896 3.3674 10.8671 3.88898 11.1718 4.45363C13.0797 6.72576 15.176 13.4043 18.0469 14.2506C18.89 14.4662 21.3791 14.4776 22.2019 14.1593L22.3238 14.108C22.6692 13.9745 23.1672 13.2814 23.1875 12.9118L23.4219 4.03043C23.4523 3.59924 23.1484 3.25204 22.7969 3.05741Z" fill="url(#paint4_radial_18_31665)"></path><path d="M22.7969 3.05741L21.8437 2.65269C19.6421 1.96765 17.2344 1.81208 14.6719 2.23236C12.1094 2.65264 11.5156 3.2442 11.5156 3.2442C10.896 3.3674 10.8671 3.88898 11.1718 4.45363C13.0797 6.72576 15.176 13.4043 18.0469 14.2506C18.89 14.4662 21.3791 14.4776 22.2019 14.1593L22.3238 14.108C22.6692 13.9745 23.1672 13.2814 23.1875 12.9118L23.4219 4.03043C23.4523 3.59924 23.1484 3.25204 22.7969 3.05741Z" fill="url(#paint5_radial_18_31665)"></path><path d="M22.7969 3.05741L21.8437 2.65269C19.6421 1.96765 17.2344 1.81208 14.6719 2.23236C12.1094 2.65264 11.5156 3.2442 11.5156 3.2442C10.896 3.3674 10.8671 3.88898 11.1718 4.45363C13.0797 6.72576 15.176 13.4043 18.0469 14.2506C18.89 14.4662 21.3791 14.4776 22.2019 14.1593L22.3238 14.108C22.6692 13.9745 23.1672 13.2814 23.1875 12.9118L23.4219 4.03043C23.4523 3.59924 23.1484 3.25204 22.7969 3.05741Z" fill="url(#paint6_linear_18_31665)"></path><g filter="url(#filter1_f_18_31665)"><path d="M13.1016 2.72656C11.862 3.06924 11.5298 3.40016 11.5298 3.40016C10.9102 3.52335 10.936 4.11525 11.2408 4.6799C13.1487 6.95202 15.1361 13.2496 18.007 14.0958C18.2707 14.1633 18.6953 14.2107 19.1797 14.2344L13.1016 2.72656Z" fill="url(#paint7_linear_18_31665)"></path></g><path d="M12.2187 22.7187L15.7656 26.2031C16.7332 27.1171 17.3334 28.2487 16.4219 29.2188C15.7749 30.0687 14.2241 29.9933 13.625 30.0313C11.6883 30.0891 9.09014 29.5622 6.84373 27.5313C5.07737 25.9343 4.09321 23.688 3.93751 23.0156L12.2187 22.7187Z" fill="url(#paint8_radial_18_31665)"></path><path d="M12.2187 22.7187L15.7656 26.2031C16.7332 27.1171 17.3334 28.2487 16.4219 29.2188C15.7749 30.0687 14.2241 29.9933 13.625 30.0313C11.6883 30.0891 9.09014 29.5622 6.84373 27.5313C5.07737 25.9343 4.09321 23.688 3.93751 23.0156L12.2187 22.7187Z" fill="url(#paint9_radial_18_31665)"></path><g filter="url(#filter2_f_18_31665)"><path d="M12.0523 22.7916L13.2187 23.9375L4.81018 24.5721C4.4328 23.8671 4.20835 23.2768 4.14062 22.9844L12.0523 22.7916Z" fill="url(#paint10_linear_18_31665)"></path><path d="M12.0523 22.7916L13.2187 23.9375L4.81018 24.5721C4.4328 23.8671 4.20835 23.2768 4.14062 22.9844L12.0523 22.7916Z" fill="url(#paint11_radial_18_31665)"></path></g><path d="M2.99219 22.6484C2.07068 20.538 1.78913 17.4452 2.21096 15.0703C2.63279 12.6953 3.20759 11.951 3.20759 11.951C3.31231 11.3264 3.83281 11.2818 4.40626 11.5703C6.73409 13.4144 13.3119 15.2264 14.2432 18.0781C14.5947 19.3034 14.6279 21.3125 14.1641 22.5156C14.0409 22.8657 13.5 23.3516 13.0625 23.4141C12.625 23.4765 9.47656 23.3516 8.61719 23.3516C7.75781 23.3516 4.64844 23.6719 4.14062 23.6172C3.63281 23.5625 3.23437 23.2031 2.99219 22.6484Z" fill="#EC9F6A"></path><path d="M2.99219 22.6484C2.07068 20.538 1.78913 17.4452 2.21096 15.0703C2.63279 12.6953 3.20759 11.951 3.20759 11.951C3.31231 11.3264 3.83281 11.2818 4.40626 11.5703C6.73409 13.4144 13.3119 15.2264 14.2432 18.0781C14.5947 19.3034 14.6279 21.3125 14.1641 22.5156C14.0409 22.8657 13.5 23.3516 13.0625 23.4141C12.625 23.4765 9.47656 23.3516 8.61719 23.3516C7.75781 23.3516 4.64844 23.6719 4.14062 23.6172C3.63281 23.5625 3.23437 23.2031 2.99219 22.6484Z" fill="url(#paint12_radial_18_31665)"></path><path d="M2.99219 22.6484C2.07068 20.538 1.78913 17.4452 2.21096 15.0703C2.63279 12.6953 3.20759 11.951 3.20759 11.951C3.31231 11.3264 3.83281 11.2818 4.40626 11.5703C6.73409 13.4144 13.3119 15.2264 14.2432 18.0781C14.5947 19.3034 14.6279 21.3125 14.1641 22.5156C14.0409 22.8657 13.5 23.3516 13.0625 23.4141C12.625 23.4765 9.47656 23.3516 8.61719 23.3516C7.75781 23.3516 4.64844 23.6719 4.14062 23.6172C3.63281 23.5625 3.23437 23.2031 2.99219 22.6484Z" fill="url(#paint13_linear_18_31665)"></path><path d="M2.99219 22.6484C2.07068 20.538 1.78913 17.4452 2.21096 15.0703C2.63279 12.6953 3.20759 11.951 3.20759 11.951C3.31231 11.3264 3.83281 11.2818 4.40626 11.5703C6.73409 13.4144 13.3119 15.2264 14.2432 18.0781C14.5947 19.3034 14.6279 21.3125 14.1641 22.5156C14.0409 22.8657 13.5 23.3516 13.0625 23.4141C12.625 23.4765 9.47656 23.3516 8.61719 23.3516C7.75781 23.3516 4.64844 23.6719 4.14062 23.6172C3.63281 23.5625 3.23437 23.2031 2.99219 22.6484Z" fill="url(#paint14_radial_18_31665)"></path><path d="M2.99219 22.6484C2.07068 20.538 1.78913 17.4452 2.21096 15.0703C2.63279 12.6953 3.20759 11.951 3.20759 11.951C3.31231 11.3264 3.83281 11.2818 4.40626 11.5703C6.73409 13.4144 13.3119 15.2264 14.2432 18.0781C14.5947 19.3034 14.6279 21.3125 14.1641 22.5156C14.0409 22.8657 13.5 23.3516 13.0625 23.4141C12.625 23.4765 9.47656 23.3516 8.61719 23.3516C7.75781 23.3516 4.64844 23.6719 4.14062 23.6172C3.63281 23.5625 3.23437 23.2031 2.99219 22.6484Z" fill="url(#paint15_radial_18_31665)"></path><path d="M2.99219 22.6484C2.07068 20.538 1.78913 17.4452 2.21096 15.0703C2.63279 12.6953 3.20759 11.951 3.20759 11.951C3.31231 11.3264 3.83281 11.2818 4.40626 11.5703C6.73409 13.4144 13.3119 15.2264 14.2432 18.0781C14.5947 19.3034 14.6279 21.3125 14.1641 22.5156C14.0409 22.8657 13.5 23.3516 13.0625 23.4141C12.625 23.4765 9.47656 23.3516 8.61719 23.3516C7.75781 23.3516 4.64844 23.6719 4.14062 23.6172C3.63281 23.5625 3.23437 23.2031 2.99219 22.6484Z" fill="url(#paint16_radial_18_31665)"></path><g filter="url(#filter3_f_18_31665)"><path d="M2.70313 13.6719C3.04135 12.4711 3.36224 12.0555 3.36224 12.0555C3.46697 11.4309 3.98746 11.3864 4.56092 11.6749C6.88874 13.5189 13.0809 15.1104 14.0121 17.9622C14.1731 18.5231 14.2766 19.0394 14.3287 19.5128L2.70313 13.6719Z" fill="url(#paint17_linear_18_31665)"></path><path d="M2.70313 13.6719C3.04135 12.4711 3.36224 12.0555 3.36224 12.0555C3.46697 11.4309 3.98746 11.3864 4.56092 11.6749C6.88874 13.5189 13.0809 15.1104 14.0121 17.9622C14.1731 18.5231 14.2766 19.0394 14.3287 19.5128L2.70313 13.6719Z" fill="url(#paint18_linear_18_31665)"></path></g><path d="M9.83184 2.82184C6.62184 4.07184 4.07184 6.62184 2.82184 9.83184C2.48184 10.7118 2.82184 11.7018 3.62184 12.1918L14.0418 18.5418C14.6618 18.9218 15.4418 18.9218 16.0618 18.5418C17.0718 17.9218 17.9318 17.0718 18.5418 16.0618C18.9218 15.4418 18.9218 14.6618 18.5418 14.0418L12.1918 3.62184C11.7018 2.82184 10.7118 2.48184 9.83184 2.82184Z" fill="#D79453"></path><path d="M9.83184 2.82184C6.62184 4.07184 4.07184 6.62184 2.82184 9.83184C2.48184 10.7118 2.82184 11.7018 3.62184 12.1918L14.0418 18.5418C14.6618 18.9218 15.4418 18.9218 16.0618 18.5418C17.0718 17.9218 17.9318 17.0718 18.5418 16.0618C18.9218 15.4418 18.9218 14.6618 18.5418 14.0418L12.1918 3.62184C11.7018 2.82184 10.7118 2.48184 9.83184 2.82184Z" fill="url(#paint19_radial_18_31665)"></path><path d="M9.83184 2.82184C6.62184 4.07184 4.07184 6.62184 2.82184 9.83184C2.48184 10.7118 2.82184 11.7018 3.62184 12.1918L14.0418 18.5418C14.6618 18.9218 15.4418 18.9218 16.0618 18.5418C17.0718 17.9218 17.9318 17.0718 18.5418 16.0618C18.9218 15.4418 18.9218 14.6618 18.5418 14.0418L12.1918 3.62184C11.7018 2.82184 10.7118 2.48184 9.83184 2.82184Z" fill="url(#paint20_radial_18_31665)"></path><path d="M9.83184 2.82184C6.62184 4.07184 4.07184 6.62184 2.82184 9.83184C2.48184 10.7118 2.82184 11.7018 3.62184 12.1918L14.0418 18.5418C14.6618 18.9218 15.4418 18.9218 16.0618 18.5418C17.0718 17.9218 17.9318 17.0718 18.5418 16.0618C18.9218 15.4418 18.9218 14.6618 18.5418 14.0418L12.1918 3.62184C11.7018 2.82184 10.7118 2.48184 9.83184 2.82184Z" fill="url(#paint21_radial_18_31665)"></path><path d="M9.83184 2.82184C6.62184 4.07184 4.07184 6.62184 2.82184 9.83184C2.48184 10.7118 2.82184 11.7018 3.62184 12.1918L14.0418 18.5418C14.6618 18.9218 15.4418 18.9218 16.0618 18.5418C17.0718 17.9218 17.9318 17.0718 18.5418 16.0618C18.9218 15.4418 18.9218 14.6618 18.5418 14.0418L12.1918 3.62184C11.7018 2.82184 10.7118 2.48184 9.83184 2.82184Z" fill="url(#paint22_linear_18_31665)"></path><path d="M9.83184 2.82184C6.62184 4.07184 4.07184 6.62184 2.82184 9.83184C2.48184 10.7118 2.82184 11.7018 3.62184 12.1918L14.0418 18.5418C14.6618 18.9218 15.4418 18.9218 16.0618 18.5418C17.0718 17.9218 17.9318 17.0718 18.5418 16.0618C18.9218 15.4418 18.9218 14.6618 18.5418 14.0418L12.1918 3.62184C11.7018 2.82184 10.7118 2.48184 9.83184 2.82184Z" fill="url(#paint23_radial_18_31665)"></path><path d="M9.83184 2.82184C6.62184 4.07184 4.07184 6.62184 2.82184 9.83184C2.48184 10.7118 2.82184 11.7018 3.62184 12.1918L14.0418 18.5418C14.6618 18.9218 15.4418 18.9218 16.0618 18.5418C17.0718 17.9218 17.9318 17.0718 18.5418 16.0618C18.9218 15.4418 18.9218 14.6618 18.5418 14.0418L12.1918 3.62184C11.7018 2.82184 10.7118 2.48184 9.83184 2.82184Z" fill="url(#paint24_radial_18_31665)"></path><defs><filter id="filter0_f_18_31665" x="22.0349" y="3.64062" width="2.65265" height="9.875" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_31665"></feGaussianBlur></filter><filter id="filter1_f_18_31665" x="10.7815" y="2.47656" width="8.64819" height="12.0078" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_31665"></feGaussianBlur></filter><filter id="filter2_f_18_31665" x="3.89062" y="22.5416" width="9.57812" height="2.2804" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_31665"></feGaussianBlur></filter><filter id="filter3_f_18_31665" x="2.45312" y="11.2538" width="12.1255" height="8.50903" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur stdDeviation="0.125" result="effect1_foregroundBlur_18_31665"></feGaussianBlur></filter><radialGradient id="paint0_radial_18_31665" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(22.8125 12.9375) rotate(42.7741) scale(12.5164 7.08839)"><stop offset="0.0937591" stop-color="#C05159"></stop><stop offset="0.553697" stop-color="#F6AC6A"></stop><stop offset="0.832916" stop-color="#FFD186"></stop><stop offset="0.916927" stop-color="#FFDC87"></stop></radialGradient><linearGradient id="paint1_linear_18_31665" x1="24.7344" y1="4.67187" x2="20.8594" y2="12.8906" gradientUnits="userSpaceOnUse"><stop stop-color="#EBD67C"></stop><stop offset="0.0655686" stop-color="#FFFFA6"></stop><stop offset="0.530552" stop-color="#F8C281"></stop><stop offset="0.937338" stop-color="#E99E6B"></stop></linearGradient><radialGradient id="paint2_radial_18_31665" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(22.9009 13.1847) rotate(-127.648) scale(14.3438 11.7966)"><stop stop-color="#FFBE66"></stop><stop offset="1" stop-color="#E2AE5B"></stop></radialGradient><radialGradient id="paint3_radial_18_31665" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(18 11.4375) rotate(53.9726) scale(11.9013 4.84018)"><stop stop-color="#D67C63"></stop><stop offset="1" stop-color="#D97D67" stop-opacity="0"></stop></radialGradient><radialGradient id="paint4_radial_18_31665" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(23 4.1875) rotate(45.7639) scale(3.31486 5.75622)"><stop stop-color="#FFE4A6"></stop><stop offset="0.711285" stop-color="#F8B76F"></stop><stop offset="1" stop-color="#F9B870" stop-opacity="0"></stop></radialGradient><radialGradient id="paint5_radial_18_31665" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(22.875 12.4375) rotate(88.9391) scale(3.37558 1.29066)"><stop stop-color="#FFBC67"></stop><stop offset="1" stop-color="#FFBC67" stop-opacity="0"></stop></radialGradient><linearGradient id="paint6_linear_18_31665" x1="20.375" y1="15.6875" x2="20.125" y2="12.7813" gradientUnits="userSpaceOnUse"><stop offset="0.461609" stop-color="#B45077"></stop><stop offset="0.855389" stop-color="#B75077" stop-opacity="0"></stop></linearGradient><linearGradient id="paint7_linear_18_31665" x1="12.9375" y1="2.57056" x2="18.5625" y2="14.3891" gradientUnits="userSpaceOnUse"><stop stop-color="#DDC173"></stop><stop offset="0.485173" stop-color="#D59F65"></stop><stop offset="1" stop-color="#E49966"></stop></linearGradient><radialGradient id="paint8_radial_18_31665" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(13.5625 23.5) rotate(109.113) scale(6.68078 10.2578)"><stop offset="0.165756" stop-color="#FFBF7E"></stop><stop offset="0.827674" stop-color="#DF8C6D"></stop><stop offset="1" stop-color="#B05A66"></stop></radialGradient><radialGradient id="paint9_radial_18_31665" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(15.1875 26) rotate(41.0652) scale(8.37243 2.03649)"><stop stop-color="#FFD483"></stop><stop offset="1" stop-color="#FFD688" stop-opacity="0"></stop></radialGradient><linearGradient id="paint10_linear_18_31665" x1="3.96063" y1="23.794" x2="13.3748" y2="23.5143" gradientUnits="userSpaceOnUse"><stop stop-color="#A8716F"></stop><stop offset="0.103615" stop-color="#B37173"></stop><stop offset="0.225484" stop-color="#DB9F84"></stop><stop offset="0.799889" stop-color="#F1BB8A"></stop><stop offset="1" stop-color="#FFD780"></stop></linearGradient><radialGradient id="paint11_radial_18_31665" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(11.4219 23.1719) rotate(-178.616) scale(3.23532 0.569081)"><stop offset="0.621498" stop-color="#AF5A3E"></stop><stop offset="1" stop-color="#B35445" stop-opacity="0"></stop></radialGradient><radialGradient id="paint12_radial_18_31665" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(13.625 19.125) rotate(-171.737) scale(15.2205 15.0767)"><stop offset="0.138435" stop-color="#FFB974"></stop><stop offset="0.403618" stop-color="#F2A56D"></stop><stop offset="0.925938" stop-color="#A16948"></stop></radialGradient><linearGradient id="paint13_linear_18_31665" x1="8.22184" y1="13.125" x2="6.81191" y2="15.4996" gradientUnits="userSpaceOnUse"><stop offset="0.610751" stop-color="#984847"></stop><stop offset="0.850075" stop-color="#9A4947" stop-opacity="0"></stop></linearGradient><radialGradient id="paint14_radial_18_31665" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(7.25 23.7461) scale(11.25 5.68361)"><stop stop-color="#C66364"></stop><stop offset="1" stop-color="#D4766B" stop-opacity="0"></stop></radialGradient><radialGradient id="paint15_radial_18_31665" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(7.875 23.5313) scale(10.0937 1.29657)"><stop stop-color="#B64B4B"></stop><stop offset="1" stop-color="#C56158" stop-opacity="0"></stop></radialGradient><radialGradient id="paint16_radial_18_31665" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(11.4375 19.875) rotate(-46.8882) scale(4.02385 7.51767)"><stop stop-color="#FFC083"></stop><stop offset="0.620218" stop-color="#FFBD7D" stop-opacity="0"></stop></radialGradient><linearGradient id="paint17_linear_18_31665" x1="2.8125" y1="13.0312" x2="14.5582" y2="18.9404" gradientUnits="userSpaceOnUse"><stop stop-color="#B89367"></stop><stop offset="1" stop-color="#C5835E"></stop></linearGradient><linearGradient id="paint18_linear_18_31665" x1="8.21875" y1="14.6406" x2="7.59349" y2="15.6717" gradientUnits="userSpaceOnUse"><stop offset="0.351552" stop-color="#A74746"></stop><stop offset="0.845198" stop-color="#A04346" stop-opacity="0"></stop></linearGradient><radialGradient id="paint19_radial_18_31665" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(15.5625 14.5625) rotate(140.244) scale(18.3733 13.7403)"><stop stop-color="#FDAE69"></stop><stop offset="0.729021" stop-color="#CE8C4F"></stop><stop offset="0.921546" stop-color="#AD7B45"></stop><stop offset="1" stop-color="#8B6B4A"></stop></radialGradient><radialGradient id="paint20_radial_18_31665" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(15.0625 7) rotate(65.3152) scale(11.0745 3.16547)"><stop offset="0.233237" stop-color="#FFD47C"></stop><stop offset="0.853648" stop-color="#FFD98B" stop-opacity="0"></stop></radialGradient><radialGradient id="paint21_radial_18_31665" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(15.3125 8.875) rotate(100.886) scale(6.6191 5.57808)"><stop offset="0.128419" stop-color="#FFD88C"></stop><stop offset="0.924134" stop-color="#FFBE7B" stop-opacity="0"></stop></radialGradient><linearGradient id="paint22_linear_18_31665" x1="7.25" y1="15.1875" x2="10.7588" y2="10.3142" gradientUnits="userSpaceOnUse"><stop offset="0.142353" stop-color="#C15F4D"></stop><stop offset="1" stop-color="#D58366" stop-opacity="0"></stop></linearGradient><radialGradient id="paint23_radial_18_31665" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(8.15625 15.7813) rotate(28.5422) scale(12.5574 1.96589)"><stop offset="0.149989" stop-color="#E4745D"></stop><stop offset="0.453292" stop-color="#C8604C"></stop><stop offset="0.632597" stop-color="#C0605F"></stop><stop offset="1" stop-color="#C0605F" stop-opacity="0"></stop></radialGradient><radialGradient id="paint24_radial_18_31665" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(1.40625 2.69067) rotate(46.0943) scale(22.3963)"><stop offset="0.935802" stop-color="#C17C61" stop-opacity="0"></stop><stop offset="0.982109" stop-color="#C17C61"></stop></radialGradient></defs></svg> <span>Croissant</span> <div class="border-br-gray-200 absolute bottom-0.5 right-0.5 h-1 w-1 border-[3px] border-l-transparent border-t-transparent border-b-gray-200 border-r-gray-200 dark:border-b-gray-700 dark:border-r-gray-700"></div></div> </button> </div> <button class="tag tag-ghost -ml-0.5 mb-1 !px-1 md:mb-1.5" type="button">+ 1</button></div><div class="mr-1 flex flex-wrap items-center"><span class="mb-1 mr-1 p-1 text-sm leading-tight text-gray-400 md:mb-1.5">License: </span> <div class="relative inline-block "> <button class="group mr-1 mb-1 md:mr-1.5 md:mb-1.5 rounded-full rounded-br-none " type="button"> <div class="tag tag-white rounded-full relative rounded-br-none pr-2.5"> <svg class="text-xs text-gray-900" width="1em" height="1em" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.46009 5.0945V6.88125C1.46009 7.25201 1.75937 7.55129 2.13012 7.55129C2.50087 7.55129 2.80016 7.25201 2.80016 6.88125V5.0945C2.80016 4.72375 2.50087 4.42446 2.13012 4.42446C1.75937 4.42446 1.46009 4.72375 1.46009 5.0945ZM4.14022 5.0945V6.88125C4.14022 7.25201 4.4395 7.55129 4.81026 7.55129C5.18101 7.55129 5.48029 7.25201 5.48029 6.88125V5.0945C5.48029 4.72375 5.18101 4.42446 4.81026 4.42446C4.4395 4.42446 4.14022 4.72375 4.14022 5.0945ZM1.23674 9.78473H8.38377C8.75452 9.78473 9.0538 9.48545 9.0538 9.1147C9.0538 8.74395 8.75452 8.44466 8.38377 8.44466H1.23674C0.865993 8.44466 0.566711 8.74395 0.566711 9.1147C0.566711 9.48545 0.865993 9.78473 1.23674 9.78473ZM6.82036 5.0945V6.88125C6.82036 7.25201 7.11964 7.55129 7.49039 7.55129C7.86114 7.55129 8.16042 7.25201 8.16042 6.88125V5.0945C8.16042 4.72375 7.86114 4.42446 7.49039 4.42446C7.11964 4.42446 6.82036 4.72375 6.82036 5.0945ZM4.39484 0.623142L0.865993 2.48137C0.682851 2.57517 0.566711 2.76725 0.566711 2.97273C0.566711 3.28094 0.816857 3.53109 1.12507 3.53109H8.49991C8.80365 3.53109 9.0538 3.28094 9.0538 2.97273C9.0538 2.76725 8.93766 2.57517 8.75452 2.48137L5.22568 0.623142C4.9666 0.484669 4.65391 0.484669 4.39484 0.623142V0.623142Z" fill="currentColor"></path></svg> <span>cdla-permissive-2.0</span> <div class="border-br-gray-200 absolute bottom-0.5 right-0.5 h-1 w-1 border-[3px] border-l-transparent border-t-transparent border-b-gray-200 border-r-gray-200 dark:border-b-gray-700 dark:border-r-gray-700"></div></div> </button> </div> </div></div> <div class="flex flex-col-reverse lg:flex-row lg:items-center lg:justify-between"><div class="-mb-px flex h-12 items-center overflow-x-auto overflow-y-hidden "><a class="tab-alternate active" href="/datasets/microsoft/FStarDataSet"><svg class="mr-1.5 text-gray-400 flex-none" style="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path class="uim-quaternary" d="M20.23 7.24L12 12L3.77 7.24a1.98 1.98 0 0 1 .7-.71L11 2.76c.62-.35 1.38-.35 2 0l6.53 3.77c.29.173.531.418.7.71z" opacity=".25" fill="currentColor"></path><path class="uim-tertiary" d="M12 12v9.5a2.09 2.09 0 0 1-.91-.21L4.5 17.48a2.003 2.003 0 0 1-1-1.73v-7.5a2.06 2.06 0 0 1 .27-1.01L12 12z" opacity=".5" fill="currentColor"></path><path class="uim-primary" d="M20.5 8.25v7.5a2.003 2.003 0 0 1-1 1.73l-6.62 3.82c-.275.13-.576.198-.88.2V12l8.23-4.76c.175.308.268.656.27 1.01z" fill="currentColor"></path></svg> Dataset card </a><a class="tab-alternate " href="/datasets/microsoft/FStarDataSet/viewer/"><svg class="mr-1.5 text-gray-400 flex-none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 12 12"><path fill="currentColor" d="M2.5 2h7a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-7a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1Zm0 2v2h3V4h-3Zm4 0v2h3V4h-3Zm-4 3v2h3V7h-3Zm4 0v2h3V7h-3Z"></path></svg> Viewer </a><a class="tab-alternate " href="/datasets/microsoft/FStarDataSet/tree/main"><svg class="mr-1.5 text-gray-400 flex-none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path class="uim-tertiary" d="M21 19h-8a1 1 0 0 1 0-2h8a1 1 0 0 1 0 2zm0-4h-8a1 1 0 0 1 0-2h8a1 1 0 0 1 0 2zm0-8h-8a1 1 0 0 1 0-2h8a1 1 0 0 1 0 2zm0 4h-8a1 1 0 0 1 0-2h8a1 1 0 0 1 0 2z" opacity=".5" fill="currentColor"></path><path class="uim-primary" d="M9 19a1 1 0 0 1-1-1V6a1 1 0 0 1 2 0v12a1 1 0 0 1-1 1zm-6-4.333a1 1 0 0 1-.64-1.769L3.438 12l-1.078-.898a1 1 0 0 1 1.28-1.538l2 1.667a1 1 0 0 1 0 1.538l-2 1.667a.999.999 0 0 1-.64.231z" fill="currentColor"></path></svg> <span class="xl:hidden">Files</span> <span class="hidden xl:inline">Files and versions</span> </a><a class="tab-alternate " href="/datasets/microsoft/FStarDataSet/discussions"><svg class="mr-1.5 text-gray-400 flex-none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M20.6081 3C21.7684 3 22.8053 3.49196 23.5284 4.38415C23.9756 4.93678 24.4428 5.82749 24.4808 7.16133C24.9674 7.01707 25.4353 6.93643 25.8725 6.93643C26.9833 6.93643 27.9865 7.37587 28.696 8.17411C29.6075 9.19872 30.0124 10.4579 29.8361 11.7177C29.7523 12.3177 29.5581 12.8555 29.2678 13.3534C29.8798 13.8646 30.3306 14.5763 30.5485 15.4322C30.719 16.1032 30.8939 17.5006 29.9808 18.9403C30.0389 19.0342 30.0934 19.1319 30.1442 19.2318C30.6932 20.3074 30.7283 21.5229 30.2439 22.6548C29.5093 24.3704 27.6841 25.7219 24.1397 27.1727C21.9347 28.0753 19.9174 28.6523 19.8994 28.6575C16.9842 29.4379 14.3477 29.8345 12.0653 29.8345C7.87017 29.8345 4.8668 28.508 3.13831 25.8921C0.356375 21.6797 0.754104 17.8269 4.35369 14.1131C6.34591 12.058 7.67023 9.02782 7.94613 8.36275C8.50224 6.39343 9.97271 4.20438 12.4172 4.20438H12.4179C12.6236 4.20438 12.8314 4.2214 13.0364 4.25468C14.107 4.42854 15.0428 5.06476 15.7115 6.02205C16.4331 5.09583 17.134 4.359 17.7682 3.94323C18.7242 3.31737 19.6794 3 20.6081 3ZM20.6081 5.95917C20.2427 5.95917 19.7963 6.1197 19.3039 6.44225C17.7754 7.44319 14.8258 12.6772 13.7458 14.7131C13.3839 15.3952 12.7655 15.6837 12.2086 15.6837C11.1036 15.6837 10.2408 14.5497 12.1076 13.1085C14.9146 10.9402 13.9299 7.39584 12.5898 7.1776C12.5311 7.16799 12.4731 7.16355 12.4172 7.16355C11.1989 7.16355 10.6615 9.33114 10.6615 9.33114C10.6615 9.33114 9.0863 13.4148 6.38031 16.206C3.67434 18.998 3.5346 21.2388 5.50675 24.2246C6.85185 26.2606 9.42666 26.8753 12.0653 26.8753C14.8021 26.8753 17.6077 26.2139 19.1799 25.793C19.2574 25.7723 28.8193 22.984 27.6081 20.6107C27.4046 20.212 27.0693 20.0522 26.6471 20.0522C24.9416 20.0522 21.8393 22.6726 20.5057 22.6726C20.2076 22.6726 19.9976 22.5416 19.9116 22.222C19.3433 20.1173 28.552 19.2325 27.7758 16.1839C27.639 15.6445 27.2677 15.4256 26.746 15.4263C24.4923 15.4263 19.4358 19.5181 18.3759 19.5181C18.2949 19.5181 18.2368 19.4937 18.2053 19.4419C17.6743 18.557 17.9653 17.9394 21.7082 15.6009C25.4511 13.2617 28.0783 11.8545 26.5841 10.1752C26.4121 9.98141 26.1684 9.8956 25.8725 9.8956C23.6001 9.89634 18.2311 14.9403 18.2311 14.9403C18.2311 14.9403 16.7821 16.496 15.9057 16.496C15.7043 16.496 15.533 16.4139 15.4169 16.2112C14.7956 15.1296 21.1879 10.1286 21.5484 8.06535C21.7928 6.66715 21.3771 5.95917 20.6081 5.95917Z" fill="#FF9D00"></path><path d="M5.50686 24.2246C3.53472 21.2387 3.67446 18.9979 6.38043 16.206C9.08641 13.4147 10.6615 9.33111 10.6615 9.33111C10.6615 9.33111 11.2499 6.95933 12.59 7.17757C13.93 7.39581 14.9139 10.9401 12.1069 13.1084C9.29997 15.276 12.6659 16.7489 13.7459 14.713C14.8258 12.6772 17.7747 7.44316 19.304 6.44221C20.8326 5.44128 21.9089 6.00204 21.5484 8.06532C21.188 10.1286 14.795 15.1295 15.4171 16.2118C16.0391 17.2934 18.2312 14.9402 18.2312 14.9402C18.2312 14.9402 25.0907 8.49588 26.5842 10.1752C28.0776 11.8545 25.4512 13.2616 21.7082 15.6008C17.9646 17.9393 17.6744 18.557 18.2054 19.4418C18.7372 20.3266 26.9998 13.1351 27.7759 16.1838C28.5513 19.2324 19.3434 20.1173 19.9117 22.2219C20.48 24.3274 26.3979 18.2382 27.6082 20.6107C28.8193 22.9839 19.2574 25.7722 19.18 25.7929C16.0914 26.62 8.24723 28.3726 5.50686 24.2246Z" fill="#FFD21E"></path></svg> Community <div class="ml-1.5 flex h-4 min-w-[1rem] items-center justify-center rounded px-1 text-xs leading-none shadow-sm bg-black text-white dark:bg-gray-800 dark:text-gray-200">2 </div> </a> </div> </div></div></header> </div> <div class="container relative flex flex-col md:grid md:space-y-0 w-full md:grid-cols-12 md:flex-1 md:grid-rows-full space-y-4 md:gap-6 "> <section class="pt-6 border-gray-100 md:col-span-8 pb-24 relative break-words copiable-code-container"><div class="SVELTE_HYDRATER contents" data-target="UnsafeBanner" data-props="{&quot;classNames&quot;:&quot;mb-4&quot;,&quot;repoId&quot;:&quot;microsoft/FStarDataSet&quot;,&quot;repoType&quot;:&quot;dataset&quot;,&quot;minLevel&quot;:&quot;unsafe&quot;}"></div> <div class="SVELTE_HYDRATER contents" data-target="DatasetViewer" data-props="{&quot;data&quot;:{&quot;kind&quot;:&quot;DatasetAndSampleData&quot;,&quot;datasetInfo&quot;:[{&quot;isValid&quot;:true,&quot;href&quot;:&quot;&quot;,&quot;label&quot;:&quot;Size of downloaded dataset files:&quot;,&quot;value&quot;:&quot;759 MB&quot;},{&quot;isValid&quot;:true,&quot;href&quot;:&quot;/datasets/microsoft/FStarDataSet/tree/refs%2Fconvert%2Fparquet/&quot;,&quot;label&quot;:&quot;Size of the auto-converted Parquet files:&quot;,&quot;value&quot;:&quot;106 MB&quot;},{&quot;isValid&quot;:true,&quot;href&quot;:&quot;&quot;,&quot;label&quot;:&quot;Number of rows:&quot;,&quot;value&quot;:&quot;32,054&quot;}],&quot;partial&quot;:false,&quot;configsData&quot;:{&quot;configInfos&quot;:[{&quot;name&quot;:&quot;default&quot;,&quot;status&quot;:&quot;ok&quot;,&quot;numRows&quot;:32054}],&quot;selectedConfig&quot;:&quot;default&quot;,&quot;hasSelectedConfigParquet&quot;:true},&quot;splitsData&quot;:{&quot;splitInfos&quot;:[{&quot;name&quot;:&quot;train&quot;,&quot;numRows&quot;:22779},{&quot;name&quot;:&quot;validation&quot;,&quot;numRows&quot;:1541},{&quot;name&quot;:&quot;test&quot;,&quot;numRows&quot;:7734}],&quot;selectedSplit&quot;:&quot;train&quot;},&quot;sampleData&quot;:{&quot;dataset&quot;:&quot;microsoft/FStarDataSet&quot;,&quot;config&quot;:&quot;default&quot;,&quot;split&quot;:&quot;train&quot;,&quot;capabilities&quot;:{&quot;rows&quot;:true,&quot;search&quot;:true,&quot;filter&quot;:true,&quot;statistics&quot;:true},&quot;navigation&quot;:{&quot;p&quot;:0},&quot;jwt&quot;:&quot;eyJhbGciOiJFZERTQSJ9.eyJyZWFkIjp0cnVlLCJwZXJtaXNzaW9ucyI6eyJyZXBvLmNvbnRlbnQucmVhZCI6dHJ1ZX0sImlhdCI6MTczMjc5MDQyNCwic3ViIjoiL2RhdGFzZXRzL21pY3Jvc29mdC9GU3RhckRhdGFTZXQiLCJleHAiOjE3MzI3OTQwMjQsImlzcyI6Imh0dHBzOi8vaHVnZ2luZ2ZhY2UuY28ifQ.Fqb6EwyoiCmCp4NhDINHi8Hn0J3gPPMzeeOH2-H3ekupaC3a3Y9PozzOimE6KmebjxEvhccHNehiGqv5fgjRBQ&quot;,&quot;sampleData&quot;:{&quot;columns&quot;:[{&quot;name&quot;:&quot;effect&quot;,&quot;align&quot;:&quot;depends on text direction&quot;,&quot;type&quot;:&quot;string&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;effect&quot;,&quot;column_type&quot;:&quot;string_label&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;no_label_count&quot;:0,&quot;no_label_proportion&quot;:0,&quot;n_unique&quot;:48,&quot;frequencies&quot;:{&quot;Steel.Effect.Atomic.SteelAtomicUT&quot;:12,&quot;Steel.ST.Effect.Atomic.STAtomic&quot;:2,&quot;Steel.Memory.MstTot&quot;:1,&quot;Steel.Effect.Atomic.SteelGhost&quot;:60,&quot;Steel.ST.Effect.STT&quot;:24,&quot;FStar.Tactics.Effect.TAC&quot;:6,&quot;FStar.ST.ST&quot;:22,&quot;Steel.Effect.SteelT&quot;:51,&quot;Steel.ST.Effect.STF&quot;:2,&quot;Steel.Effect.Atomic.SteelAtomic&quot;:2,&quot;Steel.ST.Effect.Atomic.STAtomicU&quot;:3,&quot;Steel.Effect.Atomic.SteelAtomicBase&quot;:2,&quot;FStar.Pervasives.Div&quot;:2,&quot;FStar.HyperStack.ST.STL&quot;:1,&quot;Steel.ST.Effect.Atomic.STAtomicBase&quot;:4,&quot;FStar.HyperStack.ST.St&quot;:6,&quot;Steel.Effect.Atomic.SteelAtomicU&quot;:5,&quot;Steel.Semantics.Hoare.MST.MstTot&quot;:1,&quot;Prims.Tot&quot;:13677,&quot;FStar.HyperStack.ST.StackInline&quot;:37,&quot;Prims.GTot&quot;:910,&quot;Prims.Ghost&quot;:749,&quot;Steel.Semantics.Hoare.MST.Mst&quot;:4,&quot;Steel.ST.Effect.Ghost.STGhost&quot;:34,&quot;FStar.MSTTotal.MSTATETOT&quot;:3,&quot;Steel.Effect.Atomic.SteelAtomicT&quot;:5,&quot;Steel.ST.Effect.Atomic.STAtomicUT&quot;:3,&quot;Steel.Effect.Atomic.SteelGhostT&quot;:37,&quot;Steel.ST.Effect.Ghost.STGhostF&quot;:3,&quot;FStar.ST.STATE&quot;:7,&quot;Steel.Effect.Atomic.SteelGhostF&quot;:2,&quot;FStar.Tactics.Effect.Tac&quot;:862,&quot;Steel.Effect.Steel&quot;:36,&quot;FStar.Tactics.Effect.TacH&quot;:8,&quot;FStar.Pervasives.Lemma&quot;:3950,&quot;FStar.HyperStack.ST.Stack&quot;:945,&quot;FStar.NMSTTotal.NMSTATETOT&quot;:6,&quot;FStar.NMST.NMSTATE&quot;:6,&quot;FStar.HyperStack.ST.STATE&quot;:1,&quot;FStar.All.ALL&quot;:25,&quot;FStar.MST.MSTATE&quot;:6,&quot;Steel.ST.Effect.ST&quot;:22,&quot;FStar.HyperStack.ST.ST&quot;:190,&quot;Prims.Pure&quot;:769,&quot;Steel.ST.Effect.Ghost.STGhostT&quot;:34,&quot;FStar.All.ML&quot;:239,&quot;Prims.Admit&quot;:2,&quot;Steel.Effect.Atomic.SteelAtomicBaseT&quot;:1}}}},{&quot;name&quot;:&quot;original_source_type&quot;,&quot;align&quot;:&quot;depends on text direction&quot;,&quot;type&quot;:&quot;string&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;original_source_type&quot;,&quot;column_type&quot;:&quot;string_text&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;min&quot;:0,&quot;max&quot;:22967,&quot;mean&quot;:174.06818,&quot;median&quot;:82,&quot;std&quot;:393.57763,&quot;histogram&quot;:{&quot;hist&quot;:[22686,59,24,6,1,1,1,0,0,1],&quot;bin_edges&quot;:[0,2297,4594,6891,9188,11485,13782,16079,18376,20673,22967]}}}},{&quot;name&quot;:&quot;opens_and_abbrevs&quot;,&quot;align&quot;:&quot;left&quot;,&quot;type&quot;:&quot;list&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;opens_and_abbrevs&quot;,&quot;column_type&quot;:&quot;list&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;min&quot;:2,&quot;max&quot;:92,&quot;mean&quot;:16.4196,&quot;median&quot;:13,&quot;std&quot;:11.83541,&quot;histogram&quot;:{&quot;hist&quot;:[9091,9195,2526,1248,104,358,22,105,0,130],&quot;bin_edges&quot;:[2,12,22,32,42,52,62,72,82,92,92]}}}},{&quot;name&quot;:&quot;isa_cross_project_example&quot;,&quot;align&quot;:&quot;right&quot;,&quot;type&quot;:&quot;bool&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;isa_cross_project_example&quot;,&quot;column_type&quot;:&quot;bool&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;frequencies&quot;:{&quot;False&quot;:22779}}}},{&quot;name&quot;:&quot;source_definition&quot;,&quot;align&quot;:&quot;depends on text direction&quot;,&quot;type&quot;:&quot;string&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;source_definition&quot;,&quot;column_type&quot;:&quot;string_text&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;min&quot;:9,&quot;max&quot;:57896,&quot;mean&quot;:432.28961,&quot;median&quot;:181,&quot;std&quot;:1076.12411,&quot;histogram&quot;:{&quot;hist&quot;:[22636,108,27,3,4,0,0,0,0,1],&quot;bin_edges&quot;:[9,5798,11587,17376,23165,28954,34743,40532,46321,52110,57896]}}}},{&quot;name&quot;:&quot;partial_definition&quot;,&quot;align&quot;:&quot;depends on text direction&quot;,&quot;type&quot;:&quot;string&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;partial_definition&quot;,&quot;column_type&quot;:&quot;string_text&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;min&quot;:7,&quot;max&quot;:23323,&quot;mean&quot;:275.20633,&quot;median&quot;:146,&quot;std&quot;:473.70852,&quot;histogram&quot;:{&quot;hist&quot;:[22619,121,25,10,1,1,1,0,0,1],&quot;bin_edges&quot;:[7,2339,4671,7003,9335,11667,13999,16331,18663,20995,23323]}}}},{&quot;name&quot;:&quot;is_div&quot;,&quot;align&quot;:&quot;right&quot;,&quot;type&quot;:&quot;bool&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;is_div&quot;,&quot;column_type&quot;:&quot;bool&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;frequencies&quot;:{&quot;False&quot;:20069,&quot;True&quot;:2710}}}},{&quot;name&quot;:&quot;is_type&quot;,&quot;align&quot;:&quot;right&quot;,&quot;type&quot;:&quot;null&quot;},{&quot;name&quot;:&quot;is_proof&quot;,&quot;align&quot;:&quot;right&quot;,&quot;type&quot;:&quot;bool&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;is_proof&quot;,&quot;column_type&quot;:&quot;bool&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;frequencies&quot;:{&quot;False&quot;:18777,&quot;True&quot;:4002}}}},{&quot;name&quot;:&quot;completed_definiton&quot;,&quot;align&quot;:&quot;depends on text direction&quot;,&quot;type&quot;:&quot;string&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;completed_definiton&quot;,&quot;column_type&quot;:&quot;string_text&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;min&quot;:1,&quot;max&quot;:249950,&quot;mean&quot;:500.58725,&quot;median&quot;:87,&quot;std&quot;:3904.97307,&quot;histogram&quot;:{&quot;hist&quot;:[22729,29,11,2,4,1,0,0,2,1],&quot;bin_edges&quot;:[1,24996,49991,74986,99981,124976,149971,174966,199961,224956,249950]}}}},{&quot;name&quot;:&quot;dependencies&quot;,&quot;align&quot;:&quot;left&quot;,&quot;type&quot;:&quot;dict&quot;},{&quot;name&quot;:&quot;effect_flags&quot;,&quot;align&quot;:&quot;left&quot;,&quot;type&quot;:&quot;sequence&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;effect_flags&quot;,&quot;column_type&quot;:&quot;list&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;min&quot;:0,&quot;max&quot;:2,&quot;mean&quot;:0.84775,&quot;median&quot;:1,&quot;std&quot;:0.41262,&quot;histogram&quot;:{&quot;hist&quot;:[3937,18373,469],&quot;bin_edges&quot;:[0,1,2,2]}}}},{&quot;name&quot;:&quot;ideal_premises&quot;,&quot;align&quot;:&quot;left&quot;,&quot;type&quot;:&quot;sequence&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;ideal_premises&quot;,&quot;column_type&quot;:&quot;list&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;min&quot;:0,&quot;max&quot;:236,&quot;mean&quot;:15.01242,&quot;median&quot;:11,&quot;std&quot;:13.65889,&quot;histogram&quot;:{&quot;hist&quot;:[18113,3941,595,109,14,4,2,0,0,1],&quot;bin_edges&quot;:[0,24,48,72,96,120,144,168,192,216,236]}}}},{&quot;name&quot;:&quot;mutual_with&quot;,&quot;align&quot;:&quot;left&quot;,&quot;type&quot;:&quot;sequence&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;mutual_with&quot;,&quot;column_type&quot;:&quot;list&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;min&quot;:0,&quot;max&quot;:11,&quot;mean&quot;:0.00149,&quot;median&quot;:0,&quot;std&quot;:0.09827,&quot;histogram&quot;:{&quot;hist&quot;:[22772,2,4,0,0,1],&quot;bin_edges&quot;:[0,2,4,6,8,10,11]}}}},{&quot;name&quot;:&quot;file_context&quot;,&quot;align&quot;:&quot;depends on text direction&quot;,&quot;type&quot;:&quot;string&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;file_context&quot;,&quot;column_type&quot;:&quot;string_text&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;min&quot;:0,&quot;max&quot;:406855,&quot;mean&quot;:14164.94455,&quot;median&quot;:5528,&quot;std&quot;:27227.97809,&quot;histogram&quot;:{&quot;hist&quot;:[21082,1046,336,158,79,44,11,7,10,6],&quot;bin_edges&quot;:[0,40686,81372,122058,162744,203430,244116,284802,325488,366174,406855]}}}},{&quot;name&quot;:&quot;interleaved&quot;,&quot;align&quot;:&quot;right&quot;,&quot;type&quot;:&quot;bool&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;interleaved&quot;,&quot;column_type&quot;:&quot;bool&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;frequencies&quot;:{&quot;False&quot;:22779}}}},{&quot;name&quot;:&quot;is_simply_typed&quot;,&quot;align&quot;:&quot;right&quot;,&quot;type&quot;:&quot;bool&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;is_simply_typed&quot;,&quot;column_type&quot;:&quot;bool&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;frequencies&quot;:{&quot;False&quot;:16035,&quot;True&quot;:6744}}}},{&quot;name&quot;:&quot;file_name&quot;,&quot;align&quot;:&quot;depends on text direction&quot;,&quot;type&quot;:&quot;string&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;file_name&quot;,&quot;column_type&quot;:&quot;string_text&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;min&quot;:5,&quot;max&quot;:48,&quot;mean&quot;:23.97564,&quot;median&quot;:24,&quot;std&quot;:6.22711,&quot;histogram&quot;:{&quot;hist&quot;:[93,1047,4440,7289,5950,2759,843,215,143],&quot;bin_edges&quot;:[5,10,15,20,25,30,35,40,45,48]}}}},{&quot;name&quot;:&quot;vconfig&quot;,&quot;align&quot;:&quot;left&quot;,&quot;type&quot;:&quot;dict&quot;},{&quot;name&quot;:&quot;is_simple_lemma&quot;,&quot;align&quot;:&quot;right&quot;,&quot;type&quot;:&quot;null&quot;},{&quot;name&quot;:&quot;source_type&quot;,&quot;align&quot;:&quot;depends on text direction&quot;,&quot;type&quot;:&quot;string&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;source_type&quot;,&quot;column_type&quot;:&quot;string_text&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;min&quot;:10,&quot;max&quot;:22967,&quot;mean&quot;:192.38737,&quot;median&quot;:101,&quot;std&quot;:389.44688,&quot;histogram&quot;:{&quot;hist&quot;:[22686,59,24,6,1,1,1,0,0,1],&quot;bin_edges&quot;:[10,2306,4602,6898,9194,11490,13786,16082,18378,20674,22967]}}}},{&quot;name&quot;:&quot;proof_features&quot;,&quot;align&quot;:&quot;left&quot;,&quot;type&quot;:&quot;sequence&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;proof_features&quot;,&quot;column_type&quot;:&quot;list&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;min&quot;:0,&quot;max&quot;:1,&quot;mean&quot;:0.06273,&quot;median&quot;:0,&quot;std&quot;:0.24249,&quot;histogram&quot;:{&quot;hist&quot;:[21350,1429],&quot;bin_edges&quot;:[0,1,1]}}}},{&quot;name&quot;:&quot;name&quot;,&quot;align&quot;:&quot;depends on text direction&quot;,&quot;type&quot;:&quot;string&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;name&quot;,&quot;column_type&quot;:&quot;string_text&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;min&quot;:8,&quot;max&quot;:95,&quot;mean&quot;:36.04636,&quot;median&quot;:35,&quot;std&quot;:10.95949,&quot;histogram&quot;:{&quot;hist&quot;:[552,3042,7294,6708,3355,1417,306,75,17,13],&quot;bin_edges&quot;:[8,17,26,35,44,53,62,71,80,89,95]}}}},{&quot;name&quot;:&quot;source&quot;,&quot;align&quot;:&quot;left&quot;,&quot;type&quot;:&quot;dict&quot;},{&quot;name&quot;:&quot;verbose_type&quot;,&quot;align&quot;:&quot;depends on text direction&quot;,&quot;type&quot;:&quot;string&quot;,&quot;statistics&quot;:{&quot;column_name&quot;:&quot;verbose_type&quot;,&quot;column_type&quot;:&quot;string_text&quot;,&quot;column_statistics&quot;:{&quot;nan_count&quot;:0,&quot;nan_proportion&quot;:0,&quot;min&quot;:1,&quot;max&quot;:7424,&quot;mean&quot;:210.42825,&quot;median&quot;:122,&quot;std&quot;:273.5813,&quot;histogram&quot;:{&quot;hist&quot;:[21893,726,121,26,6,3,0,0,1,3],&quot;bin_edges&quot;:[1,744,1487,2230,2973,3716,4459,5202,5945,6688,7424]}}}},{&quot;name&quot;:&quot;source_range&quot;,&quot;align&quot;:&quot;left&quot;,&quot;type&quot;:&quot;dict&quot;}],&quot;rows&quot;:[{&quot;rowIdx&quot;:0,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Prims.Tot&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val aes128_key_expansion : normal lowstar_key128_t&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AES.X64.AES&quot;,&quot;short_module&quot;:&quot;AE&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.AES.AES_s&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.Machine_s&quot;,&quot;short_module&quot;:&quot;MS&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.State&quot;,&quot;short_module&quot;:&quot;VS&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.X64.MemoryAdapters&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AsLowStar.Wrapper&quot;,&quot;short_module&quot;:&quot;W&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.Interop.Assumptions&quot;,&quot;short_module&quot;:&quot;IA&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.Decls&quot;,&quot;short_module&quot;:&quot;V&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.Memory&quot;,&quot;short_module&quot;:&quot;ME&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AsLowStar.LowStarSig&quot;,&quot;short_module&quot;:&quot;LSig&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AsLowStar.ValeSig&quot;,&quot;short_module&quot;:&quot;VSig&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.Interop.X64&quot;,&quot;short_module&quot;:&quot;IX64&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Interop.Base&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Def.Types_s&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.BufferView.Up&quot;,&quot;short_module&quot;:&quot;UV&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.BufferView.Down&quot;,&quot;short_module&quot;:&quot;DV&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Mul&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.HyperStack&quot;,&quot;short_module&quot;:&quot;HS&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.Buffer&quot;,&quot;short_module&quot;:&quot;B&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.HyperStack.ST&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Stdcalls.X64&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Stdcalls.X64&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AES.X64.AES\&quot;,\n \&quot;short_module\&quot;: \&quot;AE\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.AES.AES_s\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.Machine_s\&quot;,\n \&quot;short_module\&quot;: \&quot;MS\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.State\&quot;,\n \&quot;short_module\&quot;: \&quot;VS\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.X64.MemoryAdapters\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AsLowStar.Wrapper\&quot;,\n \&quot;short_module\&quot;: \&quot;W\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.Interop.Assumptions\&quot;,\n \&quot;short_module\&quot;: \&quot;IA\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.Decls\&quot;,\n \&quot;short_module\&quot;: \&quot;V\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.Memory\&quot;,\n \&quot;short_module\&quot;: \&quot;ME\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AsLowStar.LowStarSig\&quot;,\n \&quot;short_module\&quot;: \&quot;LSig\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AsLowStar.ValeSig\&quot;,\n \&quot;short_module\&quot;: \&quot;VSig\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.Interop.X64\&quot;,\n \&quot;short_module\&quot;: \&quot;IX64\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Interop.Base\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Def.Types_s\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.BufferView.Up\&quot;,\n \&quot;short_module\&quot;: \&quot;UV\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.BufferView.Down\&quot;,\n \&quot;short_module\&quot;: \&quot;DV\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Mul\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack\&quot;,\n \&quot;short_module\&quot;: \&quot;HS\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.Buffer\&quot;,\n \&quot;short_module\&quot;: \&quot;B\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack.ST\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Stdcalls.X64\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Stdcalls.X64\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let aes128_key_expansion //: normal lowstar_key128_t\n = as_normal_t #lowstar_key128_t lowstar_key128&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val aes128_key_expansion : normal lowstar_key128_t\nlet aes128_key_expansion =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;as_normal_t #lowstar_key128_t lowstar_key128&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Vale.Stdcalls.X64.Aes.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Vale.X64.State.fsti.checked\&quot;,\n \&quot;Vale.X64.MemoryAdapters.fsti.checked\&quot;,\n \&quot;Vale.X64.Memory.fsti.checked\&quot;,\n \&quot;Vale.X64.Machine_s.fst.checked\&quot;,\n \&quot;Vale.X64.Decls.fsti.checked\&quot;,\n \&quot;Vale.Interop.X64.fsti.checked\&quot;,\n \&quot;Vale.Interop.Base.fst.checked\&quot;,\n \&quot;Vale.Interop.Assumptions.fst.checked\&quot;,\n \&quot;Vale.Def.Types_s.fst.checked\&quot;,\n \&quot;Vale.AsLowStar.Wrapper.fsti.checked\&quot;,\n \&quot;Vale.AsLowStar.ValeSig.fst.checked\&quot;,\n \&quot;Vale.AsLowStar.LowStarSig.fst.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;LowStar.BufferView.Up.fsti.checked\&quot;,\n \&quot;LowStar.BufferView.Down.fsti.checked\&quot;,\n \&quot;LowStar.Buffer.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.Mul.fst.checked\&quot;,\n \&quot;FStar.List.fst.checked\&quot;,\n \&quot;FStar.HyperStack.ST.fsti.checked\&quot;,\n \&quot;FStar.HyperStack.fst.checked\&quot;\n ],\n \&quot;interface_file\&quot;: true,\n \&quot;source_file\&quot;: \&quot;Vale.Stdcalls.X64.Aes.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;total&quot;],&quot;string&quot;:&quot;[\n \&quot;total\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;Vale.Stdcalls.X64.Aes.as_normal_t&quot;,&quot;Vale.Stdcalls.X64.Aes.lowstar_key128_t&quot;,&quot;Vale.Stdcalls.X64.Aes.lowstar_key128&quot;],&quot;string&quot;:&quot;[\n \&quot;Vale.Stdcalls.X64.Aes.as_normal_t\&quot;,\n \&quot;Vale.Stdcalls.X64.Aes.lowstar_key128_t\&quot;,\n \&quot;Vale.Stdcalls.X64.Aes.lowstar_key128\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Vale.Stdcalls.X64.Aes\n\nopen FStar.Mul\nopen FStar.HyperStack.ST\nmodule HS = FStar.HyperStack\nmodule B = LowStar.Buffer\nmodule DV = LowStar.BufferView.Down\nmodule UV = LowStar.BufferView.Up\nopen Vale.Def.Types_s\n\nopen Vale.Interop.Base\nmodule IX64 = Vale.Interop.X64\nmodule VSig = Vale.AsLowStar.ValeSig\nmodule LSig = Vale.AsLowStar.LowStarSig\nmodule ME = Vale.X64.Memory\nmodule V = Vale.X64.Decls\nmodule IA = Vale.Interop.Assumptions\nmodule W = Vale.AsLowStar.Wrapper\nopen Vale.X64.MemoryAdapters\nmodule VS = Vale.X64.State\nmodule MS = Vale.X64.Machine_s\n\nlet lowstar_key128 : lowstar_key128_t =\n assert_norm (List.length dom + List.length ([]<:list arg) <= 4);\n IX64.wrap_weak_stdcall\n code_key128\n dom\n (W.mk_prediction code_key128 dom [] (key128_lemma code_key128 IA.win))&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Stdcalls.X64.Aes.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 2,\n \&quot;initial_ifuel\&quot;: 0,\n \&quot;max_fuel\&quot;: 1,\n \&quot;max_ifuel\&quot;: 1,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: true,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;native\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;wrapped\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: false,\n \&quot;z3cliopt\&quot;: [\n \&quot;smt.arith.nl=false\&quot;,\n \&quot;smt.QI.EAGER_THRESHOLD=100\&quot;,\n \&quot;smt.CASE_SPLIT=3\&quot;\n ],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 5,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val aes128_key_expansion : normal lowstar_key128_t&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Stdcalls.X64.Aes.aes128_key_expansion&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;vale/code/arch/x64/interop/Vale.Stdcalls.X64.Aes.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;12c5e9539c7e3c366c26409d3b86493548c4483e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/hacl-star/hacl-star.git\&quot;,\n \&quot;project_name\&quot;: \&quot;hacl-star\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Interop.Base.normal Vale.Stdcalls.X64.Aes.lowstar_key128_t&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 48,\n \&quot;end_line\&quot;: 31,\n \&quot;start_col\&quot;: 4,\n \&quot;start_line\&quot;: 31\n}&quot;}}},{&quot;rowIdx&quot;:1,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Prims.Tot&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val aes256_key_expansion : normal lowstar_key256_t&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AES.X64.AES&quot;,&quot;short_module&quot;:&quot;AE&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.AES.AES_s&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.Machine_s&quot;,&quot;short_module&quot;:&quot;MS&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.State&quot;,&quot;short_module&quot;:&quot;VS&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.X64.MemoryAdapters&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AsLowStar.Wrapper&quot;,&quot;short_module&quot;:&quot;W&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.Interop.Assumptions&quot;,&quot;short_module&quot;:&quot;IA&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.Decls&quot;,&quot;short_module&quot;:&quot;V&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.Memory&quot;,&quot;short_module&quot;:&quot;ME&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AsLowStar.LowStarSig&quot;,&quot;short_module&quot;:&quot;LSig&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AsLowStar.ValeSig&quot;,&quot;short_module&quot;:&quot;VSig&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.Interop.X64&quot;,&quot;short_module&quot;:&quot;IX64&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Interop.Base&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Def.Types_s&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.BufferView.Up&quot;,&quot;short_module&quot;:&quot;UV&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.BufferView.Down&quot;,&quot;short_module&quot;:&quot;DV&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Mul&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.HyperStack&quot;,&quot;short_module&quot;:&quot;HS&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.Buffer&quot;,&quot;short_module&quot;:&quot;B&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.HyperStack.ST&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Stdcalls.X64&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Stdcalls.X64&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AES.X64.AES\&quot;,\n \&quot;short_module\&quot;: \&quot;AE\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.AES.AES_s\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.Machine_s\&quot;,\n \&quot;short_module\&quot;: \&quot;MS\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.State\&quot;,\n \&quot;short_module\&quot;: \&quot;VS\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.X64.MemoryAdapters\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AsLowStar.Wrapper\&quot;,\n \&quot;short_module\&quot;: \&quot;W\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.Interop.Assumptions\&quot;,\n \&quot;short_module\&quot;: \&quot;IA\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.Decls\&quot;,\n \&quot;short_module\&quot;: \&quot;V\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.Memory\&quot;,\n \&quot;short_module\&quot;: \&quot;ME\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AsLowStar.LowStarSig\&quot;,\n \&quot;short_module\&quot;: \&quot;LSig\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AsLowStar.ValeSig\&quot;,\n \&quot;short_module\&quot;: \&quot;VSig\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.Interop.X64\&quot;,\n \&quot;short_module\&quot;: \&quot;IX64\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Interop.Base\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Def.Types_s\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.BufferView.Up\&quot;,\n \&quot;short_module\&quot;: \&quot;UV\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.BufferView.Down\&quot;,\n \&quot;short_module\&quot;: \&quot;DV\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Mul\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack\&quot;,\n \&quot;short_module\&quot;: \&quot;HS\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.Buffer\&quot;,\n \&quot;short_module\&quot;: \&quot;B\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack.ST\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Stdcalls.X64\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Stdcalls.X64\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let aes256_key_expansion //: normal lowstar_key256_t\n = as_normal_t #lowstar_key256_t lowstar_key256&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val aes256_key_expansion : normal lowstar_key256_t\nlet aes256_key_expansion =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;as_normal_t #lowstar_key256_t lowstar_key256&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Vale.Stdcalls.X64.Aes.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Vale.X64.State.fsti.checked\&quot;,\n \&quot;Vale.X64.MemoryAdapters.fsti.checked\&quot;,\n \&quot;Vale.X64.Memory.fsti.checked\&quot;,\n \&quot;Vale.X64.Machine_s.fst.checked\&quot;,\n \&quot;Vale.X64.Decls.fsti.checked\&quot;,\n \&quot;Vale.Interop.X64.fsti.checked\&quot;,\n \&quot;Vale.Interop.Base.fst.checked\&quot;,\n \&quot;Vale.Interop.Assumptions.fst.checked\&quot;,\n \&quot;Vale.Def.Types_s.fst.checked\&quot;,\n \&quot;Vale.AsLowStar.Wrapper.fsti.checked\&quot;,\n \&quot;Vale.AsLowStar.ValeSig.fst.checked\&quot;,\n \&quot;Vale.AsLowStar.LowStarSig.fst.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;LowStar.BufferView.Up.fsti.checked\&quot;,\n \&quot;LowStar.BufferView.Down.fsti.checked\&quot;,\n \&quot;LowStar.Buffer.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.Mul.fst.checked\&quot;,\n \&quot;FStar.List.fst.checked\&quot;,\n \&quot;FStar.HyperStack.ST.fsti.checked\&quot;,\n \&quot;FStar.HyperStack.fst.checked\&quot;\n ],\n \&quot;interface_file\&quot;: true,\n \&quot;source_file\&quot;: \&quot;Vale.Stdcalls.X64.Aes.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;total&quot;],&quot;string&quot;:&quot;[\n \&quot;total\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;Vale.Stdcalls.X64.Aes.as_normal_t&quot;,&quot;Vale.Stdcalls.X64.Aes.lowstar_key256_t&quot;,&quot;Vale.Stdcalls.X64.Aes.lowstar_key256&quot;],&quot;string&quot;:&quot;[\n \&quot;Vale.Stdcalls.X64.Aes.as_normal_t\&quot;,\n \&quot;Vale.Stdcalls.X64.Aes.lowstar_key256_t\&quot;,\n \&quot;Vale.Stdcalls.X64.Aes.lowstar_key256\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Vale.Stdcalls.X64.Aes\n\nopen FStar.Mul\nopen FStar.HyperStack.ST\nmodule HS = FStar.HyperStack\nmodule B = LowStar.Buffer\nmodule DV = LowStar.BufferView.Down\nmodule UV = LowStar.BufferView.Up\nopen Vale.Def.Types_s\n\nopen Vale.Interop.Base\nmodule IX64 = Vale.Interop.X64\nmodule VSig = Vale.AsLowStar.ValeSig\nmodule LSig = Vale.AsLowStar.LowStarSig\nmodule ME = Vale.X64.Memory\nmodule V = Vale.X64.Decls\nmodule IA = Vale.Interop.Assumptions\nmodule W = Vale.AsLowStar.Wrapper\nopen Vale.X64.MemoryAdapters\nmodule VS = Vale.X64.State\nmodule MS = Vale.X64.Machine_s\n\nlet lowstar_key128 : lowstar_key128_t =\n assert_norm (List.length dom + List.length ([]<:list arg) <= 4);\n IX64.wrap_weak_stdcall\n code_key128\n dom\n (W.mk_prediction code_key128 dom [] (key128_lemma code_key128 IA.win))\n\nlet aes128_key_expansion //: normal lowstar_key128_t\n = as_normal_t #lowstar_key128_t lowstar_key128\n\nlet lowstar_key256 : lowstar_key256_t =\n assert_norm (List.length dom + List.length ([]<:list arg) <= 4);\n IX64.wrap_weak_stdcall\n code_key256\n dom\n (W.mk_prediction code_key256 dom [] (key256_lemma code_key256 IA.win))&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Stdcalls.X64.Aes.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 2,\n \&quot;initial_ifuel\&quot;: 0,\n \&quot;max_fuel\&quot;: 1,\n \&quot;max_ifuel\&quot;: 1,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: true,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;native\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;wrapped\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: false,\n \&quot;z3cliopt\&quot;: [\n \&quot;smt.arith.nl=false\&quot;,\n \&quot;smt.QI.EAGER_THRESHOLD=100\&quot;,\n \&quot;smt.CASE_SPLIT=3\&quot;\n ],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 5,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val aes256_key_expansion : normal lowstar_key256_t&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Stdcalls.X64.Aes.aes256_key_expansion&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;vale/code/arch/x64/interop/Vale.Stdcalls.X64.Aes.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;12c5e9539c7e3c366c26409d3b86493548c4483e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/hacl-star/hacl-star.git\&quot;,\n \&quot;project_name\&quot;: \&quot;hacl-star\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Interop.Base.normal Vale.Stdcalls.X64.Aes.lowstar_key256_t&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 48,\n \&quot;end_line\&quot;: 41,\n \&quot;start_col\&quot;: 4,\n \&quot;start_line\&quot;: 41\n}&quot;}}},{&quot;rowIdx&quot;:2,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Prims.Tot&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val lowstar_key128:lowstar_key128_t&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.Machine_s&quot;,&quot;short_module&quot;:&quot;MS&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.State&quot;,&quot;short_module&quot;:&quot;VS&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.X64.MemoryAdapters&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AsLowStar.Wrapper&quot;,&quot;short_module&quot;:&quot;W&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.Interop.Assumptions&quot;,&quot;short_module&quot;:&quot;IA&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.Decls&quot;,&quot;short_module&quot;:&quot;V&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.Memory&quot;,&quot;short_module&quot;:&quot;ME&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AsLowStar.LowStarSig&quot;,&quot;short_module&quot;:&quot;LSig&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AsLowStar.ValeSig&quot;,&quot;short_module&quot;:&quot;VSig&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.Interop.X64&quot;,&quot;short_module&quot;:&quot;IX64&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Interop.Base&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Def.Types_s&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.BufferView.Up&quot;,&quot;short_module&quot;:&quot;UV&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.BufferView.Down&quot;,&quot;short_module&quot;:&quot;DV&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.Buffer&quot;,&quot;short_module&quot;:&quot;B&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.HyperStack&quot;,&quot;short_module&quot;:&quot;HS&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.HyperStack.ST&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Mul&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AES.X64.AES&quot;,&quot;short_module&quot;:&quot;AE&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.AES.AES_s&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.Machine_s&quot;,&quot;short_module&quot;:&quot;MS&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.State&quot;,&quot;short_module&quot;:&quot;VS&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.X64.MemoryAdapters&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AsLowStar.Wrapper&quot;,&quot;short_module&quot;:&quot;W&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.Interop.Assumptions&quot;,&quot;short_module&quot;:&quot;IA&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.Decls&quot;,&quot;short_module&quot;:&quot;V&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.Memory&quot;,&quot;short_module&quot;:&quot;ME&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AsLowStar.LowStarSig&quot;,&quot;short_module&quot;:&quot;LSig&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AsLowStar.ValeSig&quot;,&quot;short_module&quot;:&quot;VSig&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.Interop.X64&quot;,&quot;short_module&quot;:&quot;IX64&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Interop.Base&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Def.Types_s&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.BufferView.Up&quot;,&quot;short_module&quot;:&quot;UV&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.BufferView.Down&quot;,&quot;short_module&quot;:&quot;DV&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Mul&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.HyperStack&quot;,&quot;short_module&quot;:&quot;HS&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.Buffer&quot;,&quot;short_module&quot;:&quot;B&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.HyperStack.ST&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Stdcalls.X64&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Stdcalls.X64&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.Machine_s\&quot;,\n \&quot;short_module\&quot;: \&quot;MS\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.State\&quot;,\n \&quot;short_module\&quot;: \&quot;VS\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.X64.MemoryAdapters\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AsLowStar.Wrapper\&quot;,\n \&quot;short_module\&quot;: \&quot;W\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.Interop.Assumptions\&quot;,\n \&quot;short_module\&quot;: \&quot;IA\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.Decls\&quot;,\n \&quot;short_module\&quot;: \&quot;V\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.Memory\&quot;,\n \&quot;short_module\&quot;: \&quot;ME\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AsLowStar.LowStarSig\&quot;,\n \&quot;short_module\&quot;: \&quot;LSig\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AsLowStar.ValeSig\&quot;,\n \&quot;short_module\&quot;: \&quot;VSig\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.Interop.X64\&quot;,\n \&quot;short_module\&quot;: \&quot;IX64\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Interop.Base\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Def.Types_s\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.BufferView.Up\&quot;,\n \&quot;short_module\&quot;: \&quot;UV\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.BufferView.Down\&quot;,\n \&quot;short_module\&quot;: \&quot;DV\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.Buffer\&quot;,\n \&quot;short_module\&quot;: \&quot;B\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack\&quot;,\n \&quot;short_module\&quot;: \&quot;HS\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack.ST\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Mul\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AES.X64.AES\&quot;,\n \&quot;short_module\&quot;: \&quot;AE\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.AES.AES_s\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.Machine_s\&quot;,\n \&quot;short_module\&quot;: \&quot;MS\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.State\&quot;,\n \&quot;short_module\&quot;: \&quot;VS\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.X64.MemoryAdapters\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AsLowStar.Wrapper\&quot;,\n \&quot;short_module\&quot;: \&quot;W\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.Interop.Assumptions\&quot;,\n \&quot;short_module\&quot;: \&quot;IA\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.Decls\&quot;,\n \&quot;short_module\&quot;: \&quot;V\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.Memory\&quot;,\n \&quot;short_module\&quot;: \&quot;ME\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AsLowStar.LowStarSig\&quot;,\n \&quot;short_module\&quot;: \&quot;LSig\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AsLowStar.ValeSig\&quot;,\n \&quot;short_module\&quot;: \&quot;VSig\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.Interop.X64\&quot;,\n \&quot;short_module\&quot;: \&quot;IX64\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Interop.Base\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Def.Types_s\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.BufferView.Up\&quot;,\n \&quot;short_module\&quot;: \&quot;UV\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.BufferView.Down\&quot;,\n \&quot;short_module\&quot;: \&quot;DV\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Mul\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack\&quot;,\n \&quot;short_module\&quot;: \&quot;HS\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.Buffer\&quot;,\n \&quot;short_module\&quot;: \&quot;B\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack.ST\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Stdcalls.X64\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Stdcalls.X64\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let lowstar_key128 : lowstar_key128_t =\n assert_norm (List.length dom + List.length ([]<:list arg) <= 4);\n IX64.wrap_weak_stdcall\n code_key128\n dom\n (W.mk_prediction code_key128 dom [] (key128_lemma code_key128 IA.win))&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val lowstar_key128:lowstar_key128_t\nlet lowstar_key128:lowstar_key128_t =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;assert_norm (List.length dom + List.length ([] <: list arg) <= 4);\nIX64.wrap_weak_stdcall code_key128\n dom\n (W.mk_prediction code_key128 dom [] (key128_lemma code_key128 IA.win))&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Vale.Stdcalls.X64.Aes.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Vale.X64.State.fsti.checked\&quot;,\n \&quot;Vale.X64.MemoryAdapters.fsti.checked\&quot;,\n \&quot;Vale.X64.Memory.fsti.checked\&quot;,\n \&quot;Vale.X64.Machine_s.fst.checked\&quot;,\n \&quot;Vale.X64.Decls.fsti.checked\&quot;,\n \&quot;Vale.Interop.X64.fsti.checked\&quot;,\n \&quot;Vale.Interop.Base.fst.checked\&quot;,\n \&quot;Vale.Interop.Assumptions.fst.checked\&quot;,\n \&quot;Vale.Def.Types_s.fst.checked\&quot;,\n \&quot;Vale.AsLowStar.Wrapper.fsti.checked\&quot;,\n \&quot;Vale.AsLowStar.ValeSig.fst.checked\&quot;,\n \&quot;Vale.AsLowStar.LowStarSig.fst.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;LowStar.BufferView.Up.fsti.checked\&quot;,\n \&quot;LowStar.BufferView.Down.fsti.checked\&quot;,\n \&quot;LowStar.Buffer.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.Mul.fst.checked\&quot;,\n \&quot;FStar.List.fst.checked\&quot;,\n \&quot;FStar.HyperStack.ST.fsti.checked\&quot;,\n \&quot;FStar.HyperStack.fst.checked\&quot;\n ],\n \&quot;interface_file\&quot;: true,\n \&quot;source_file\&quot;: \&quot;Vale.Stdcalls.X64.Aes.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;total&quot;],&quot;string&quot;:&quot;[\n \&quot;total\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;Vale.Interop.X64.wrap_weak_stdcall&quot;,&quot;Vale.Stdcalls.X64.Aes.code_key128&quot;,&quot;Vale.Stdcalls.X64.Aes.dom&quot;,&quot;Vale.AsLowStar.Wrapper.pre_rel_generic&quot;,&quot;Vale.Interop.X64.max_stdcall&quot;,&quot;Vale.Interop.X64.arg_reg_stdcall&quot;,&quot;Prims.Nil&quot;,&quot;Vale.Interop.Base.arg&quot;,&quot;Vale.Stdcalls.X64.Aes.key128_pre&quot;,&quot;Vale.AsLowStar.Wrapper.post_rel_generic&quot;,&quot;Vale.Stdcalls.X64.Aes.key128_post&quot;,&quot;Vale.AsLowStar.Wrapper.mk_prediction&quot;,&quot;Vale.Interop.X64.regs_modified_stdcall&quot;,&quot;Vale.Interop.X64.xmms_modified_stdcall&quot;,&quot;Vale.Stdcalls.X64.Aes.key128_lemma&quot;,&quot;Vale.Interop.Assumptions.win&quot;,&quot;Prims.unit&quot;,&quot;FStar.Pervasives.assert_norm&quot;,&quot;Prims.b2t&quot;,&quot;Prims.op_LessThanOrEqual&quot;,&quot;Prims.op_Addition&quot;,&quot;FStar.List.Tot.Base.length&quot;,&quot;Vale.Interop.Base.td&quot;,&quot;Prims.list&quot;],&quot;string&quot;:&quot;[\n \&quot;Vale.Interop.X64.wrap_weak_stdcall\&quot;,\n \&quot;Vale.Stdcalls.X64.Aes.code_key128\&quot;,\n \&quot;Vale.Stdcalls.X64.Aes.dom\&quot;,\n \&quot;Vale.AsLowStar.Wrapper.pre_rel_generic\&quot;,\n \&quot;Vale.Interop.X64.max_stdcall\&quot;,\n \&quot;Vale.Interop.X64.arg_reg_stdcall\&quot;,\n \&quot;Prims.Nil\&quot;,\n \&quot;Vale.Interop.Base.arg\&quot;,\n \&quot;Vale.Stdcalls.X64.Aes.key128_pre\&quot;,\n \&quot;Vale.AsLowStar.Wrapper.post_rel_generic\&quot;,\n \&quot;Vale.Stdcalls.X64.Aes.key128_post\&quot;,\n \&quot;Vale.AsLowStar.Wrapper.mk_prediction\&quot;,\n \&quot;Vale.Interop.X64.regs_modified_stdcall\&quot;,\n \&quot;Vale.Interop.X64.xmms_modified_stdcall\&quot;,\n \&quot;Vale.Stdcalls.X64.Aes.key128_lemma\&quot;,\n \&quot;Vale.Interop.Assumptions.win\&quot;,\n \&quot;Prims.unit\&quot;,\n \&quot;FStar.Pervasives.assert_norm\&quot;,\n \&quot;Prims.b2t\&quot;,\n \&quot;Prims.op_LessThanOrEqual\&quot;,\n \&quot;Prims.op_Addition\&quot;,\n \&quot;FStar.List.Tot.Base.length\&quot;,\n \&quot;Vale.Interop.Base.td\&quot;,\n \&quot;Prims.list\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Vale.Stdcalls.X64.Aes\n\nopen FStar.Mul\nopen FStar.HyperStack.ST\nmodule HS = FStar.HyperStack\nmodule B = LowStar.Buffer\nmodule DV = LowStar.BufferView.Down\nmodule UV = LowStar.BufferView.Up\nopen Vale.Def.Types_s\n\nopen Vale.Interop.Base\nmodule IX64 = Vale.Interop.X64\nmodule VSig = Vale.AsLowStar.ValeSig\nmodule LSig = Vale.AsLowStar.LowStarSig\nmodule ME = Vale.X64.Memory\nmodule V = Vale.X64.Decls\nmodule IA = Vale.Interop.Assumptions\nmodule W = Vale.AsLowStar.Wrapper\nopen Vale.X64.MemoryAdapters\nmodule VS = Vale.X64.State\nmodule MS = Vale.X64.Machine_s&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Stdcalls.X64.Aes.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 2,\n \&quot;initial_ifuel\&quot;: 0,\n \&quot;max_fuel\&quot;: 1,\n \&quot;max_ifuel\&quot;: 1,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: true,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;native\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;wrapped\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: false,\n \&quot;z3cliopt\&quot;: [\n \&quot;smt.arith.nl=false\&quot;,\n \&quot;smt.QI.EAGER_THRESHOLD=100\&quot;,\n \&quot;smt.CASE_SPLIT=3\&quot;\n ],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 5,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val lowstar_key128:lowstar_key128_t&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Stdcalls.X64.Aes.lowstar_key128&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;vale/code/arch/x64/interop/Vale.Stdcalls.X64.Aes.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;12c5e9539c7e3c366c26409d3b86493548c4483e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/hacl-star/hacl-star.git\&quot;,\n \&quot;project_name\&quot;: \&quot;hacl-star\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Stdcalls.X64.Aes.lowstar_key128_t&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 74,\n \&quot;end_line\&quot;: 28,\n \&quot;start_col\&quot;: 2,\n \&quot;start_line\&quot;: 24\n}&quot;}}},{&quot;rowIdx&quot;:3,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Prims.Tot&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val lowstar_key256:lowstar_key256_t&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.Machine_s&quot;,&quot;short_module&quot;:&quot;MS&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.State&quot;,&quot;short_module&quot;:&quot;VS&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.X64.MemoryAdapters&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AsLowStar.Wrapper&quot;,&quot;short_module&quot;:&quot;W&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.Interop.Assumptions&quot;,&quot;short_module&quot;:&quot;IA&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.Decls&quot;,&quot;short_module&quot;:&quot;V&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.Memory&quot;,&quot;short_module&quot;:&quot;ME&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AsLowStar.LowStarSig&quot;,&quot;short_module&quot;:&quot;LSig&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AsLowStar.ValeSig&quot;,&quot;short_module&quot;:&quot;VSig&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.Interop.X64&quot;,&quot;short_module&quot;:&quot;IX64&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Interop.Base&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Def.Types_s&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.BufferView.Up&quot;,&quot;short_module&quot;:&quot;UV&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.BufferView.Down&quot;,&quot;short_module&quot;:&quot;DV&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.Buffer&quot;,&quot;short_module&quot;:&quot;B&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.HyperStack&quot;,&quot;short_module&quot;:&quot;HS&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.HyperStack.ST&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Mul&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AES.X64.AES&quot;,&quot;short_module&quot;:&quot;AE&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.AES.AES_s&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.Machine_s&quot;,&quot;short_module&quot;:&quot;MS&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.State&quot;,&quot;short_module&quot;:&quot;VS&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.X64.MemoryAdapters&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AsLowStar.Wrapper&quot;,&quot;short_module&quot;:&quot;W&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.Interop.Assumptions&quot;,&quot;short_module&quot;:&quot;IA&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.Decls&quot;,&quot;short_module&quot;:&quot;V&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.X64.Memory&quot;,&quot;short_module&quot;:&quot;ME&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AsLowStar.LowStarSig&quot;,&quot;short_module&quot;:&quot;LSig&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.AsLowStar.ValeSig&quot;,&quot;short_module&quot;:&quot;VSig&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Vale.Interop.X64&quot;,&quot;short_module&quot;:&quot;IX64&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Interop.Base&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Def.Types_s&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.BufferView.Up&quot;,&quot;short_module&quot;:&quot;UV&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.BufferView.Down&quot;,&quot;short_module&quot;:&quot;DV&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Mul&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.HyperStack&quot;,&quot;short_module&quot;:&quot;HS&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.Buffer&quot;,&quot;short_module&quot;:&quot;B&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.HyperStack.ST&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Stdcalls.X64&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Stdcalls.X64&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.Machine_s\&quot;,\n \&quot;short_module\&quot;: \&quot;MS\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.State\&quot;,\n \&quot;short_module\&quot;: \&quot;VS\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.X64.MemoryAdapters\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AsLowStar.Wrapper\&quot;,\n \&quot;short_module\&quot;: \&quot;W\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.Interop.Assumptions\&quot;,\n \&quot;short_module\&quot;: \&quot;IA\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.Decls\&quot;,\n \&quot;short_module\&quot;: \&quot;V\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.Memory\&quot;,\n \&quot;short_module\&quot;: \&quot;ME\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AsLowStar.LowStarSig\&quot;,\n \&quot;short_module\&quot;: \&quot;LSig\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AsLowStar.ValeSig\&quot;,\n \&quot;short_module\&quot;: \&quot;VSig\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.Interop.X64\&quot;,\n \&quot;short_module\&quot;: \&quot;IX64\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Interop.Base\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Def.Types_s\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.BufferView.Up\&quot;,\n \&quot;short_module\&quot;: \&quot;UV\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.BufferView.Down\&quot;,\n \&quot;short_module\&quot;: \&quot;DV\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.Buffer\&quot;,\n \&quot;short_module\&quot;: \&quot;B\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack\&quot;,\n \&quot;short_module\&quot;: \&quot;HS\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack.ST\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Mul\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AES.X64.AES\&quot;,\n \&quot;short_module\&quot;: \&quot;AE\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.AES.AES_s\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.Machine_s\&quot;,\n \&quot;short_module\&quot;: \&quot;MS\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.State\&quot;,\n \&quot;short_module\&quot;: \&quot;VS\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.X64.MemoryAdapters\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AsLowStar.Wrapper\&quot;,\n \&quot;short_module\&quot;: \&quot;W\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.Interop.Assumptions\&quot;,\n \&quot;short_module\&quot;: \&quot;IA\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.Decls\&quot;,\n \&quot;short_module\&quot;: \&quot;V\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.X64.Memory\&quot;,\n \&quot;short_module\&quot;: \&quot;ME\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AsLowStar.LowStarSig\&quot;,\n \&quot;short_module\&quot;: \&quot;LSig\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.AsLowStar.ValeSig\&quot;,\n \&quot;short_module\&quot;: \&quot;VSig\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Vale.Interop.X64\&quot;,\n \&quot;short_module\&quot;: \&quot;IX64\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Interop.Base\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Def.Types_s\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.BufferView.Up\&quot;,\n \&quot;short_module\&quot;: \&quot;UV\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.BufferView.Down\&quot;,\n \&quot;short_module\&quot;: \&quot;DV\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Mul\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack\&quot;,\n \&quot;short_module\&quot;: \&quot;HS\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.Buffer\&quot;,\n \&quot;short_module\&quot;: \&quot;B\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack.ST\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Stdcalls.X64\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Stdcalls.X64\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let lowstar_key256 : lowstar_key256_t =\n assert_norm (List.length dom + List.length ([]<:list arg) <= 4);\n IX64.wrap_weak_stdcall\n code_key256\n dom\n (W.mk_prediction code_key256 dom [] (key256_lemma code_key256 IA.win))&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val lowstar_key256:lowstar_key256_t\nlet lowstar_key256:lowstar_key256_t =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;assert_norm (List.length dom + List.length ([] <: list arg) <= 4);\nIX64.wrap_weak_stdcall code_key256\n dom\n (W.mk_prediction code_key256 dom [] (key256_lemma code_key256 IA.win))&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Vale.Stdcalls.X64.Aes.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Vale.X64.State.fsti.checked\&quot;,\n \&quot;Vale.X64.MemoryAdapters.fsti.checked\&quot;,\n \&quot;Vale.X64.Memory.fsti.checked\&quot;,\n \&quot;Vale.X64.Machine_s.fst.checked\&quot;,\n \&quot;Vale.X64.Decls.fsti.checked\&quot;,\n \&quot;Vale.Interop.X64.fsti.checked\&quot;,\n \&quot;Vale.Interop.Base.fst.checked\&quot;,\n \&quot;Vale.Interop.Assumptions.fst.checked\&quot;,\n \&quot;Vale.Def.Types_s.fst.checked\&quot;,\n \&quot;Vale.AsLowStar.Wrapper.fsti.checked\&quot;,\n \&quot;Vale.AsLowStar.ValeSig.fst.checked\&quot;,\n \&quot;Vale.AsLowStar.LowStarSig.fst.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;LowStar.BufferView.Up.fsti.checked\&quot;,\n \&quot;LowStar.BufferView.Down.fsti.checked\&quot;,\n \&quot;LowStar.Buffer.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.Mul.fst.checked\&quot;,\n \&quot;FStar.List.fst.checked\&quot;,\n \&quot;FStar.HyperStack.ST.fsti.checked\&quot;,\n \&quot;FStar.HyperStack.fst.checked\&quot;\n ],\n \&quot;interface_file\&quot;: true,\n \&quot;source_file\&quot;: \&quot;Vale.Stdcalls.X64.Aes.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;total&quot;],&quot;string&quot;:&quot;[\n \&quot;total\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;Vale.Interop.X64.wrap_weak_stdcall&quot;,&quot;Vale.Stdcalls.X64.Aes.code_key256&quot;,&quot;Vale.Stdcalls.X64.Aes.dom&quot;,&quot;Vale.AsLowStar.Wrapper.pre_rel_generic&quot;,&quot;Vale.Interop.X64.max_stdcall&quot;,&quot;Vale.Interop.X64.arg_reg_stdcall&quot;,&quot;Prims.Nil&quot;,&quot;Vale.Interop.Base.arg&quot;,&quot;Vale.Stdcalls.X64.Aes.key256_pre&quot;,&quot;Vale.AsLowStar.Wrapper.post_rel_generic&quot;,&quot;Vale.Stdcalls.X64.Aes.key256_post&quot;,&quot;Vale.AsLowStar.Wrapper.mk_prediction&quot;,&quot;Vale.Interop.X64.regs_modified_stdcall&quot;,&quot;Vale.Interop.X64.xmms_modified_stdcall&quot;,&quot;Vale.Stdcalls.X64.Aes.key256_lemma&quot;,&quot;Vale.Interop.Assumptions.win&quot;,&quot;Prims.unit&quot;,&quot;FStar.Pervasives.assert_norm&quot;,&quot;Prims.b2t&quot;,&quot;Prims.op_LessThanOrEqual&quot;,&quot;Prims.op_Addition&quot;,&quot;FStar.List.Tot.Base.length&quot;,&quot;Vale.Interop.Base.td&quot;,&quot;Prims.list&quot;],&quot;string&quot;:&quot;[\n \&quot;Vale.Interop.X64.wrap_weak_stdcall\&quot;,\n \&quot;Vale.Stdcalls.X64.Aes.code_key256\&quot;,\n \&quot;Vale.Stdcalls.X64.Aes.dom\&quot;,\n \&quot;Vale.AsLowStar.Wrapper.pre_rel_generic\&quot;,\n \&quot;Vale.Interop.X64.max_stdcall\&quot;,\n \&quot;Vale.Interop.X64.arg_reg_stdcall\&quot;,\n \&quot;Prims.Nil\&quot;,\n \&quot;Vale.Interop.Base.arg\&quot;,\n \&quot;Vale.Stdcalls.X64.Aes.key256_pre\&quot;,\n \&quot;Vale.AsLowStar.Wrapper.post_rel_generic\&quot;,\n \&quot;Vale.Stdcalls.X64.Aes.key256_post\&quot;,\n \&quot;Vale.AsLowStar.Wrapper.mk_prediction\&quot;,\n \&quot;Vale.Interop.X64.regs_modified_stdcall\&quot;,\n \&quot;Vale.Interop.X64.xmms_modified_stdcall\&quot;,\n \&quot;Vale.Stdcalls.X64.Aes.key256_lemma\&quot;,\n \&quot;Vale.Interop.Assumptions.win\&quot;,\n \&quot;Prims.unit\&quot;,\n \&quot;FStar.Pervasives.assert_norm\&quot;,\n \&quot;Prims.b2t\&quot;,\n \&quot;Prims.op_LessThanOrEqual\&quot;,\n \&quot;Prims.op_Addition\&quot;,\n \&quot;FStar.List.Tot.Base.length\&quot;,\n \&quot;Vale.Interop.Base.td\&quot;,\n \&quot;Prims.list\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Vale.Stdcalls.X64.Aes\n\nopen FStar.Mul\nopen FStar.HyperStack.ST\nmodule HS = FStar.HyperStack\nmodule B = LowStar.Buffer\nmodule DV = LowStar.BufferView.Down\nmodule UV = LowStar.BufferView.Up\nopen Vale.Def.Types_s\n\nopen Vale.Interop.Base\nmodule IX64 = Vale.Interop.X64\nmodule VSig = Vale.AsLowStar.ValeSig\nmodule LSig = Vale.AsLowStar.LowStarSig\nmodule ME = Vale.X64.Memory\nmodule V = Vale.X64.Decls\nmodule IA = Vale.Interop.Assumptions\nmodule W = Vale.AsLowStar.Wrapper\nopen Vale.X64.MemoryAdapters\nmodule VS = Vale.X64.State\nmodule MS = Vale.X64.Machine_s\n\nlet lowstar_key128 : lowstar_key128_t =\n assert_norm (List.length dom + List.length ([]<:list arg) <= 4);\n IX64.wrap_weak_stdcall\n code_key128\n dom\n (W.mk_prediction code_key128 dom [] (key128_lemma code_key128 IA.win))\n\nlet aes128_key_expansion //: normal lowstar_key128_t\n = as_normal_t #lowstar_key128_t lowstar_key128&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Stdcalls.X64.Aes.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 2,\n \&quot;initial_ifuel\&quot;: 0,\n \&quot;max_fuel\&quot;: 1,\n \&quot;max_ifuel\&quot;: 1,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: true,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;native\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;wrapped\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: false,\n \&quot;z3cliopt\&quot;: [\n \&quot;smt.arith.nl=false\&quot;,\n \&quot;smt.QI.EAGER_THRESHOLD=100\&quot;,\n \&quot;smt.CASE_SPLIT=3\&quot;\n ],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 5,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val lowstar_key256:lowstar_key256_t&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Stdcalls.X64.Aes.lowstar_key256&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;vale/code/arch/x64/interop/Vale.Stdcalls.X64.Aes.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;12c5e9539c7e3c366c26409d3b86493548c4483e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/hacl-star/hacl-star.git\&quot;,\n \&quot;project_name\&quot;: \&quot;hacl-star\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Stdcalls.X64.Aes.lowstar_key256_t&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 74,\n \&quot;end_line\&quot;: 38,\n \&quot;start_col\&quot;: 2,\n \&quot;start_line\&quot;: 34\n}&quot;}}},{&quot;rowIdx&quot;:4,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;FStar.Tactics.Effect.Tac&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val check_prop_validity (g: env) (p: term) (typing: tot_typing g p tm_prop)\n : T.Tac (prop_validity g p)&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Pulse.Syntax.Printer&quot;,&quot;short_module&quot;:&quot;P&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Tactics.V2&quot;,&quot;short_module&quot;:&quot;T&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Checker.Prover&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Checker.Base&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Typing&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Syntax&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Tactics.V2&quot;,&quot;short_module&quot;:&quot;T&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Checker.Base&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Typing&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Syntax&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Checker&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Checker&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Pulse.Syntax.Printer\&quot;,\n \&quot;short_module\&quot;: \&quot;P\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Tactics.V2\&quot;,\n \&quot;short_module\&quot;: \&quot;T\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Checker.Prover\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Checker.Base\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Typing\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Syntax\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Tactics.V2\&quot;,\n \&quot;short_module\&quot;: \&quot;T\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Checker.Base\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Typing\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Syntax\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Checker\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Checker\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let check_prop_validity (g:env) (p:term) (typing:tot_typing g p tm_prop): T.Tac (prop_validity g p) =\n Pulse.Checker.Pure.check_prop_validity g p typing&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val check_prop_validity (g: env) (p: term) (typing: tot_typing g p tm_prop)\n : T.Tac (prop_validity g p)\nlet check_prop_validity (g: env) (p: term) (typing: tot_typing g p tm_prop)\n : T.Tac (prop_validity g p) =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Pulse.Checker.Pure.check_prop_validity g p typing&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Pulse.Checker.IntroPure.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Pulse.Typing.Metatheory.fsti.checked\&quot;,\n \&quot;Pulse.Typing.Env.fsti.checked\&quot;,\n \&quot;Pulse.Typing.fst.checked\&quot;,\n \&quot;Pulse.Syntax.Printer.fsti.checked\&quot;,\n \&quot;Pulse.Syntax.fst.checked\&quot;,\n \&quot;Pulse.Checker.Pure.fsti.checked\&quot;,\n \&quot;Pulse.Checker.Prover.fsti.checked\&quot;,\n \&quot;Pulse.Checker.Base.fsti.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;FStar.Tactics.V2.fst.checked\&quot;,\n \&quot;FStar.Printf.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;\n ],\n \&quot;interface_file\&quot;: true,\n \&quot;source_file\&quot;: \&quot;Pulse.Checker.IntroPure.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;Pulse.Typing.Env.env&quot;,&quot;Pulse.Syntax.Base.term&quot;,&quot;Pulse.Typing.tot_typing&quot;,&quot;Pulse.Typing.tm_prop&quot;,&quot;Pulse.Checker.Pure.check_prop_validity&quot;,&quot;Pulse.Typing.prop_validity&quot;],&quot;string&quot;:&quot;[\n \&quot;Pulse.Typing.Env.env\&quot;,\n \&quot;Pulse.Syntax.Base.term\&quot;,\n \&quot;Pulse.Typing.tot_typing\&quot;,\n \&quot;Pulse.Typing.tm_prop\&quot;,\n \&quot;Pulse.Checker.Pure.check_prop_validity\&quot;,\n \&quot;Pulse.Typing.prop_validity\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Pulse.Checker.IntroPure\n\nopen Pulse.Syntax\nopen Pulse.Typing\nopen Pulse.Checker.Base\nopen Pulse.Checker.Prover\n\nmodule T = FStar.Tactics.V2\nmodule P = Pulse.Syntax.Printer\n\nlet check_prop (g:env) (p:term) \n : T.Tac (p:term &amp; tot_typing g p tm_prop) =\n \n let p0 = p in\n let (| p, p_typing |) = Pulse.Checker.Pure.check_vprop g (tm_pure p) in\n match p.t with\n | Tm_Pure pp ->\n let prop_typing = Pulse.Typing.Metatheory.pure_typing_inversion #_ #pp p_typing in\n (| pp, prop_typing |)\n | _ ->\n fail g None\n (Printf.sprintf \&quot;Impossible: check_intro_pure: checking a pure vprop %s returned a non-pure vprop %s,\\\n please file a bug-report\&quot;\n (P.term_to_string (tm_pure p0))\n (P.term_to_string p))&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Pulse.Checker.IntroPure.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 2,\n \&quot;initial_ifuel\&quot;: 1,\n \&quot;max_fuel\&quot;: 8,\n \&quot;max_ifuel\&quot;: 2,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: false,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: true,\n \&quot;z3cliopt\&quot;: [],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 5,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val check_prop_validity (g: env) (p: term) (typing: tot_typing g p tm_prop)\n : T.Tac (prop_validity g p)&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Pulse.Checker.IntroPure.check_prop_validity&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;lib/steel/pulse/Pulse.Checker.IntroPure.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;7fbb54e94dd4f48ff7cb867d3bae6889a635541e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/FStarLang/steel.git\&quot;,\n \&quot;project_name\&quot;: \&quot;steel\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;\n g: Pulse.Typing.Env.env ->\n p: Pulse.Syntax.Base.term ->\n typing: Pulse.Typing.tot_typing g p Pulse.Typing.tm_prop\n -> FStar.Tactics.Effect.Tac (Pulse.Typing.prop_validity g p)&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 53,\n \&quot;end_line\&quot;: 28,\n \&quot;start_col\&quot;: 4,\n \&quot;start_line\&quot;: 28\n}&quot;}}},{&quot;rowIdx&quot;:5,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;FStar.Tactics.Effect.Tac&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val check\n (g:env)\n (pre:term)\n (pre_typing:tot_typing g pre tm_vprop)\n (post_hint:post_hint_opt g)\n (res_ppname:ppname)\n (t:st_term { Tm_IntroPure? t.term })\n : T.Tac (checker_result_t g pre post_hint)&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Pulse.Syntax.Printer&quot;,&quot;short_module&quot;:&quot;P&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Checker.Prover&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Tactics.V2&quot;,&quot;short_module&quot;:&quot;T&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Checker.Base&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Typing&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Syntax&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Checker&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Checker&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Pulse.Syntax.Printer\&quot;,\n \&quot;short_module\&quot;: \&quot;P\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Checker.Prover\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Tactics.V2\&quot;,\n \&quot;short_module\&quot;: \&quot;T\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Checker.Base\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Typing\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Syntax\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Checker\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Checker\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let check\n (g:env)\n (pre:term)\n (pre_typing:tot_typing g pre tm_vprop)\n (post_hint:post_hint_opt g)\n (res_ppname:ppname)\n (t:st_term { Tm_IntroPure? t.term })\n\n : T.Tac (checker_result_t g pre post_hint) =\n\n let g = Pulse.Typing.Env.push_context g \&quot;check_intro_pure\&quot; t.range in\n\n let Tm_IntroPure { p } = t.term in\n let (| p, p_typing |) = check_prop g p in\n let pv = check_prop_validity g p p_typing in\n let st_typing = T_IntroPure _ _ p_typing pv in\n prove_post_hint (try_frame_pre pre_typing (match_comp_res_with_post_hint st_typing post_hint) res_ppname) post_hint t.range&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val check\n (g:env)\n (pre:term)\n (pre_typing:tot_typing g pre tm_vprop)\n (post_hint:post_hint_opt g)\n (res_ppname:ppname)\n (t:st_term { Tm_IntroPure? t.term })\n : T.Tac (checker_result_t g pre post_hint)\nlet check\n (g: env)\n (pre: term)\n (pre_typing: tot_typing g pre tm_vprop)\n (post_hint: post_hint_opt g)\n (res_ppname: ppname)\n (t: st_term{Tm_IntroPure? t.term})\n : T.Tac (checker_result_t g pre post_hint) =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let g = Pulse.Typing.Env.push_context g \&quot;check_intro_pure\&quot; t.range in\nlet Tm_IntroPure { p = p } = t.term in\nlet (| p , p_typing |) = check_prop g p in\nlet pv = check_prop_validity g p p_typing in\nlet st_typing = T_IntroPure _ _ p_typing pv in\nprove_post_hint (try_frame_pre pre_typing\n (match_comp_res_with_post_hint st_typing post_hint)\n res_ppname)\n post_hint\n t.range&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Pulse.Checker.IntroPure.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Pulse.Typing.Metatheory.fsti.checked\&quot;,\n \&quot;Pulse.Typing.Env.fsti.checked\&quot;,\n \&quot;Pulse.Typing.fst.checked\&quot;,\n \&quot;Pulse.Syntax.Printer.fsti.checked\&quot;,\n \&quot;Pulse.Syntax.fst.checked\&quot;,\n \&quot;Pulse.Checker.Pure.fsti.checked\&quot;,\n \&quot;Pulse.Checker.Prover.fsti.checked\&quot;,\n \&quot;Pulse.Checker.Base.fsti.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;FStar.Tactics.V2.fst.checked\&quot;,\n \&quot;FStar.Printf.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;\n ],\n \&quot;interface_file\&quot;: true,\n \&quot;source_file\&quot;: \&quot;Pulse.Checker.IntroPure.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;Pulse.Typing.Env.env&quot;,&quot;Pulse.Syntax.Base.term&quot;,&quot;Pulse.Typing.tot_typing&quot;,&quot;Pulse.Syntax.Base.tm_vprop&quot;,&quot;Pulse.Typing.post_hint_opt&quot;,&quot;Pulse.Syntax.Base.ppname&quot;,&quot;Pulse.Syntax.Base.st_term&quot;,&quot;Prims.b2t&quot;,&quot;Pulse.Syntax.Base.uu___is_Tm_IntroPure&quot;,&quot;Pulse.Syntax.Base.__proj__Mkst_term__item__term&quot;,&quot;Pulse.Typing.tm_prop&quot;,&quot;Pulse.Checker.Prover.prove_post_hint&quot;,&quot;Pulse.Syntax.Base.__proj__Mkst_term__item__range&quot;,&quot;Pulse.Checker.Base.checker_result_t&quot;,&quot;FStar.Pervasives.Native.None&quot;,&quot;Pulse.Typing.post_hint_t&quot;,&quot;Pulse.Checker.Prover.try_frame_pre&quot;,&quot;FStar.Pervasives.dtuple3&quot;,&quot;Pulse.Syntax.Base.comp_st&quot;,&quot;Pulse.Typing.st_typing&quot;,&quot;Pulse.Checker.Base.match_comp_res_with_post_hint&quot;,&quot;Pulse.Typing.wtag&quot;,&quot;FStar.Pervasives.Native.Some&quot;,&quot;Pulse.Syntax.Base.ctag&quot;,&quot;Pulse.Syntax.Base.STT_Ghost&quot;,&quot;Pulse.Syntax.Base.Tm_IntroPure&quot;,&quot;Pulse.Syntax.Base.Mkst_term'__Tm_IntroPure__payload&quot;,&quot;Pulse.Typing.comp_intro_pure&quot;,&quot;Pulse.Typing.T_IntroPure&quot;,&quot;Pulse.Typing.prop_validity&quot;,&quot;Pulse.Checker.IntroPure.check_prop_validity&quot;,&quot;Prims.dtuple2&quot;,&quot;Pulse.Checker.IntroPure.check_prop&quot;,&quot;Pulse.Syntax.Base.st_term'&quot;,&quot;Prims.eq2&quot;,&quot;Pulse.Typing.Env.push_context&quot;],&quot;string&quot;:&quot;[\n \&quot;Pulse.Typing.Env.env\&quot;,\n \&quot;Pulse.Syntax.Base.term\&quot;,\n \&quot;Pulse.Typing.tot_typing\&quot;,\n \&quot;Pulse.Syntax.Base.tm_vprop\&quot;,\n \&quot;Pulse.Typing.post_hint_opt\&quot;,\n \&quot;Pulse.Syntax.Base.ppname\&quot;,\n \&quot;Pulse.Syntax.Base.st_term\&quot;,\n \&quot;Prims.b2t\&quot;,\n \&quot;Pulse.Syntax.Base.uu___is_Tm_IntroPure\&quot;,\n \&quot;Pulse.Syntax.Base.__proj__Mkst_term__item__term\&quot;,\n \&quot;Pulse.Typing.tm_prop\&quot;,\n \&quot;Pulse.Checker.Prover.prove_post_hint\&quot;,\n \&quot;Pulse.Syntax.Base.__proj__Mkst_term__item__range\&quot;,\n \&quot;Pulse.Checker.Base.checker_result_t\&quot;,\n \&quot;FStar.Pervasives.Native.None\&quot;,\n \&quot;Pulse.Typing.post_hint_t\&quot;,\n \&quot;Pulse.Checker.Prover.try_frame_pre\&quot;,\n \&quot;FStar.Pervasives.dtuple3\&quot;,\n \&quot;Pulse.Syntax.Base.comp_st\&quot;,\n \&quot;Pulse.Typing.st_typing\&quot;,\n \&quot;Pulse.Checker.Base.match_comp_res_with_post_hint\&quot;,\n \&quot;Pulse.Typing.wtag\&quot;,\n \&quot;FStar.Pervasives.Native.Some\&quot;,\n \&quot;Pulse.Syntax.Base.ctag\&quot;,\n \&quot;Pulse.Syntax.Base.STT_Ghost\&quot;,\n \&quot;Pulse.Syntax.Base.Tm_IntroPure\&quot;,\n \&quot;Pulse.Syntax.Base.Mkst_term'__Tm_IntroPure__payload\&quot;,\n \&quot;Pulse.Typing.comp_intro_pure\&quot;,\n \&quot;Pulse.Typing.T_IntroPure\&quot;,\n \&quot;Pulse.Typing.prop_validity\&quot;,\n \&quot;Pulse.Checker.IntroPure.check_prop_validity\&quot;,\n \&quot;Prims.dtuple2\&quot;,\n \&quot;Pulse.Checker.IntroPure.check_prop\&quot;,\n \&quot;Pulse.Syntax.Base.st_term'\&quot;,\n \&quot;Prims.eq2\&quot;,\n \&quot;Pulse.Typing.Env.push_context\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Pulse.Checker.IntroPure\n\nopen Pulse.Syntax\nopen Pulse.Typing\nopen Pulse.Checker.Base\nopen Pulse.Checker.Prover\n\nmodule T = FStar.Tactics.V2\nmodule P = Pulse.Syntax.Printer\n\nlet check_prop (g:env) (p:term) \n : T.Tac (p:term &amp; tot_typing g p tm_prop) =\n \n let p0 = p in\n let (| p, p_typing |) = Pulse.Checker.Pure.check_vprop g (tm_pure p) in\n match p.t with\n | Tm_Pure pp ->\n let prop_typing = Pulse.Typing.Metatheory.pure_typing_inversion #_ #pp p_typing in\n (| pp, prop_typing |)\n | _ ->\n fail g None\n (Printf.sprintf \&quot;Impossible: check_intro_pure: checking a pure vprop %s returned a non-pure vprop %s,\\\n please file a bug-report\&quot;\n (P.term_to_string (tm_pure p0))\n (P.term_to_string p))\n\nlet check_prop_validity (g:env) (p:term) (typing:tot_typing g p tm_prop): T.Tac (prop_validity g p) =\n Pulse.Checker.Pure.check_prop_validity g p typing\n\nlet check\n (g:env)\n (pre:term)\n (pre_typing:tot_typing g pre tm_vprop)\n (post_hint:post_hint_opt g)\n (res_ppname:ppname)\n (t:st_term { Tm_IntroPure? t.term })&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Pulse.Checker.IntroPure.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 2,\n \&quot;initial_ifuel\&quot;: 1,\n \&quot;max_fuel\&quot;: 8,\n \&quot;max_ifuel\&quot;: 2,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: false,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: true,\n \&quot;z3cliopt\&quot;: [],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 5,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val check\n (g:env)\n (pre:term)\n (pre_typing:tot_typing g pre tm_vprop)\n (post_hint:post_hint_opt g)\n (res_ppname:ppname)\n (t:st_term { Tm_IntroPure? t.term })\n : T.Tac (checker_result_t g pre post_hint)&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Pulse.Checker.IntroPure.check&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;lib/steel/pulse/Pulse.Checker.IntroPure.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;7fbb54e94dd4f48ff7cb867d3bae6889a635541e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/FStarLang/steel.git\&quot;,\n \&quot;project_name\&quot;: \&quot;steel\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;\n g: Pulse.Typing.Env.env ->\n pre: Pulse.Syntax.Base.term ->\n pre_typing: Pulse.Typing.tot_typing g pre Pulse.Syntax.Base.tm_vprop ->\n post_hint: Pulse.Typing.post_hint_opt g ->\n res_ppname: Pulse.Syntax.Base.ppname ->\n t: Pulse.Syntax.Base.st_term{Tm_IntroPure? (Mkst_term?.term t)}\n -> FStar.Tactics.Effect.Tac (Pulse.Checker.Base.checker_result_t g pre post_hint)&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 125,\n \&quot;end_line\&quot;: 46,\n \&quot;start_col\&quot;: 46,\n \&quot;start_line\&quot;: 38\n}&quot;}}},{&quot;rowIdx&quot;:6,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;FStar.Tactics.Effect.Tac&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val check_prop (g: env) (p: term) : T.Tac (p: term &amp; tot_typing g p tm_prop)&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;Pulse.Syntax.Printer&quot;,&quot;short_module&quot;:&quot;P&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Tactics.V2&quot;,&quot;short_module&quot;:&quot;T&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Checker.Prover&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Checker.Base&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Typing&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Syntax&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Tactics.V2&quot;,&quot;short_module&quot;:&quot;T&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Checker.Base&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Typing&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Syntax&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Checker&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Checker&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;Pulse.Syntax.Printer\&quot;,\n \&quot;short_module\&quot;: \&quot;P\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Tactics.V2\&quot;,\n \&quot;short_module\&quot;: \&quot;T\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Checker.Prover\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Checker.Base\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Typing\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Syntax\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Tactics.V2\&quot;,\n \&quot;short_module\&quot;: \&quot;T\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Checker.Base\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Typing\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Syntax\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Checker\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Checker\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let check_prop (g:env) (p:term) \n : T.Tac (p:term &amp; tot_typing g p tm_prop) =\n \n let p0 = p in\n let (| p, p_typing |) = Pulse.Checker.Pure.check_vprop g (tm_pure p) in\n match p.t with\n | Tm_Pure pp ->\n let prop_typing = Pulse.Typing.Metatheory.pure_typing_inversion #_ #pp p_typing in\n (| pp, prop_typing |)\n | _ ->\n fail g None\n (Printf.sprintf \&quot;Impossible: check_intro_pure: checking a pure vprop %s returned a non-pure vprop %s,\\\n please file a bug-report\&quot;\n (P.term_to_string (tm_pure p0))\n (P.term_to_string p))&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val check_prop (g: env) (p: term) : T.Tac (p: term &amp; tot_typing g p tm_prop)\nlet check_prop (g: env) (p: term) : T.Tac (p: term &amp; tot_typing g p tm_prop) =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let p0 = p in\nlet (| p , p_typing |) = Pulse.Checker.Pure.check_vprop g (tm_pure p) in\nmatch p.t with\n| Tm_Pure pp ->\n let prop_typing = Pulse.Typing.Metatheory.pure_typing_inversion #_ #pp p_typing in\n (| pp, prop_typing |)\n| _ ->\n fail g\n None\n (Printf.sprintf \&quot;Impossible: check_intro_pure: checking a pure vprop %s returned a non-pure vprop %s,please file a bug-report\&quot;\n (P.term_to_string (tm_pure p0))\n (P.term_to_string p))&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Pulse.Checker.IntroPure.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Pulse.Typing.Metatheory.fsti.checked\&quot;,\n \&quot;Pulse.Typing.Env.fsti.checked\&quot;,\n \&quot;Pulse.Typing.fst.checked\&quot;,\n \&quot;Pulse.Syntax.Printer.fsti.checked\&quot;,\n \&quot;Pulse.Syntax.fst.checked\&quot;,\n \&quot;Pulse.Checker.Pure.fsti.checked\&quot;,\n \&quot;Pulse.Checker.Prover.fsti.checked\&quot;,\n \&quot;Pulse.Checker.Base.fsti.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;FStar.Tactics.V2.fst.checked\&quot;,\n \&quot;FStar.Printf.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;\n ],\n \&quot;interface_file\&quot;: true,\n \&quot;source_file\&quot;: \&quot;Pulse.Checker.IntroPure.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;Pulse.Typing.Env.env&quot;,&quot;Pulse.Syntax.Base.term&quot;,&quot;Pulse.Typing.tot_typing&quot;,&quot;Pulse.Syntax.Base.tm_vprop&quot;,&quot;Pulse.Syntax.Base.__proj__Mkterm__item__t&quot;,&quot;Prims.Mkdtuple2&quot;,&quot;Pulse.Typing.tm_prop&quot;,&quot;Pulse.Syntax.Base.tm_fstar&quot;,&quot;FStar.Reflection.Typing.tm_prop&quot;,&quot;FStar.Range.range_0&quot;,&quot;Pulse.Typing.Metatheory.Base.pure_typing_inversion&quot;,&quot;Prims.dtuple2&quot;,&quot;Pulse.Syntax.Base.term'&quot;,&quot;Pulse.Typing.Env.fail&quot;,&quot;FStar.Pervasives.Native.None&quot;,&quot;Pulse.Syntax.Base.range&quot;,&quot;Prims.string&quot;,&quot;FStar.Printf.sprintf&quot;,&quot;Pulse.Syntax.Printer.term_to_string&quot;,&quot;Pulse.Syntax.Base.tm_pure&quot;,&quot;Pulse.Checker.Pure.check_vprop&quot;],&quot;string&quot;:&quot;[\n \&quot;Pulse.Typing.Env.env\&quot;,\n \&quot;Pulse.Syntax.Base.term\&quot;,\n \&quot;Pulse.Typing.tot_typing\&quot;,\n \&quot;Pulse.Syntax.Base.tm_vprop\&quot;,\n \&quot;Pulse.Syntax.Base.__proj__Mkterm__item__t\&quot;,\n \&quot;Prims.Mkdtuple2\&quot;,\n \&quot;Pulse.Typing.tm_prop\&quot;,\n \&quot;Pulse.Syntax.Base.tm_fstar\&quot;,\n \&quot;FStar.Reflection.Typing.tm_prop\&quot;,\n \&quot;FStar.Range.range_0\&quot;,\n \&quot;Pulse.Typing.Metatheory.Base.pure_typing_inversion\&quot;,\n \&quot;Prims.dtuple2\&quot;,\n \&quot;Pulse.Syntax.Base.term'\&quot;,\n \&quot;Pulse.Typing.Env.fail\&quot;,\n \&quot;FStar.Pervasives.Native.None\&quot;,\n \&quot;Pulse.Syntax.Base.range\&quot;,\n \&quot;Prims.string\&quot;,\n \&quot;FStar.Printf.sprintf\&quot;,\n \&quot;Pulse.Syntax.Printer.term_to_string\&quot;,\n \&quot;Pulse.Syntax.Base.tm_pure\&quot;,\n \&quot;Pulse.Checker.Pure.check_vprop\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Pulse.Checker.IntroPure\n\nopen Pulse.Syntax\nopen Pulse.Typing\nopen Pulse.Checker.Base\nopen Pulse.Checker.Prover\n\nmodule T = FStar.Tactics.V2\nmodule P = Pulse.Syntax.Printer&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Pulse.Checker.IntroPure.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 2,\n \&quot;initial_ifuel\&quot;: 1,\n \&quot;max_fuel\&quot;: 8,\n \&quot;max_ifuel\&quot;: 2,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: false,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: true,\n \&quot;z3cliopt\&quot;: [],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 5,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val check_prop (g: env) (p: term) : T.Tac (p: term &amp; tot_typing g p tm_prop)&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Pulse.Checker.IntroPure.check_prop&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;lib/steel/pulse/Pulse.Checker.IntroPure.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;7fbb54e94dd4f48ff7cb867d3bae6889a635541e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/FStarLang/steel.git\&quot;,\n \&quot;project_name\&quot;: \&quot;steel\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;g: Pulse.Typing.Env.env -> p: Pulse.Syntax.Base.term\n -> FStar.Tactics.Effect.Tac\n (Prims.dtuple2 Pulse.Syntax.Base.term\n (fun p -> Pulse.Typing.tot_typing g p Pulse.Typing.tm_prop))&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 30,\n \&quot;end_line\&quot;: 25,\n \&quot;start_col\&quot;: 45,\n \&quot;start_line\&quot;: 12\n}&quot;}}},{&quot;rowIdx&quot;:7,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;FStar.Pervasives.Lemma&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val transpose_state8_lemma:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 8}\n -> st:state_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 8 * word_length a} ->\n Lemma\n (let l = lanes a m in\n let ind = 8 * j + i / word_length a in\n Seq.index (vec_v (transpose_state8 st).[ind / l]) (ind % l) ==\n Seq.index (state_spec_v st).[j] (i / word_length a))&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Hacl.Spec.SHA2.Vec&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Spec.Hash.Definitions&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.IntVector.Transpose&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.IntVector&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.Sequence&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.IntTypes&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Mul&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Hacl.Spec.SHA2&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Hacl.Spec.SHA2&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Hacl.Spec.SHA2.Vec\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Spec.Hash.Definitions\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.IntVector.Transpose\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.IntVector\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.Sequence\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.IntTypes\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Mul\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Hacl.Spec.SHA2\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Hacl.Spec.SHA2\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let transpose_state8_lemma #a #m st j i =\n let l = lanes a m in\n let ind = 8 * j + i / word_length a in\n let r0 = transpose8x8_lseq st in\n transpose8x8_lemma st&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val transpose_state8_lemma:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 8}\n -> st:state_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 8 * word_length a} ->\n Lemma\n (let l = lanes a m in\n let ind = 8 * j + i / word_length a in\n Seq.index (vec_v (transpose_state8 st).[ind / l]) (ind % l) ==\n Seq.index (state_spec_v st).[j] (i / word_length a))\nlet transpose_state8_lemma #a #m st j i =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let l = lanes a m in\nlet ind = 8 * j + i / word_length a in\nlet r0 = transpose8x8_lseq st in\ntranspose8x8_lemma st&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Hacl.Spec.SHA2.Lemmas.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Spec.Hash.Definitions.fst.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;Lib.Sequence.fsti.checked\&quot;,\n \&quot;Lib.IntVector.Transpose.fsti.checked\&quot;,\n \&quot;Lib.IntVector.fsti.checked\&quot;,\n \&quot;Lib.IntTypes.fsti.checked\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.fst.checked\&quot;,\n \&quot;FStar.Seq.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.Mul.fst.checked\&quot;\n ],\n \&quot;interface_file\&quot;: false,\n \&quot;source_file\&quot;: \&quot;Hacl.Spec.SHA2.Lemmas.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;lemma&quot;],&quot;string&quot;:&quot;[\n \&quot;lemma\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;Spec.Hash.Definitions.sha2_alg&quot;,&quot;Hacl.Spec.SHA2.Vec.m_spec&quot;,&quot;Prims.eq2&quot;,&quot;Prims.int&quot;,&quot;Hacl.Spec.SHA2.Vec.lanes&quot;,&quot;Hacl.Spec.SHA2.Vec.state_spec&quot;,&quot;Prims.nat&quot;,&quot;Prims.b2t&quot;,&quot;Prims.op_LessThan&quot;,&quot;FStar.Mul.op_Star&quot;,&quot;Spec.Hash.Definitions.word_length&quot;,&quot;Lib.IntVector.Transpose.transpose8x8_lemma&quot;,&quot;Spec.Hash.Definitions.word_t&quot;,&quot;Lib.Sequence.lseq&quot;,&quot;Lib.IntVector.vec_t&quot;,&quot;Lib.IntVector.Transpose.transpose8x8_lseq&quot;,&quot;Prims.op_Addition&quot;,&quot;Prims.op_Division&quot;,&quot;Hacl.Spec.SHA2.Vec.lanes_t&quot;,&quot;Prims.unit&quot;],&quot;string&quot;:&quot;[\n \&quot;Spec.Hash.Definitions.sha2_alg\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.m_spec\&quot;,\n \&quot;Prims.eq2\&quot;,\n \&quot;Prims.int\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.lanes\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.state_spec\&quot;,\n \&quot;Prims.nat\&quot;,\n \&quot;Prims.b2t\&quot;,\n \&quot;Prims.op_LessThan\&quot;,\n \&quot;FStar.Mul.op_Star\&quot;,\n \&quot;Spec.Hash.Definitions.word_length\&quot;,\n \&quot;Lib.IntVector.Transpose.transpose8x8_lemma\&quot;,\n \&quot;Spec.Hash.Definitions.word_t\&quot;,\n \&quot;Lib.Sequence.lseq\&quot;,\n \&quot;Lib.IntVector.vec_t\&quot;,\n \&quot;Lib.IntVector.Transpose.transpose8x8_lseq\&quot;,\n \&quot;Prims.op_Addition\&quot;,\n \&quot;Prims.op_Division\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.lanes_t\&quot;,\n \&quot;Prims.unit\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Hacl.Spec.SHA2.Lemmas\n\nopen FStar.Mul\nopen Lib.IntTypes\nopen Lib.Sequence\nopen Lib.IntVector\nopen Lib.IntVector.Transpose\n\nopen Spec.Hash.Definitions\nopen Hacl.Spec.SHA2.Vec\n\n\n#set-options \&quot;--z3rlimit 50 --fuel 0 --ifuel 1\&quot;\n\nval transpose_ws4_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 4} // lanes a m * lanes a m = 16\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n (vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])\n\nlet transpose_ws4_lemma_ij #a #m ws j i =\n let l = lanes a m in\n let i_sub = i / l in\n let j_sub = i % l in\n assert (i_sub * l + j_sub == i);\n\n let vs = sub ws (i_sub * l) l in\n eq_intro (sub (transpose_ws4 ws) (i_sub * l) l) (transpose4x4_lseq vs);\n //assert ((transpose_ws4 ws).[i] == (sub (transpose_ws4 ws) (i_sub * l) l).[j_sub]);\n //assert ((transpose_ws4 ws).[i] == (transpose4x4_lseq vs).[j_sub]);\n assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v (transpose4x4_lseq vs).[j_sub]).[j]);\n transpose4x4_lemma vs;\n assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v vs.[j]).[j_sub]);\n assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i_sub * l + j]).[j_sub])\n\n\nval transpose_ws8_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 8}\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n (vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])\n\nlet transpose_ws8_lemma_ij #a #m ws j i =\n let l = lanes a m in\n let i_sub = i / l in\n let j_sub = i % l in\n assert (i_sub * l + j_sub == i);\n\n let vs = sub ws (i_sub * l) l in\n eq_intro (sub (transpose_ws8 ws) (i_sub * l) l) (transpose8x8_lseq vs);\n assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v (transpose8x8_lseq vs).[j_sub]).[j]);\n transpose8x8_lemma vs;\n assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i_sub * lanes a m + j]).[j_sub])\n\n\nval transpose_ws_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{is_supported a m}\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n ((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v ws.[i / l * l + j]).[i % l])\n\nlet transpose_ws_lemma_ij #a #m ws j i =\n assert (((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v (transpose_ws ws).[i]).[j]);\n match lanes a m with\n | 1 -> ()\n | 4 -> transpose_ws4_lemma_ij #a #m ws j i\n | 8 -> transpose_ws8_lemma_ij #a #m ws j i\n\n\nval transpose_state4_lemma:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 4}\n -> st:state_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 8 * word_length a} ->\n Lemma\n (let l = lanes a m in\n let ind = 8 * j + i / word_length a in\n Seq.index (vec_v (transpose_state st).[ind / l]) (ind % l) ==\n Seq.index (state_spec_v st).[j] (i / word_length a))\n\nlet transpose_state4_lemma #a #m st j i =\n let r0 = transpose4x4_lseq (sub st 0 4) in\n transpose4x4_lemma (sub st 0 4);\n let r1 = transpose4x4_lseq (sub st 4 4) in\n transpose4x4_lemma (sub st 4 4)\n\n\nval transpose_state8_lemma:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 8}\n -> st:state_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 8 * word_length a} ->\n Lemma\n (let l = lanes a m in\n let ind = 8 * j + i / word_length a in\n Seq.index (vec_v (transpose_state8 st).[ind / l]) (ind % l) ==\n Seq.index (state_spec_v st).[j] (i / word_length a))&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Hacl.Spec.SHA2.Lemmas.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 0,\n \&quot;initial_ifuel\&quot;: 1,\n \&quot;max_fuel\&quot;: 0,\n \&quot;max_ifuel\&quot;: 1,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: false,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: false,\n \&quot;z3cliopt\&quot;: [],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 50,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val transpose_state8_lemma:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 8}\n -> st:state_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 8 * word_length a} ->\n Lemma\n (let l = lanes a m in\n let ind = 8 * j + i / word_length a in\n Seq.index (vec_v (transpose_state8 st).[ind / l]) (ind % l) ==\n Seq.index (state_spec_v st).[j] (i / word_length a))&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Hacl.Spec.SHA2.Lemmas.transpose_state8_lemma&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;code/sha2-mb/Hacl.Spec.SHA2.Lemmas.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;12c5e9539c7e3c366c26409d3b86493548c4483e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/hacl-star/hacl-star.git\&quot;,\n \&quot;project_name\&quot;: \&quot;hacl-star\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;\n st: Hacl.Spec.SHA2.Vec.state_spec a m ->\n j: Prims.nat{j < Hacl.Spec.SHA2.Vec.lanes a m} ->\n i: Prims.nat{i < 8 * Spec.Hash.Definitions.word_length a}\n -> FStar.Pervasives.Lemma\n (ensures\n (let l = Hacl.Spec.SHA2.Vec.lanes a m in\n let ind = 8 * j + i / Spec.Hash.Definitions.word_length a in\n FStar.Seq.Base.index (Lib.IntVector.vec_v (Hacl.Spec.SHA2.Vec.transpose_state8 st).[ ind / l\n ])\n (ind % l) ==\n FStar.Seq.Base.index (Hacl.Spec.SHA2.Vec.state_spec_v st).[ j ]\n (i / Spec.Hash.Definitions.word_length a)))&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 23,\n \&quot;end_line\&quot;: 117,\n \&quot;start_col\&quot;: 41,\n \&quot;start_line\&quot;: 113\n}&quot;}}},{&quot;rowIdx&quot;:8,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;FStar.Pervasives.Lemma&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val transpose_state_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{is_supported a m}\n -> st:state_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 8 * word_length a} ->\n Lemma\n (let l = lanes a m in\n let ind = 8 * j + i / word_length a in\n (Seq.index (vec_v (transpose_state st).[ind / l])) (ind % l) ==\n (Seq.index (state_spec_v st).[j] (i / word_length a)))&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Hacl.Spec.SHA2.Vec&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Spec.Hash.Definitions&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.IntVector.Transpose&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.IntVector&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.Sequence&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.IntTypes&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Mul&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Hacl.Spec.SHA2&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Hacl.Spec.SHA2&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Hacl.Spec.SHA2.Vec\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Spec.Hash.Definitions\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.IntVector.Transpose\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.IntVector\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.Sequence\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.IntTypes\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Mul\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Hacl.Spec.SHA2\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Hacl.Spec.SHA2\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let transpose_state_lemma_ij #a #m st j i =\n match lanes a m with\n | 1 -> ()\n | 4 -> transpose_state4_lemma #a #m st j i\n | 8 -> transpose_state8_lemma #a #m st j i&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val transpose_state_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{is_supported a m}\n -> st:state_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 8 * word_length a} ->\n Lemma\n (let l = lanes a m in\n let ind = 8 * j + i / word_length a in\n (Seq.index (vec_v (transpose_state st).[ind / l])) (ind % l) ==\n (Seq.index (state_spec_v st).[j] (i / word_length a)))\nlet transpose_state_lemma_ij #a #m st j i =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;match lanes a m with\n| 1 -> ()\n| 4 -> transpose_state4_lemma #a #m st j i\n| 8 -> transpose_state8_lemma #a #m st j i&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Hacl.Spec.SHA2.Lemmas.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Spec.Hash.Definitions.fst.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;Lib.Sequence.fsti.checked\&quot;,\n \&quot;Lib.IntVector.Transpose.fsti.checked\&quot;,\n \&quot;Lib.IntVector.fsti.checked\&quot;,\n \&quot;Lib.IntTypes.fsti.checked\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.fst.checked\&quot;,\n \&quot;FStar.Seq.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.Mul.fst.checked\&quot;\n ],\n \&quot;interface_file\&quot;: false,\n \&quot;source_file\&quot;: \&quot;Hacl.Spec.SHA2.Lemmas.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;lemma&quot;],&quot;string&quot;:&quot;[\n \&quot;lemma\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;Spec.Hash.Definitions.sha2_alg&quot;,&quot;Hacl.Spec.SHA2.Vec.m_spec&quot;,&quot;Hacl.Spec.SHA2.Vec.is_supported&quot;,&quot;Hacl.Spec.SHA2.Vec.state_spec&quot;,&quot;Prims.nat&quot;,&quot;Prims.b2t&quot;,&quot;Prims.op_LessThan&quot;,&quot;Hacl.Spec.SHA2.Vec.lanes&quot;,&quot;FStar.Mul.op_Star&quot;,&quot;Spec.Hash.Definitions.word_length&quot;,&quot;Hacl.Spec.SHA2.Lemmas.transpose_state4_lemma&quot;,&quot;Hacl.Spec.SHA2.Lemmas.transpose_state8_lemma&quot;,&quot;Prims.unit&quot;],&quot;string&quot;:&quot;[\n \&quot;Spec.Hash.Definitions.sha2_alg\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.m_spec\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.is_supported\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.state_spec\&quot;,\n \&quot;Prims.nat\&quot;,\n \&quot;Prims.b2t\&quot;,\n \&quot;Prims.op_LessThan\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.lanes\&quot;,\n \&quot;FStar.Mul.op_Star\&quot;,\n \&quot;Spec.Hash.Definitions.word_length\&quot;,\n \&quot;Hacl.Spec.SHA2.Lemmas.transpose_state4_lemma\&quot;,\n \&quot;Hacl.Spec.SHA2.Lemmas.transpose_state8_lemma\&quot;,\n \&quot;Prims.unit\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Hacl.Spec.SHA2.Lemmas\n\nopen FStar.Mul\nopen Lib.IntTypes\nopen Lib.Sequence\nopen Lib.IntVector\nopen Lib.IntVector.Transpose\n\nopen Spec.Hash.Definitions\nopen Hacl.Spec.SHA2.Vec\n\n\n#set-options \&quot;--z3rlimit 50 --fuel 0 --ifuel 1\&quot;\n\nval transpose_ws4_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 4} // lanes a m * lanes a m = 16\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n (vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])\n\nlet transpose_ws4_lemma_ij #a #m ws j i =\n let l = lanes a m in\n let i_sub = i / l in\n let j_sub = i % l in\n assert (i_sub * l + j_sub == i);\n\n let vs = sub ws (i_sub * l) l in\n eq_intro (sub (transpose_ws4 ws) (i_sub * l) l) (transpose4x4_lseq vs);\n //assert ((transpose_ws4 ws).[i] == (sub (transpose_ws4 ws) (i_sub * l) l).[j_sub]);\n //assert ((transpose_ws4 ws).[i] == (transpose4x4_lseq vs).[j_sub]);\n assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v (transpose4x4_lseq vs).[j_sub]).[j]);\n transpose4x4_lemma vs;\n assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v vs.[j]).[j_sub]);\n assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i_sub * l + j]).[j_sub])\n\n\nval transpose_ws8_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 8}\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n (vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])\n\nlet transpose_ws8_lemma_ij #a #m ws j i =\n let l = lanes a m in\n let i_sub = i / l in\n let j_sub = i % l in\n assert (i_sub * l + j_sub == i);\n\n let vs = sub ws (i_sub * l) l in\n eq_intro (sub (transpose_ws8 ws) (i_sub * l) l) (transpose8x8_lseq vs);\n assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v (transpose8x8_lseq vs).[j_sub]).[j]);\n transpose8x8_lemma vs;\n assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i_sub * lanes a m + j]).[j_sub])\n\n\nval transpose_ws_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{is_supported a m}\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n ((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v ws.[i / l * l + j]).[i % l])\n\nlet transpose_ws_lemma_ij #a #m ws j i =\n assert (((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v (transpose_ws ws).[i]).[j]);\n match lanes a m with\n | 1 -> ()\n | 4 -> transpose_ws4_lemma_ij #a #m ws j i\n | 8 -> transpose_ws8_lemma_ij #a #m ws j i\n\n\nval transpose_state4_lemma:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 4}\n -> st:state_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 8 * word_length a} ->\n Lemma\n (let l = lanes a m in\n let ind = 8 * j + i / word_length a in\n Seq.index (vec_v (transpose_state st).[ind / l]) (ind % l) ==\n Seq.index (state_spec_v st).[j] (i / word_length a))\n\nlet transpose_state4_lemma #a #m st j i =\n let r0 = transpose4x4_lseq (sub st 0 4) in\n transpose4x4_lemma (sub st 0 4);\n let r1 = transpose4x4_lseq (sub st 4 4) in\n transpose4x4_lemma (sub st 4 4)\n\n\nval transpose_state8_lemma:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 8}\n -> st:state_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 8 * word_length a} ->\n Lemma\n (let l = lanes a m in\n let ind = 8 * j + i / word_length a in\n Seq.index (vec_v (transpose_state8 st).[ind / l]) (ind % l) ==\n Seq.index (state_spec_v st).[j] (i / word_length a))\n\nlet transpose_state8_lemma #a #m st j i =\n let l = lanes a m in\n let ind = 8 * j + i / word_length a in\n let r0 = transpose8x8_lseq st in\n transpose8x8_lemma st\n\n\nval transpose_state_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{is_supported a m}\n -> st:state_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 8 * word_length a} ->\n Lemma\n (let l = lanes a m in\n let ind = 8 * j + i / word_length a in\n (Seq.index (vec_v (transpose_state st).[ind / l])) (ind % l) ==\n (Seq.index (state_spec_v st).[j] (i / word_length a)))&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Hacl.Spec.SHA2.Lemmas.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 0,\n \&quot;initial_ifuel\&quot;: 1,\n \&quot;max_fuel\&quot;: 0,\n \&quot;max_ifuel\&quot;: 1,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: false,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: false,\n \&quot;z3cliopt\&quot;: [],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 50,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val transpose_state_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{is_supported a m}\n -> st:state_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 8 * word_length a} ->\n Lemma\n (let l = lanes a m in\n let ind = 8 * j + i / word_length a in\n (Seq.index (vec_v (transpose_state st).[ind / l])) (ind % l) ==\n (Seq.index (state_spec_v st).[j] (i / word_length a)))&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Hacl.Spec.SHA2.Lemmas.transpose_state_lemma_ij&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;code/sha2-mb/Hacl.Spec.SHA2.Lemmas.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;12c5e9539c7e3c366c26409d3b86493548c4483e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/hacl-star/hacl-star.git\&quot;,\n \&quot;project_name\&quot;: \&quot;hacl-star\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;\n st: Hacl.Spec.SHA2.Vec.state_spec a m ->\n j: Prims.nat{j < Hacl.Spec.SHA2.Vec.lanes a m} ->\n i: Prims.nat{i < 8 * Spec.Hash.Definitions.word_length a}\n -> FStar.Pervasives.Lemma\n (ensures\n (let l = Hacl.Spec.SHA2.Vec.lanes a m in\n let ind = 8 * j + i / Spec.Hash.Definitions.word_length a in\n FStar.Seq.Base.index (Lib.IntVector.vec_v (Hacl.Spec.SHA2.Vec.transpose_state st).[ ind / l\n ])\n (ind % l) ==\n FStar.Seq.Base.index (Hacl.Spec.SHA2.Vec.state_spec_v st).[ j ]\n (i / Spec.Hash.Definitions.word_length a)))&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 44,\n \&quot;end_line\&quot;: 136,\n \&quot;start_col\&quot;: 2,\n \&quot;start_line\&quot;: 133\n}&quot;}}},{&quot;rowIdx&quot;:9,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;FStar.Pervasives.Lemma&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val transpose_ws4_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 4} // lanes a m * lanes a m = 16\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n (vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Hacl.Spec.SHA2.Vec&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Spec.Hash.Definitions&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.IntVector.Transpose&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.IntVector&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.Sequence&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.IntTypes&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Mul&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Hacl.Spec.SHA2&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Hacl.Spec.SHA2&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Hacl.Spec.SHA2.Vec\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Spec.Hash.Definitions\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.IntVector.Transpose\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.IntVector\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.Sequence\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.IntTypes\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Mul\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Hacl.Spec.SHA2\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Hacl.Spec.SHA2\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let transpose_ws4_lemma_ij #a #m ws j i =\n let l = lanes a m in\n let i_sub = i / l in\n let j_sub = i % l in\n assert (i_sub * l + j_sub == i);\n\n let vs = sub ws (i_sub * l) l in\n eq_intro (sub (transpose_ws4 ws) (i_sub * l) l) (transpose4x4_lseq vs);\n //assert ((transpose_ws4 ws).[i] == (sub (transpose_ws4 ws) (i_sub * l) l).[j_sub]);\n //assert ((transpose_ws4 ws).[i] == (transpose4x4_lseq vs).[j_sub]);\n assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v (transpose4x4_lseq vs).[j_sub]).[j]);\n transpose4x4_lemma vs;\n assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v vs.[j]).[j_sub]);\n assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i_sub * l + j]).[j_sub])&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val transpose_ws4_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 4} // lanes a m * lanes a m = 16\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n (vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])\nlet transpose_ws4_lemma_ij #a #m ws j i =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let l = lanes a m in\nlet i_sub = i / l in\nlet j_sub = i % l in\nassert (i_sub * l + j_sub == i);\nlet vs = sub ws (i_sub * l) l in\neq_intro (sub (transpose_ws4 ws) (i_sub * l) l) (transpose4x4_lseq vs);\nassert ((vec_v (transpose_ws4 ws).[ i ]).[ j ] == (vec_v (transpose4x4_lseq vs).[ j_sub ]).[ j ]);\ntranspose4x4_lemma vs;\nassert ((vec_v (transpose_ws4 ws).[ i ]).[ j ] == (vec_v vs.[ j ]).[ j_sub ]);\nassert ((vec_v (transpose_ws4 ws).[ i ]).[ j ] == (vec_v ws.[ i_sub * l + j ]).[ j_sub ])&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Hacl.Spec.SHA2.Lemmas.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Spec.Hash.Definitions.fst.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;Lib.Sequence.fsti.checked\&quot;,\n \&quot;Lib.IntVector.Transpose.fsti.checked\&quot;,\n \&quot;Lib.IntVector.fsti.checked\&quot;,\n \&quot;Lib.IntTypes.fsti.checked\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.fst.checked\&quot;,\n \&quot;FStar.Seq.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.Mul.fst.checked\&quot;\n ],\n \&quot;interface_file\&quot;: false,\n \&quot;source_file\&quot;: \&quot;Hacl.Spec.SHA2.Lemmas.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;lemma&quot;],&quot;string&quot;:&quot;[\n \&quot;lemma\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;Spec.Hash.Definitions.sha2_alg&quot;,&quot;Hacl.Spec.SHA2.Vec.m_spec&quot;,&quot;Prims.eq2&quot;,&quot;Prims.int&quot;,&quot;Hacl.Spec.SHA2.Vec.lanes&quot;,&quot;Hacl.Spec.SHA2.Vec.ws_spec&quot;,&quot;Prims.nat&quot;,&quot;Prims.b2t&quot;,&quot;Prims.op_LessThan&quot;,&quot;Prims._assert&quot;,&quot;Lib.IntTypes.uint_t&quot;,&quot;Spec.Hash.Definitions.word_t&quot;,&quot;Lib.IntTypes.SEC&quot;,&quot;Prims.l_or&quot;,&quot;FStar.Seq.Base.index&quot;,&quot;Lib.Sequence.to_seq&quot;,&quot;Lib.IntVector.vec_v&quot;,&quot;Lib.Sequence.op_String_Access&quot;,&quot;Hacl.Spec.SHA2.Vec.element_t&quot;,&quot;Prims.op_Addition&quot;,&quot;FStar.Mul.op_Star&quot;,&quot;Hacl.Spec.SHA2.Vec.transpose_ws4&quot;,&quot;Prims.unit&quot;,&quot;Lib.IntVector.Transpose.transpose4x4_lemma&quot;,&quot;Lib.IntVector.vec_t&quot;,&quot;Lib.IntVector.Transpose.transpose4x4_lseq&quot;,&quot;Lib.Sequence.eq_intro&quot;,&quot;Lib.Sequence.sub&quot;,&quot;Lib.Sequence.lseq&quot;,&quot;Prims.l_and&quot;,&quot;FStar.Seq.Base.seq&quot;,&quot;FStar.Seq.Base.slice&quot;,&quot;Prims.op_Multiply&quot;,&quot;Prims.l_Forall&quot;,&quot;Lib.Sequence.index&quot;,&quot;Prims.op_Modulus&quot;,&quot;Prims.op_Division&quot;,&quot;Hacl.Spec.SHA2.Vec.lanes_t&quot;],&quot;string&quot;:&quot;[\n \&quot;Spec.Hash.Definitions.sha2_alg\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.m_spec\&quot;,\n \&quot;Prims.eq2\&quot;,\n \&quot;Prims.int\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.lanes\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.ws_spec\&quot;,\n \&quot;Prims.nat\&quot;,\n \&quot;Prims.b2t\&quot;,\n \&quot;Prims.op_LessThan\&quot;,\n \&quot;Prims._assert\&quot;,\n \&quot;Lib.IntTypes.uint_t\&quot;,\n \&quot;Spec.Hash.Definitions.word_t\&quot;,\n \&quot;Lib.IntTypes.SEC\&quot;,\n \&quot;Prims.l_or\&quot;,\n \&quot;FStar.Seq.Base.index\&quot;,\n \&quot;Lib.Sequence.to_seq\&quot;,\n \&quot;Lib.IntVector.vec_v\&quot;,\n \&quot;Lib.Sequence.op_String_Access\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.element_t\&quot;,\n \&quot;Prims.op_Addition\&quot;,\n \&quot;FStar.Mul.op_Star\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.transpose_ws4\&quot;,\n \&quot;Prims.unit\&quot;,\n \&quot;Lib.IntVector.Transpose.transpose4x4_lemma\&quot;,\n \&quot;Lib.IntVector.vec_t\&quot;,\n \&quot;Lib.IntVector.Transpose.transpose4x4_lseq\&quot;,\n \&quot;Lib.Sequence.eq_intro\&quot;,\n \&quot;Lib.Sequence.sub\&quot;,\n \&quot;Lib.Sequence.lseq\&quot;,\n \&quot;Prims.l_and\&quot;,\n \&quot;FStar.Seq.Base.seq\&quot;,\n \&quot;FStar.Seq.Base.slice\&quot;,\n \&quot;Prims.op_Multiply\&quot;,\n \&quot;Prims.l_Forall\&quot;,\n \&quot;Lib.Sequence.index\&quot;,\n \&quot;Prims.op_Modulus\&quot;,\n \&quot;Prims.op_Division\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.lanes_t\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Hacl.Spec.SHA2.Lemmas\n\nopen FStar.Mul\nopen Lib.IntTypes\nopen Lib.Sequence\nopen Lib.IntVector\nopen Lib.IntVector.Transpose\n\nopen Spec.Hash.Definitions\nopen Hacl.Spec.SHA2.Vec\n\n\n#set-options \&quot;--z3rlimit 50 --fuel 0 --ifuel 1\&quot;\n\nval transpose_ws4_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 4} // lanes a m * lanes a m = 16\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n (vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Hacl.Spec.SHA2.Lemmas.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 0,\n \&quot;initial_ifuel\&quot;: 1,\n \&quot;max_fuel\&quot;: 0,\n \&quot;max_ifuel\&quot;: 1,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: false,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: false,\n \&quot;z3cliopt\&quot;: [],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 50,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val transpose_ws4_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 4} // lanes a m * lanes a m = 16\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n (vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Hacl.Spec.SHA2.Lemmas.transpose_ws4_lemma_ij&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;code/sha2-mb/Hacl.Spec.SHA2.Lemmas.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;12c5e9539c7e3c366c26409d3b86493548c4483e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/hacl-star/hacl-star.git\&quot;,\n \&quot;project_name\&quot;: \&quot;hacl-star\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;\n ws: Hacl.Spec.SHA2.Vec.ws_spec a m ->\n j: Prims.nat{j < Hacl.Spec.SHA2.Vec.lanes a m} ->\n i: Prims.nat{i < 16}\n -> FStar.Pervasives.Lemma\n (ensures\n (let l = Hacl.Spec.SHA2.Vec.lanes a m in\n (Lib.IntVector.vec_v (Hacl.Spec.SHA2.Vec.transpose_ws4 ws).[ i ]).[ j ] ==\n (Lib.IntVector.vec_v ws.[ (i / l) * l + j ]).[ i % l ]))&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 83,\n \&quot;end_line\&quot;: 38,\n \&quot;start_col\&quot;: 41,\n \&quot;start_line\&quot;: 25\n}&quot;}}},{&quot;rowIdx&quot;:10,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;FStar.Pervasives.Lemma&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val transpose_ws_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{is_supported a m}\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n ((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v ws.[i / l * l + j]).[i % l])&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Hacl.Spec.SHA2.Vec&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Spec.Hash.Definitions&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.IntVector.Transpose&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.IntVector&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.Sequence&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.IntTypes&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Mul&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Hacl.Spec.SHA2&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Hacl.Spec.SHA2&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Hacl.Spec.SHA2.Vec\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Spec.Hash.Definitions\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.IntVector.Transpose\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.IntVector\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.Sequence\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.IntTypes\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Mul\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Hacl.Spec.SHA2\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Hacl.Spec.SHA2\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let transpose_ws_lemma_ij #a #m ws j i =\n assert (((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v (transpose_ws ws).[i]).[j]);\n match lanes a m with\n | 1 -> ()\n | 4 -> transpose_ws4_lemma_ij #a #m ws j i\n | 8 -> transpose_ws8_lemma_ij #a #m ws j i&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val transpose_ws_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{is_supported a m}\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n ((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v ws.[i / l * l + j]).[i % l])\nlet transpose_ws_lemma_ij #a #m ws j i =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;assert (((ws_spec_v (transpose_ws ws)).[ j ]).[ i ] == (vec_v (transpose_ws ws).[ i ]).[ j ]);\nmatch lanes a m with\n| 1 -> ()\n| 4 -> transpose_ws4_lemma_ij #a #m ws j i\n| 8 -> transpose_ws8_lemma_ij #a #m ws j i&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Hacl.Spec.SHA2.Lemmas.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Spec.Hash.Definitions.fst.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;Lib.Sequence.fsti.checked\&quot;,\n \&quot;Lib.IntVector.Transpose.fsti.checked\&quot;,\n \&quot;Lib.IntVector.fsti.checked\&quot;,\n \&quot;Lib.IntTypes.fsti.checked\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.fst.checked\&quot;,\n \&quot;FStar.Seq.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.Mul.fst.checked\&quot;\n ],\n \&quot;interface_file\&quot;: false,\n \&quot;source_file\&quot;: \&quot;Hacl.Spec.SHA2.Lemmas.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;lemma&quot;],&quot;string&quot;:&quot;[\n \&quot;lemma\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;Spec.Hash.Definitions.sha2_alg&quot;,&quot;Hacl.Spec.SHA2.Vec.m_spec&quot;,&quot;Hacl.Spec.SHA2.Vec.is_supported&quot;,&quot;Hacl.Spec.SHA2.Vec.ws_spec&quot;,&quot;Prims.nat&quot;,&quot;Prims.b2t&quot;,&quot;Prims.op_LessThan&quot;,&quot;Hacl.Spec.SHA2.Vec.lanes&quot;,&quot;Hacl.Spec.SHA2.Lemmas.transpose_ws4_lemma_ij&quot;,&quot;Hacl.Spec.SHA2.Lemmas.transpose_ws8_lemma_ij&quot;,&quot;Prims.unit&quot;,&quot;Prims._assert&quot;,&quot;Prims.eq2&quot;,&quot;Lib.IntTypes.uint_t&quot;,&quot;Spec.Hash.Definitions.word_t&quot;,&quot;Lib.IntTypes.SEC&quot;,&quot;Prims.l_or&quot;,&quot;Hacl.Spec.SHA2.Vec.word&quot;,&quot;FStar.Seq.Base.index&quot;,&quot;Lib.Sequence.to_seq&quot;,&quot;Lib.Sequence.op_String_Access&quot;,&quot;Lib.Sequence.lseq&quot;,&quot;Hacl.Spec.SHA2.Vec.ws_spec_v&quot;,&quot;Hacl.Spec.SHA2.Vec.transpose_ws&quot;,&quot;Lib.IntVector.vec_v&quot;,&quot;Hacl.Spec.SHA2.Vec.element_t&quot;],&quot;string&quot;:&quot;[\n \&quot;Spec.Hash.Definitions.sha2_alg\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.m_spec\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.is_supported\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.ws_spec\&quot;,\n \&quot;Prims.nat\&quot;,\n \&quot;Prims.b2t\&quot;,\n \&quot;Prims.op_LessThan\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.lanes\&quot;,\n \&quot;Hacl.Spec.SHA2.Lemmas.transpose_ws4_lemma_ij\&quot;,\n \&quot;Hacl.Spec.SHA2.Lemmas.transpose_ws8_lemma_ij\&quot;,\n \&quot;Prims.unit\&quot;,\n \&quot;Prims._assert\&quot;,\n \&quot;Prims.eq2\&quot;,\n \&quot;Lib.IntTypes.uint_t\&quot;,\n \&quot;Spec.Hash.Definitions.word_t\&quot;,\n \&quot;Lib.IntTypes.SEC\&quot;,\n \&quot;Prims.l_or\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.word\&quot;,\n \&quot;FStar.Seq.Base.index\&quot;,\n \&quot;Lib.Sequence.to_seq\&quot;,\n \&quot;Lib.Sequence.op_String_Access\&quot;,\n \&quot;Lib.Sequence.lseq\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.ws_spec_v\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.transpose_ws\&quot;,\n \&quot;Lib.IntVector.vec_v\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.element_t\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Hacl.Spec.SHA2.Lemmas\n\nopen FStar.Mul\nopen Lib.IntTypes\nopen Lib.Sequence\nopen Lib.IntVector\nopen Lib.IntVector.Transpose\n\nopen Spec.Hash.Definitions\nopen Hacl.Spec.SHA2.Vec\n\n\n#set-options \&quot;--z3rlimit 50 --fuel 0 --ifuel 1\&quot;\n\nval transpose_ws4_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 4} // lanes a m * lanes a m = 16\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n (vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])\n\nlet transpose_ws4_lemma_ij #a #m ws j i =\n let l = lanes a m in\n let i_sub = i / l in\n let j_sub = i % l in\n assert (i_sub * l + j_sub == i);\n\n let vs = sub ws (i_sub * l) l in\n eq_intro (sub (transpose_ws4 ws) (i_sub * l) l) (transpose4x4_lseq vs);\n //assert ((transpose_ws4 ws).[i] == (sub (transpose_ws4 ws) (i_sub * l) l).[j_sub]);\n //assert ((transpose_ws4 ws).[i] == (transpose4x4_lseq vs).[j_sub]);\n assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v (transpose4x4_lseq vs).[j_sub]).[j]);\n transpose4x4_lemma vs;\n assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v vs.[j]).[j_sub]);\n assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i_sub * l + j]).[j_sub])\n\n\nval transpose_ws8_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 8}\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n (vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])\n\nlet transpose_ws8_lemma_ij #a #m ws j i =\n let l = lanes a m in\n let i_sub = i / l in\n let j_sub = i % l in\n assert (i_sub * l + j_sub == i);\n\n let vs = sub ws (i_sub * l) l in\n eq_intro (sub (transpose_ws8 ws) (i_sub * l) l) (transpose8x8_lseq vs);\n assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v (transpose8x8_lseq vs).[j_sub]).[j]);\n transpose8x8_lemma vs;\n assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i_sub * lanes a m + j]).[j_sub])\n\n\nval transpose_ws_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{is_supported a m}\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n ((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v ws.[i / l * l + j]).[i % l])&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Hacl.Spec.SHA2.Lemmas.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 0,\n \&quot;initial_ifuel\&quot;: 1,\n \&quot;max_fuel\&quot;: 0,\n \&quot;max_ifuel\&quot;: 1,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: false,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: false,\n \&quot;z3cliopt\&quot;: [],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 50,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val transpose_ws_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{is_supported a m}\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n ((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v ws.[i / l * l + j]).[i % l])&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Hacl.Spec.SHA2.Lemmas.transpose_ws_lemma_ij&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;code/sha2-mb/Hacl.Spec.SHA2.Lemmas.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;12c5e9539c7e3c366c26409d3b86493548c4483e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/hacl-star/hacl-star.git\&quot;,\n \&quot;project_name\&quot;: \&quot;hacl-star\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;\n ws: Hacl.Spec.SHA2.Vec.ws_spec a m ->\n j: Prims.nat{j < Hacl.Spec.SHA2.Vec.lanes a m} ->\n i: Prims.nat{i < 16}\n -> FStar.Pervasives.Lemma\n (ensures\n (let l = Hacl.Spec.SHA2.Vec.lanes a m in\n (Hacl.Spec.SHA2.Vec.ws_spec_v (Hacl.Spec.SHA2.Vec.transpose_ws ws)).[ j ].[ i ] ==\n (Lib.IntVector.vec_v ws.[ (i / l) * l + j ]).[ i % l ]))&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 44,\n \&quot;end_line\&quot;: 79,\n \&quot;start_col\&quot;: 2,\n \&quot;start_line\&quot;: 75\n}&quot;}}},{&quot;rowIdx&quot;:11,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;FStar.Pervasives.Lemma&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val transpose_ws8_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 8}\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n (vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Hacl.Spec.SHA2.Vec&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Spec.Hash.Definitions&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.IntVector.Transpose&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.IntVector&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.Sequence&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.IntTypes&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Mul&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Hacl.Spec.SHA2&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Hacl.Spec.SHA2&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Hacl.Spec.SHA2.Vec\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Spec.Hash.Definitions\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.IntVector.Transpose\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.IntVector\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.Sequence\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.IntTypes\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Mul\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Hacl.Spec.SHA2\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Hacl.Spec.SHA2\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let transpose_ws8_lemma_ij #a #m ws j i =\n let l = lanes a m in\n let i_sub = i / l in\n let j_sub = i % l in\n assert (i_sub * l + j_sub == i);\n\n let vs = sub ws (i_sub * l) l in\n eq_intro (sub (transpose_ws8 ws) (i_sub * l) l) (transpose8x8_lseq vs);\n assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v (transpose8x8_lseq vs).[j_sub]).[j]);\n transpose8x8_lemma vs;\n assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i_sub * lanes a m + j]).[j_sub])&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val transpose_ws8_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 8}\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n (vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])\nlet transpose_ws8_lemma_ij #a #m ws j i =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let l = lanes a m in\nlet i_sub = i / l in\nlet j_sub = i % l in\nassert (i_sub * l + j_sub == i);\nlet vs = sub ws (i_sub * l) l in\neq_intro (sub (transpose_ws8 ws) (i_sub * l) l) (transpose8x8_lseq vs);\nassert ((vec_v (transpose_ws8 ws).[ i ]).[ j ] == (vec_v (transpose8x8_lseq vs).[ j_sub ]).[ j ]);\ntranspose8x8_lemma vs;\nassert ((vec_v (transpose_ws8 ws).[ i ]).[ j ] == (vec_v ws.[ i_sub * lanes a m + j ]).[ j_sub ])&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Hacl.Spec.SHA2.Lemmas.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Spec.Hash.Definitions.fst.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;Lib.Sequence.fsti.checked\&quot;,\n \&quot;Lib.IntVector.Transpose.fsti.checked\&quot;,\n \&quot;Lib.IntVector.fsti.checked\&quot;,\n \&quot;Lib.IntTypes.fsti.checked\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.fst.checked\&quot;,\n \&quot;FStar.Seq.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.Mul.fst.checked\&quot;\n ],\n \&quot;interface_file\&quot;: false,\n \&quot;source_file\&quot;: \&quot;Hacl.Spec.SHA2.Lemmas.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;lemma&quot;],&quot;string&quot;:&quot;[\n \&quot;lemma\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;Spec.Hash.Definitions.sha2_alg&quot;,&quot;Hacl.Spec.SHA2.Vec.m_spec&quot;,&quot;Prims.eq2&quot;,&quot;Prims.int&quot;,&quot;Hacl.Spec.SHA2.Vec.lanes&quot;,&quot;Hacl.Spec.SHA2.Vec.ws_spec&quot;,&quot;Prims.nat&quot;,&quot;Prims.b2t&quot;,&quot;Prims.op_LessThan&quot;,&quot;Prims._assert&quot;,&quot;Lib.IntTypes.uint_t&quot;,&quot;Spec.Hash.Definitions.word_t&quot;,&quot;Lib.IntTypes.SEC&quot;,&quot;Prims.l_or&quot;,&quot;FStar.Seq.Base.index&quot;,&quot;Lib.Sequence.to_seq&quot;,&quot;Lib.IntVector.vec_v&quot;,&quot;Lib.Sequence.op_String_Access&quot;,&quot;Hacl.Spec.SHA2.Vec.element_t&quot;,&quot;Prims.op_Addition&quot;,&quot;FStar.Mul.op_Star&quot;,&quot;Hacl.Spec.SHA2.Vec.transpose_ws8&quot;,&quot;Prims.unit&quot;,&quot;Lib.IntVector.Transpose.transpose8x8_lemma&quot;,&quot;Lib.IntVector.vec_t&quot;,&quot;Lib.IntVector.Transpose.transpose8x8_lseq&quot;,&quot;Lib.Sequence.eq_intro&quot;,&quot;Lib.Sequence.sub&quot;,&quot;Lib.Sequence.lseq&quot;,&quot;Prims.l_and&quot;,&quot;FStar.Seq.Base.seq&quot;,&quot;FStar.Seq.Base.slice&quot;,&quot;Prims.op_Multiply&quot;,&quot;Prims.l_Forall&quot;,&quot;Lib.Sequence.index&quot;,&quot;Prims.op_Modulus&quot;,&quot;Prims.op_Division&quot;,&quot;Hacl.Spec.SHA2.Vec.lanes_t&quot;],&quot;string&quot;:&quot;[\n \&quot;Spec.Hash.Definitions.sha2_alg\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.m_spec\&quot;,\n \&quot;Prims.eq2\&quot;,\n \&quot;Prims.int\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.lanes\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.ws_spec\&quot;,\n \&quot;Prims.nat\&quot;,\n \&quot;Prims.b2t\&quot;,\n \&quot;Prims.op_LessThan\&quot;,\n \&quot;Prims._assert\&quot;,\n \&quot;Lib.IntTypes.uint_t\&quot;,\n \&quot;Spec.Hash.Definitions.word_t\&quot;,\n \&quot;Lib.IntTypes.SEC\&quot;,\n \&quot;Prims.l_or\&quot;,\n \&quot;FStar.Seq.Base.index\&quot;,\n \&quot;Lib.Sequence.to_seq\&quot;,\n \&quot;Lib.IntVector.vec_v\&quot;,\n \&quot;Lib.Sequence.op_String_Access\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.element_t\&quot;,\n \&quot;Prims.op_Addition\&quot;,\n \&quot;FStar.Mul.op_Star\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.transpose_ws8\&quot;,\n \&quot;Prims.unit\&quot;,\n \&quot;Lib.IntVector.Transpose.transpose8x8_lemma\&quot;,\n \&quot;Lib.IntVector.vec_t\&quot;,\n \&quot;Lib.IntVector.Transpose.transpose8x8_lseq\&quot;,\n \&quot;Lib.Sequence.eq_intro\&quot;,\n \&quot;Lib.Sequence.sub\&quot;,\n \&quot;Lib.Sequence.lseq\&quot;,\n \&quot;Prims.l_and\&quot;,\n \&quot;FStar.Seq.Base.seq\&quot;,\n \&quot;FStar.Seq.Base.slice\&quot;,\n \&quot;Prims.op_Multiply\&quot;,\n \&quot;Prims.l_Forall\&quot;,\n \&quot;Lib.Sequence.index\&quot;,\n \&quot;Prims.op_Modulus\&quot;,\n \&quot;Prims.op_Division\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.lanes_t\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Hacl.Spec.SHA2.Lemmas\n\nopen FStar.Mul\nopen Lib.IntTypes\nopen Lib.Sequence\nopen Lib.IntVector\nopen Lib.IntVector.Transpose\n\nopen Spec.Hash.Definitions\nopen Hacl.Spec.SHA2.Vec\n\n\n#set-options \&quot;--z3rlimit 50 --fuel 0 --ifuel 1\&quot;\n\nval transpose_ws4_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 4} // lanes a m * lanes a m = 16\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n (vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])\n\nlet transpose_ws4_lemma_ij #a #m ws j i =\n let l = lanes a m in\n let i_sub = i / l in\n let j_sub = i % l in\n assert (i_sub * l + j_sub == i);\n\n let vs = sub ws (i_sub * l) l in\n eq_intro (sub (transpose_ws4 ws) (i_sub * l) l) (transpose4x4_lseq vs);\n //assert ((transpose_ws4 ws).[i] == (sub (transpose_ws4 ws) (i_sub * l) l).[j_sub]);\n //assert ((transpose_ws4 ws).[i] == (transpose4x4_lseq vs).[j_sub]);\n assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v (transpose4x4_lseq vs).[j_sub]).[j]);\n transpose4x4_lemma vs;\n assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v vs.[j]).[j_sub]);\n assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i_sub * l + j]).[j_sub])\n\n\nval transpose_ws8_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 8}\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n (vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Hacl.Spec.SHA2.Lemmas.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 0,\n \&quot;initial_ifuel\&quot;: 1,\n \&quot;max_fuel\&quot;: 0,\n \&quot;max_ifuel\&quot;: 1,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: false,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: false,\n \&quot;z3cliopt\&quot;: [],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 50,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val transpose_ws8_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 8}\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n (vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Hacl.Spec.SHA2.Lemmas.transpose_ws8_lemma_ij&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;code/sha2-mb/Hacl.Spec.SHA2.Lemmas.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;12c5e9539c7e3c366c26409d3b86493548c4483e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/hacl-star/hacl-star.git\&quot;,\n \&quot;project_name\&quot;: \&quot;hacl-star\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;\n ws: Hacl.Spec.SHA2.Vec.ws_spec a m ->\n j: Prims.nat{j < Hacl.Spec.SHA2.Vec.lanes a m} ->\n i: Prims.nat{i < 16}\n -> FStar.Pervasives.Lemma\n (ensures\n (let l = Hacl.Spec.SHA2.Vec.lanes a m in\n (Lib.IntVector.vec_v (Hacl.Spec.SHA2.Vec.transpose_ws8 ws).[ i ]).[ j ] ==\n (Lib.IntVector.vec_v ws.[ (i / l) * l + j ]).[ i % l ]))&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 91,\n \&quot;end_line\&quot;: 61,\n \&quot;start_col\&quot;: 41,\n \&quot;start_line\&quot;: 51\n}&quot;}}},{&quot;rowIdx&quot;:12,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;FStar.Pervasives.Lemma&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val transpose_state4_lemma:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 4}\n -> st:state_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 8 * word_length a} ->\n Lemma\n (let l = lanes a m in\n let ind = 8 * j + i / word_length a in\n Seq.index (vec_v (transpose_state st).[ind / l]) (ind % l) ==\n Seq.index (state_spec_v st).[j] (i / word_length a))&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Hacl.Spec.SHA2.Vec&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Spec.Hash.Definitions&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.IntVector.Transpose&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.IntVector&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.Sequence&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Lib.IntTypes&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Mul&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Hacl.Spec.SHA2&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Hacl.Spec.SHA2&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Hacl.Spec.SHA2.Vec\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Spec.Hash.Definitions\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.IntVector.Transpose\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.IntVector\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.Sequence\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Lib.IntTypes\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Mul\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Hacl.Spec.SHA2\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Hacl.Spec.SHA2\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let transpose_state4_lemma #a #m st j i =\n let r0 = transpose4x4_lseq (sub st 0 4) in\n transpose4x4_lemma (sub st 0 4);\n let r1 = transpose4x4_lseq (sub st 4 4) in\n transpose4x4_lemma (sub st 4 4)&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val transpose_state4_lemma:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 4}\n -> st:state_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 8 * word_length a} ->\n Lemma\n (let l = lanes a m in\n let ind = 8 * j + i / word_length a in\n Seq.index (vec_v (transpose_state st).[ind / l]) (ind % l) ==\n Seq.index (state_spec_v st).[j] (i / word_length a))\nlet transpose_state4_lemma #a #m st j i =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let r0 = transpose4x4_lseq (sub st 0 4) in\ntranspose4x4_lemma (sub st 0 4);\nlet r1 = transpose4x4_lseq (sub st 4 4) in\ntranspose4x4_lemma (sub st 4 4)&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Hacl.Spec.SHA2.Lemmas.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Spec.Hash.Definitions.fst.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;Lib.Sequence.fsti.checked\&quot;,\n \&quot;Lib.IntVector.Transpose.fsti.checked\&quot;,\n \&quot;Lib.IntVector.fsti.checked\&quot;,\n \&quot;Lib.IntTypes.fsti.checked\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.fst.checked\&quot;,\n \&quot;FStar.Seq.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.Mul.fst.checked\&quot;\n ],\n \&quot;interface_file\&quot;: false,\n \&quot;source_file\&quot;: \&quot;Hacl.Spec.SHA2.Lemmas.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;lemma&quot;],&quot;string&quot;:&quot;[\n \&quot;lemma\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;Spec.Hash.Definitions.sha2_alg&quot;,&quot;Hacl.Spec.SHA2.Vec.m_spec&quot;,&quot;Prims.eq2&quot;,&quot;Prims.int&quot;,&quot;Hacl.Spec.SHA2.Vec.lanes&quot;,&quot;Hacl.Spec.SHA2.Vec.state_spec&quot;,&quot;Prims.nat&quot;,&quot;Prims.b2t&quot;,&quot;Prims.op_LessThan&quot;,&quot;FStar.Mul.op_Star&quot;,&quot;Spec.Hash.Definitions.word_length&quot;,&quot;Lib.IntVector.Transpose.transpose4x4_lemma&quot;,&quot;Spec.Hash.Definitions.word_t&quot;,&quot;Lib.Sequence.sub&quot;,&quot;Hacl.Spec.SHA2.Vec.element_t&quot;,&quot;Lib.Sequence.lseq&quot;,&quot;Lib.IntVector.vec_t&quot;,&quot;Lib.IntVector.Transpose.transpose4x4_lseq&quot;,&quot;Prims.unit&quot;],&quot;string&quot;:&quot;[\n \&quot;Spec.Hash.Definitions.sha2_alg\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.m_spec\&quot;,\n \&quot;Prims.eq2\&quot;,\n \&quot;Prims.int\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.lanes\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.state_spec\&quot;,\n \&quot;Prims.nat\&quot;,\n \&quot;Prims.b2t\&quot;,\n \&quot;Prims.op_LessThan\&quot;,\n \&quot;FStar.Mul.op_Star\&quot;,\n \&quot;Spec.Hash.Definitions.word_length\&quot;,\n \&quot;Lib.IntVector.Transpose.transpose4x4_lemma\&quot;,\n \&quot;Spec.Hash.Definitions.word_t\&quot;,\n \&quot;Lib.Sequence.sub\&quot;,\n \&quot;Hacl.Spec.SHA2.Vec.element_t\&quot;,\n \&quot;Lib.Sequence.lseq\&quot;,\n \&quot;Lib.IntVector.vec_t\&quot;,\n \&quot;Lib.IntVector.Transpose.transpose4x4_lseq\&quot;,\n \&quot;Prims.unit\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Hacl.Spec.SHA2.Lemmas\n\nopen FStar.Mul\nopen Lib.IntTypes\nopen Lib.Sequence\nopen Lib.IntVector\nopen Lib.IntVector.Transpose\n\nopen Spec.Hash.Definitions\nopen Hacl.Spec.SHA2.Vec\n\n\n#set-options \&quot;--z3rlimit 50 --fuel 0 --ifuel 1\&quot;\n\nval transpose_ws4_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 4} // lanes a m * lanes a m = 16\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n (vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])\n\nlet transpose_ws4_lemma_ij #a #m ws j i =\n let l = lanes a m in\n let i_sub = i / l in\n let j_sub = i % l in\n assert (i_sub * l + j_sub == i);\n\n let vs = sub ws (i_sub * l) l in\n eq_intro (sub (transpose_ws4 ws) (i_sub * l) l) (transpose4x4_lseq vs);\n //assert ((transpose_ws4 ws).[i] == (sub (transpose_ws4 ws) (i_sub * l) l).[j_sub]);\n //assert ((transpose_ws4 ws).[i] == (transpose4x4_lseq vs).[j_sub]);\n assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v (transpose4x4_lseq vs).[j_sub]).[j]);\n transpose4x4_lemma vs;\n assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v vs.[j]).[j_sub]);\n assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i_sub * l + j]).[j_sub])\n\n\nval transpose_ws8_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 8}\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n (vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])\n\nlet transpose_ws8_lemma_ij #a #m ws j i =\n let l = lanes a m in\n let i_sub = i / l in\n let j_sub = i % l in\n assert (i_sub * l + j_sub == i);\n\n let vs = sub ws (i_sub * l) l in\n eq_intro (sub (transpose_ws8 ws) (i_sub * l) l) (transpose8x8_lseq vs);\n assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v (transpose8x8_lseq vs).[j_sub]).[j]);\n transpose8x8_lemma vs;\n assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i_sub * lanes a m + j]).[j_sub])\n\n\nval transpose_ws_lemma_ij:\n #a:sha2_alg\n -> #m:m_spec{is_supported a m}\n -> ws:ws_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 16} ->\n Lemma\n (let l = lanes a m in\n ((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v ws.[i / l * l + j]).[i % l])\n\nlet transpose_ws_lemma_ij #a #m ws j i =\n assert (((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v (transpose_ws ws).[i]).[j]);\n match lanes a m with\n | 1 -> ()\n | 4 -> transpose_ws4_lemma_ij #a #m ws j i\n | 8 -> transpose_ws8_lemma_ij #a #m ws j i\n\n\nval transpose_state4_lemma:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 4}\n -> st:state_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 8 * word_length a} ->\n Lemma\n (let l = lanes a m in\n let ind = 8 * j + i / word_length a in\n Seq.index (vec_v (transpose_state st).[ind / l]) (ind % l) ==\n Seq.index (state_spec_v st).[j] (i / word_length a))&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Hacl.Spec.SHA2.Lemmas.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 0,\n \&quot;initial_ifuel\&quot;: 1,\n \&quot;max_fuel\&quot;: 0,\n \&quot;max_ifuel\&quot;: 1,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: false,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: false,\n \&quot;z3cliopt\&quot;: [],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 50,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val transpose_state4_lemma:\n #a:sha2_alg\n -> #m:m_spec{lanes a m == 4}\n -> st:state_spec a m\n -> j:nat{j < lanes a m}\n -> i:nat{i < 8 * word_length a} ->\n Lemma\n (let l = lanes a m in\n let ind = 8 * j + i / word_length a in\n Seq.index (vec_v (transpose_state st).[ind / l]) (ind % l) ==\n Seq.index (state_spec_v st).[j] (i / word_length a))&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Hacl.Spec.SHA2.Lemmas.transpose_state4_lemma&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;code/sha2-mb/Hacl.Spec.SHA2.Lemmas.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;12c5e9539c7e3c366c26409d3b86493548c4483e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/hacl-star/hacl-star.git\&quot;,\n \&quot;project_name\&quot;: \&quot;hacl-star\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;\n st: Hacl.Spec.SHA2.Vec.state_spec a m ->\n j: Prims.nat{j < Hacl.Spec.SHA2.Vec.lanes a m} ->\n i: Prims.nat{i < 8 * Spec.Hash.Definitions.word_length a}\n -> FStar.Pervasives.Lemma\n (ensures\n (let l = Hacl.Spec.SHA2.Vec.lanes a m in\n let ind = 8 * j + i / Spec.Hash.Definitions.word_length a in\n FStar.Seq.Base.index (Lib.IntVector.vec_v (Hacl.Spec.SHA2.Vec.transpose_state st).[ ind / l\n ])\n (ind % l) ==\n FStar.Seq.Base.index (Hacl.Spec.SHA2.Vec.state_spec_v st).[ j ]\n (i / Spec.Hash.Definitions.word_length a)))&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 33,\n \&quot;end_line\&quot;: 98,\n \&quot;start_col\&quot;: 41,\n \&quot;start_line\&quot;: 94\n}&quot;}}},{&quot;rowIdx&quot;:13,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Prims.Tot&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Reflection.Util&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Typing&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Elaborate.Pure&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Syntax&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.List.Tot&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Tactics.V2&quot;,&quot;short_module&quot;:&quot;T&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.List.Tot&quot;,&quot;short_module&quot;:&quot;L&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Reflection.V2&quot;,&quot;short_module&quot;:&quot;R&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Reflection.Typing&quot;,&quot;short_module&quot;:&quot;RT&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Elaborate&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Elaborate&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Reflection.Util\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Typing\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Elaborate.Pure\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Syntax\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.List.Tot\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Tactics.V2\&quot;,\n \&quot;short_module\&quot;: \&quot;T\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.List.Tot\&quot;,\n \&quot;short_module\&quot;: \&quot;L\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Reflection.V2\&quot;,\n \&quot;short_module\&quot;: \&quot;R\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Reflection.Typing\&quot;,\n \&quot;short_module\&quot;: \&quot;RT\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Elaborate\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Elaborate\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let elab_frame (c:comp_st) (frame:term) (e:R.term) =\n let u = comp_u c in\n let ty = elab_term (comp_res c) in\n let pre = elab_term (comp_pre c) in\n let post = elab_term (comp_post c) in\n if C_ST? c\n then mk_frame_stt u ty pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e\n else let opened = elab_term (comp_inames c) in \n if C_STAtomic? c\n then mk_frame_stt_atomic u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e\n else let _ = assert (C_STGhost? c) in\n mk_frame_stt_ghost u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let elab_frame (c: comp_st) (frame: term) (e: R.term) =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let u = comp_u c in\nlet ty = elab_term (comp_res c) in\nlet pre = elab_term (comp_pre c) in\nlet post = elab_term (comp_post c) in\nif C_ST? c\nthen mk_frame_stt u ty pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e\nelse\n let opened = elab_term (comp_inames c) in\n if C_STAtomic? c\n then mk_frame_stt_atomic u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e\n else\n let _ = assert (C_STGhost? c) in\n mk_frame_stt_ghost u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Pulse.Elaborate.Core.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Pulse.Typing.fst.checked\&quot;,\n \&quot;Pulse.Syntax.fst.checked\&quot;,\n \&quot;Pulse.Reflection.Util.fst.checked\&quot;,\n \&quot;Pulse.Elaborate.Pure.fst.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;FStar.Tactics.V2.fst.checked\&quot;,\n \&quot;FStar.Reflection.V2.fst.checked\&quot;,\n \&quot;FStar.Reflection.Typing.fsti.checked\&quot;,\n \&quot;FStar.Range.fsti.checked\&quot;,\n \&quot;FStar.Pervasives.Native.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.List.Tot.fst.checked\&quot;\n ],\n \&quot;interface_file\&quot;: false,\n \&quot;source_file\&quot;: \&quot;Pulse.Elaborate.Core.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;total&quot;],&quot;string&quot;:&quot;[\n \&quot;total\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;Pulse.Syntax.Base.comp_st&quot;,&quot;Pulse.Syntax.Base.term&quot;,&quot;FStar.Reflection.Types.term&quot;,&quot;Pulse.Syntax.Base.uu___is_C_ST&quot;,&quot;Pulse.Reflection.Util.mk_frame_stt&quot;,&quot;Pulse.Reflection.Util.mk_abs&quot;,&quot;FStar.Reflection.V2.Data.Q_Explicit&quot;,&quot;Pulse.Elaborate.Pure.elab_term&quot;,&quot;Prims.bool&quot;,&quot;Pulse.Syntax.Base.uu___is_C_STAtomic&quot;,&quot;Pulse.Reflection.Util.mk_frame_stt_atomic&quot;,&quot;Pulse.Reflection.Util.mk_frame_stt_ghost&quot;,&quot;Prims.unit&quot;,&quot;Prims._assert&quot;,&quot;Prims.b2t&quot;,&quot;Pulse.Syntax.Base.uu___is_C_STGhost&quot;,&quot;Pulse.Syntax.Base.comp_inames&quot;,&quot;Pulse.Syntax.Base.comp_post&quot;,&quot;Pulse.Syntax.Base.comp_pre&quot;,&quot;Pulse.Syntax.Base.comp_res&quot;,&quot;Pulse.Syntax.Base.universe&quot;,&quot;Pulse.Syntax.Base.comp_u&quot;],&quot;string&quot;:&quot;[\n \&quot;Pulse.Syntax.Base.comp_st\&quot;,\n \&quot;Pulse.Syntax.Base.term\&quot;,\n \&quot;FStar.Reflection.Types.term\&quot;,\n \&quot;Pulse.Syntax.Base.uu___is_C_ST\&quot;,\n \&quot;Pulse.Reflection.Util.mk_frame_stt\&quot;,\n \&quot;Pulse.Reflection.Util.mk_abs\&quot;,\n \&quot;FStar.Reflection.V2.Data.Q_Explicit\&quot;,\n \&quot;Pulse.Elaborate.Pure.elab_term\&quot;,\n \&quot;Prims.bool\&quot;,\n \&quot;Pulse.Syntax.Base.uu___is_C_STAtomic\&quot;,\n \&quot;Pulse.Reflection.Util.mk_frame_stt_atomic\&quot;,\n \&quot;Pulse.Reflection.Util.mk_frame_stt_ghost\&quot;,\n \&quot;Prims.unit\&quot;,\n \&quot;Prims._assert\&quot;,\n \&quot;Prims.b2t\&quot;,\n \&quot;Pulse.Syntax.Base.uu___is_C_STGhost\&quot;,\n \&quot;Pulse.Syntax.Base.comp_inames\&quot;,\n \&quot;Pulse.Syntax.Base.comp_post\&quot;,\n \&quot;Pulse.Syntax.Base.comp_pre\&quot;,\n \&quot;Pulse.Syntax.Base.comp_res\&quot;,\n \&quot;Pulse.Syntax.Base.universe\&quot;,\n \&quot;Pulse.Syntax.Base.comp_u\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Pulse.Elaborate.Core\nmodule RT = FStar.Reflection.Typing\nmodule R = FStar.Reflection.V2\nmodule L = FStar.List.Tot\nmodule T = FStar.Tactics.V2\nopen FStar.List.Tot\nopen Pulse.Syntax\nopen Pulse.Elaborate.Pure\nopen Pulse.Typing\n\nopen Pulse.Reflection.Util&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Pulse.Elaborate.Core.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 2,\n \&quot;initial_ifuel\&quot;: 1,\n \&quot;max_fuel\&quot;: 8,\n \&quot;max_ifuel\&quot;: 2,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: false,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: true,\n \&quot;z3cliopt\&quot;: [],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 5,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val elab_frame : c: Pulse.Syntax.Base.comp_st -> frame: Pulse.Syntax.Base.term -> e: FStar.Reflection.Types.term\n -> FStar.Reflection.Types.term&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Pulse.Elaborate.Core.elab_frame&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;lib/steel/pulse/Pulse.Elaborate.Core.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;7fbb54e94dd4f48ff7cb867d3bae6889a635541e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/FStarLang/steel.git\&quot;,\n \&quot;project_name\&quot;: \&quot;steel\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;c: Pulse.Syntax.Base.comp_st -> frame: Pulse.Syntax.Base.term -> e: FStar.Reflection.Types.term\n -> FStar.Reflection.Types.term&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 96,\n \&quot;end_line\&quot;: 24,\n \&quot;start_col\&quot;: 52,\n \&quot;start_line\&quot;: 13\n}&quot;}}},{&quot;rowIdx&quot;:14,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Prims.Tot&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Reflection.Util&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Typing&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Elaborate.Pure&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Syntax&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.List.Tot&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Tactics.V2&quot;,&quot;short_module&quot;:&quot;T&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.List.Tot&quot;,&quot;short_module&quot;:&quot;L&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Reflection.V2&quot;,&quot;short_module&quot;:&quot;R&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Reflection.Typing&quot;,&quot;short_module&quot;:&quot;RT&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Elaborate&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Elaborate&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Reflection.Util\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Typing\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Elaborate.Pure\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Syntax\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.List.Tot\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Tactics.V2\&quot;,\n \&quot;short_module\&quot;: \&quot;T\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.List.Tot\&quot;,\n \&quot;short_module\&quot;: \&quot;L\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Reflection.V2\&quot;,\n \&quot;short_module\&quot;: \&quot;R\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Reflection.Typing\&quot;,\n \&quot;short_module\&quot;: \&quot;RT\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Elaborate\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Elaborate\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let elab_sub (c1 c2:comp_st) (e:R.term) =\n let ty = elab_term (comp_res c1) in\n let u = comp_u c1 in\n let pre1 = elab_term (comp_pre c1) in\n let pre2 = elab_term (comp_pre c2) in\n let post1 = mk_abs ty R.Q_Explicit (elab_term (comp_post c1)) in\n let post2 = mk_abs ty R.Q_Explicit (elab_term (comp_post c2)) in\n if C_ST? c1\n then mk_sub_stt u ty pre1 pre2 post1 post2 e\n else let opened = elab_term (comp_inames c1) in\n if C_STAtomic? c1\n then mk_sub_stt_atomic u ty opened pre1 pre2 post1 post2 e\n else let _ = assert (C_STGhost? c1) in\n mk_sub_stt_ghost u ty opened pre1 pre2 post1 post2 e&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let elab_sub (c1 c2: comp_st) (e: R.term) =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let ty = elab_term (comp_res c1) in\nlet u = comp_u c1 in\nlet pre1 = elab_term (comp_pre c1) in\nlet pre2 = elab_term (comp_pre c2) in\nlet post1 = mk_abs ty R.Q_Explicit (elab_term (comp_post c1)) in\nlet post2 = mk_abs ty R.Q_Explicit (elab_term (comp_post c2)) in\nif C_ST? c1\nthen mk_sub_stt u ty pre1 pre2 post1 post2 e\nelse\n let opened = elab_term (comp_inames c1) in\n if C_STAtomic? c1\n then mk_sub_stt_atomic u ty opened pre1 pre2 post1 post2 e\n else\n let _ = assert (C_STGhost? c1) in\n mk_sub_stt_ghost u ty opened pre1 pre2 post1 post2 e&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Pulse.Elaborate.Core.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Pulse.Typing.fst.checked\&quot;,\n \&quot;Pulse.Syntax.fst.checked\&quot;,\n \&quot;Pulse.Reflection.Util.fst.checked\&quot;,\n \&quot;Pulse.Elaborate.Pure.fst.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;FStar.Tactics.V2.fst.checked\&quot;,\n \&quot;FStar.Reflection.V2.fst.checked\&quot;,\n \&quot;FStar.Reflection.Typing.fsti.checked\&quot;,\n \&quot;FStar.Range.fsti.checked\&quot;,\n \&quot;FStar.Pervasives.Native.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.List.Tot.fst.checked\&quot;\n ],\n \&quot;interface_file\&quot;: false,\n \&quot;source_file\&quot;: \&quot;Pulse.Elaborate.Core.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;total&quot;],&quot;string&quot;:&quot;[\n \&quot;total\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;Pulse.Syntax.Base.comp_st&quot;,&quot;FStar.Reflection.Types.term&quot;,&quot;Pulse.Syntax.Base.uu___is_C_ST&quot;,&quot;Pulse.Reflection.Util.mk_sub_stt&quot;,&quot;Prims.bool&quot;,&quot;Pulse.Syntax.Base.uu___is_C_STAtomic&quot;,&quot;Pulse.Reflection.Util.mk_sub_stt_atomic&quot;,&quot;Pulse.Reflection.Util.mk_sub_stt_ghost&quot;,&quot;Prims.unit&quot;,&quot;Prims._assert&quot;,&quot;Prims.b2t&quot;,&quot;Pulse.Syntax.Base.uu___is_C_STGhost&quot;,&quot;Pulse.Elaborate.Pure.elab_term&quot;,&quot;Pulse.Syntax.Base.comp_inames&quot;,&quot;Pulse.Reflection.Util.mk_abs&quot;,&quot;FStar.Reflection.V2.Data.Q_Explicit&quot;,&quot;Pulse.Syntax.Base.comp_post&quot;,&quot;Pulse.Syntax.Base.comp_pre&quot;,&quot;Pulse.Syntax.Base.universe&quot;,&quot;Pulse.Syntax.Base.comp_u&quot;,&quot;Pulse.Syntax.Base.comp_res&quot;],&quot;string&quot;:&quot;[\n \&quot;Pulse.Syntax.Base.comp_st\&quot;,\n \&quot;FStar.Reflection.Types.term\&quot;,\n \&quot;Pulse.Syntax.Base.uu___is_C_ST\&quot;,\n \&quot;Pulse.Reflection.Util.mk_sub_stt\&quot;,\n \&quot;Prims.bool\&quot;,\n \&quot;Pulse.Syntax.Base.uu___is_C_STAtomic\&quot;,\n \&quot;Pulse.Reflection.Util.mk_sub_stt_atomic\&quot;,\n \&quot;Pulse.Reflection.Util.mk_sub_stt_ghost\&quot;,\n \&quot;Prims.unit\&quot;,\n \&quot;Prims._assert\&quot;,\n \&quot;Prims.b2t\&quot;,\n \&quot;Pulse.Syntax.Base.uu___is_C_STGhost\&quot;,\n \&quot;Pulse.Elaborate.Pure.elab_term\&quot;,\n \&quot;Pulse.Syntax.Base.comp_inames\&quot;,\n \&quot;Pulse.Reflection.Util.mk_abs\&quot;,\n \&quot;FStar.Reflection.V2.Data.Q_Explicit\&quot;,\n \&quot;Pulse.Syntax.Base.comp_post\&quot;,\n \&quot;Pulse.Syntax.Base.comp_pre\&quot;,\n \&quot;Pulse.Syntax.Base.universe\&quot;,\n \&quot;Pulse.Syntax.Base.comp_u\&quot;,\n \&quot;Pulse.Syntax.Base.comp_res\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Pulse.Elaborate.Core\nmodule RT = FStar.Reflection.Typing\nmodule R = FStar.Reflection.V2\nmodule L = FStar.List.Tot\nmodule T = FStar.Tactics.V2\nopen FStar.List.Tot\nopen Pulse.Syntax\nopen Pulse.Elaborate.Pure\nopen Pulse.Typing\n\nopen Pulse.Reflection.Util\n\nlet elab_frame (c:comp_st) (frame:term) (e:R.term) =\n let u = comp_u c in\n let ty = elab_term (comp_res c) in\n let pre = elab_term (comp_pre c) in\n let post = elab_term (comp_post c) in\n if C_ST? c\n then mk_frame_stt u ty pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e\n else let opened = elab_term (comp_inames c) in \n if C_STAtomic? c\n then mk_frame_stt_atomic u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e\n else let _ = assert (C_STGhost? c) in\n mk_frame_stt_ghost u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Pulse.Elaborate.Core.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 2,\n \&quot;initial_ifuel\&quot;: 1,\n \&quot;max_fuel\&quot;: 8,\n \&quot;max_ifuel\&quot;: 2,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: false,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: true,\n \&quot;z3cliopt\&quot;: [],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 5,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val elab_sub : c1: Pulse.Syntax.Base.comp_st -> c2: Pulse.Syntax.Base.comp_st -> e: FStar.Reflection.Types.term\n -> FStar.Reflection.Types.term&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Pulse.Elaborate.Core.elab_sub&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;lib/steel/pulse/Pulse.Elaborate.Core.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;7fbb54e94dd4f48ff7cb867d3bae6889a635541e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/FStarLang/steel.git\&quot;,\n \&quot;project_name\&quot;: \&quot;steel\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;c1: Pulse.Syntax.Base.comp_st -> c2: Pulse.Syntax.Base.comp_st -> e: FStar.Reflection.Types.term\n -> FStar.Reflection.Types.term&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 64,\n \&quot;end_line\&quot;: 39,\n \&quot;start_col\&quot;: 41,\n \&quot;start_line\&quot;: 26\n}&quot;}}},{&quot;rowIdx&quot;:15,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Prims.Tot&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Reflection.Util&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Typing&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Elaborate.Pure&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Syntax&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.List.Tot&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Tactics.V2&quot;,&quot;short_module&quot;:&quot;T&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.List.Tot&quot;,&quot;short_module&quot;:&quot;L&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Reflection.V2&quot;,&quot;short_module&quot;:&quot;R&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Reflection.Typing&quot;,&quot;short_module&quot;:&quot;RT&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Elaborate&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Elaborate&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Reflection.Util\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Typing\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Elaborate.Pure\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Syntax\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.List.Tot\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Tactics.V2\&quot;,\n \&quot;short_module\&quot;: \&quot;T\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.List.Tot\&quot;,\n \&quot;short_module\&quot;: \&quot;L\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Reflection.V2\&quot;,\n \&quot;short_module\&quot;: \&quot;R\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Reflection.Typing\&quot;,\n \&quot;short_module\&quot;: \&quot;RT\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Elaborate\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Elaborate\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let intro_pure_tm (p:term) =\n let open Pulse.Reflection.Util in\n wtag (Some STT_Ghost) \n (Tm_STApp\n { head =\n tm_pureapp (tm_fvar (as_fv (mk_pulse_lib_core_lid \&quot;intro_pure\&quot;)))\n None\n p;\n arg_qual = None;\n arg = tm_fstar (`()) Range.range_0 })&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let intro_pure_tm (p: term) =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let open Pulse.Reflection.Util in\nwtag (Some STT_Ghost)\n (Tm_STApp\n ({\n head = tm_pureapp (tm_fvar (as_fv (mk_pulse_lib_core_lid \&quot;intro_pure\&quot;))) None p;\n arg_qual = None;\n arg = tm_fstar (`()) Range.range_0\n }))&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Pulse.Elaborate.Core.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Pulse.Typing.fst.checked\&quot;,\n \&quot;Pulse.Syntax.fst.checked\&quot;,\n \&quot;Pulse.Reflection.Util.fst.checked\&quot;,\n \&quot;Pulse.Elaborate.Pure.fst.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;FStar.Tactics.V2.fst.checked\&quot;,\n \&quot;FStar.Reflection.V2.fst.checked\&quot;,\n \&quot;FStar.Reflection.Typing.fsti.checked\&quot;,\n \&quot;FStar.Range.fsti.checked\&quot;,\n \&quot;FStar.Pervasives.Native.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.List.Tot.fst.checked\&quot;\n ],\n \&quot;interface_file\&quot;: false,\n \&quot;source_file\&quot;: \&quot;Pulse.Elaborate.Core.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;total&quot;],&quot;string&quot;:&quot;[\n \&quot;total\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;Pulse.Syntax.Base.term&quot;,&quot;Pulse.Typing.wtag&quot;,&quot;FStar.Pervasives.Native.Some&quot;,&quot;Pulse.Syntax.Base.ctag&quot;,&quot;Pulse.Syntax.Base.STT_Ghost&quot;,&quot;Pulse.Syntax.Base.Tm_STApp&quot;,&quot;Pulse.Syntax.Base.Mkst_term'__Tm_STApp__payload&quot;,&quot;Pulse.Syntax.Pure.tm_pureapp&quot;,&quot;Pulse.Syntax.Pure.tm_fvar&quot;,&quot;Pulse.Syntax.Base.as_fv&quot;,&quot;Pulse.Reflection.Util.mk_pulse_lib_core_lid&quot;,&quot;FStar.Pervasives.Native.None&quot;,&quot;Pulse.Syntax.Base.qualifier&quot;,&quot;Pulse.Syntax.Base.tm_fstar&quot;,&quot;FStar.Range.range_0&quot;,&quot;Pulse.Syntax.Base.st_term&quot;],&quot;string&quot;:&quot;[\n \&quot;Pulse.Syntax.Base.term\&quot;,\n \&quot;Pulse.Typing.wtag\&quot;,\n \&quot;FStar.Pervasives.Native.Some\&quot;,\n \&quot;Pulse.Syntax.Base.ctag\&quot;,\n \&quot;Pulse.Syntax.Base.STT_Ghost\&quot;,\n \&quot;Pulse.Syntax.Base.Tm_STApp\&quot;,\n \&quot;Pulse.Syntax.Base.Mkst_term'__Tm_STApp__payload\&quot;,\n \&quot;Pulse.Syntax.Pure.tm_pureapp\&quot;,\n \&quot;Pulse.Syntax.Pure.tm_fvar\&quot;,\n \&quot;Pulse.Syntax.Base.as_fv\&quot;,\n \&quot;Pulse.Reflection.Util.mk_pulse_lib_core_lid\&quot;,\n \&quot;FStar.Pervasives.Native.None\&quot;,\n \&quot;Pulse.Syntax.Base.qualifier\&quot;,\n \&quot;Pulse.Syntax.Base.tm_fstar\&quot;,\n \&quot;FStar.Range.range_0\&quot;,\n \&quot;Pulse.Syntax.Base.st_term\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Pulse.Elaborate.Core\nmodule RT = FStar.Reflection.Typing\nmodule R = FStar.Reflection.V2\nmodule L = FStar.List.Tot\nmodule T = FStar.Tactics.V2\nopen FStar.List.Tot\nopen Pulse.Syntax\nopen Pulse.Elaborate.Pure\nopen Pulse.Typing\n\nopen Pulse.Reflection.Util\n\nlet elab_frame (c:comp_st) (frame:term) (e:R.term) =\n let u = comp_u c in\n let ty = elab_term (comp_res c) in\n let pre = elab_term (comp_pre c) in\n let post = elab_term (comp_post c) in\n if C_ST? c\n then mk_frame_stt u ty pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e\n else let opened = elab_term (comp_inames c) in \n if C_STAtomic? c\n then mk_frame_stt_atomic u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e\n else let _ = assert (C_STGhost? c) in\n mk_frame_stt_ghost u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e\n\nlet elab_sub (c1 c2:comp_st) (e:R.term) =\n let ty = elab_term (comp_res c1) in\n let u = comp_u c1 in\n let pre1 = elab_term (comp_pre c1) in\n let pre2 = elab_term (comp_pre c2) in\n let post1 = mk_abs ty R.Q_Explicit (elab_term (comp_post c1)) in\n let post2 = mk_abs ty R.Q_Explicit (elab_term (comp_post c2)) in\n if C_ST? c1\n then mk_sub_stt u ty pre1 pre2 post1 post2 e\n else let opened = elab_term (comp_inames c1) in\n if C_STAtomic? c1\n then mk_sub_stt_atomic u ty opened pre1 pre2 post1 post2 e\n else let _ = assert (C_STGhost? c1) in\n mk_sub_stt_ghost u ty opened pre1 pre2 post1 post2 e\n\n\nlet elab_bind #g #x #c1 #c2 #c\n (bc:bind_comp g x c1 c2 c)\n (e1 e2:R.term)\n : R.term\n = let t1 = elab_term (comp_res c1) in\n let t2 = elab_term (comp_res c2) in\n match bc with\n | Bind_comp _ _ _ _ _ _ _ ->\n if C_ST? c1\n then\n mk_bind_stt\n (comp_u c1)\n (comp_u c2)\n t1 t2\n (elab_term (comp_pre c1))\n (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1)))\n (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2)))\n e1 e2\n else \n mk_bind_ghost\n (comp_u c1)\n (comp_u c2)\n t1 t2\n (elab_term (comp_inames c1))\n (elab_term (comp_pre c1))\n (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1)))\n (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2)))\n e1 e2\n \n | Bind_comp_ghost_l _ _ _ _ (| reveal_a, reveal_a_typing |) _ _ _ ->\n mk_bind_ghost_atomic\n (comp_u c1)\n (comp_u c2)\n t1 t2\n (elab_term (comp_inames c1))\n (elab_term (comp_pre c1))\n (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1)))\n (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2)))\n e1 e2\n (elab_term reveal_a)\n\n | Bind_comp_ghost_r _ _ _ _ (| reveal_b, reveal_b_typing |) _ _ _ ->\n mk_bind_atomic_ghost\n (comp_u c1)\n (comp_u c2)\n t1 t2\n (elab_term (comp_inames c1))\n (elab_term (comp_pre c1))\n (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1)))\n (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2)))\n e1 e2\n (elab_term reveal_b)\n\nlet elab_lift #g #c1 #c2 (d:lift_comp g c1 c2) (e:R.term)\n : Tot R.term\n = match d with\n | Lift_STAtomic_ST _ _ ->\n let t = elab_term (comp_res c1) in\n mk_lift_atomic_stt\n (comp_u c1)\n (elab_term (comp_res c1))\n t\n (mk_abs t R.Q_Explicit (elab_term (comp_post c1)))\n e\n \n | Lift_STGhost_STAtomic _ _ (| reveal_a, reveal_a_typing |) ->\n let t = elab_term (comp_res c1) in\n mk_lift_ghost_atomic\n (comp_u c1)\n t\n (elab_term (comp_inames c1))\n (elab_term (comp_pre c1))\n (mk_abs t R.Q_Explicit (elab_term (comp_post c1)))\n e\n (elab_term reveal_a)&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Pulse.Elaborate.Core.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 2,\n \&quot;initial_ifuel\&quot;: 1,\n \&quot;max_fuel\&quot;: 8,\n \&quot;max_ifuel\&quot;: 2,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: false,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: true,\n \&quot;z3cliopt\&quot;: [],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 5,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val intro_pure_tm : p: Pulse.Syntax.Base.term -> Pulse.Syntax.Base.st_term&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Pulse.Elaborate.Core.intro_pure_tm&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;lib/steel/pulse/Pulse.Elaborate.Core.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;7fbb54e94dd4f48ff7cb867d3bae6889a635541e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/FStarLang/steel.git\&quot;,\n \&quot;project_name\&quot;: \&quot;steel\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;p: Pulse.Syntax.Base.term -> Pulse.Syntax.Base.st_term&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 47,\n \&quot;end_line\&quot;: 127,\n \&quot;start_col\&quot;: 2,\n \&quot;start_line\&quot;: 119\n}&quot;}}},{&quot;rowIdx&quot;:16,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Prims.Tot&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val elab_lift (#g #c1 #c2: _) (d: lift_comp g c1 c2) (e: R.term) : Tot R.term&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Reflection.Util&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Typing&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Elaborate.Pure&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Syntax&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.List.Tot&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Tactics.V2&quot;,&quot;short_module&quot;:&quot;T&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.List.Tot&quot;,&quot;short_module&quot;:&quot;L&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Reflection.V2&quot;,&quot;short_module&quot;:&quot;R&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Reflection.Typing&quot;,&quot;short_module&quot;:&quot;RT&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Elaborate&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Elaborate&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Reflection.Util\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Typing\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Elaborate.Pure\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Syntax\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.List.Tot\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Tactics.V2\&quot;,\n \&quot;short_module\&quot;: \&quot;T\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.List.Tot\&quot;,\n \&quot;short_module\&quot;: \&quot;L\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Reflection.V2\&quot;,\n \&quot;short_module\&quot;: \&quot;R\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Reflection.Typing\&quot;,\n \&quot;short_module\&quot;: \&quot;RT\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Elaborate\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Elaborate\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let elab_lift #g #c1 #c2 (d:lift_comp g c1 c2) (e:R.term)\n : Tot R.term\n = match d with\n | Lift_STAtomic_ST _ _ ->\n let t = elab_term (comp_res c1) in\n mk_lift_atomic_stt\n (comp_u c1)\n (elab_term (comp_res c1))\n t\n (mk_abs t R.Q_Explicit (elab_term (comp_post c1)))\n e\n \n | Lift_STGhost_STAtomic _ _ (| reveal_a, reveal_a_typing |) ->\n let t = elab_term (comp_res c1) in\n mk_lift_ghost_atomic\n (comp_u c1)\n t\n (elab_term (comp_inames c1))\n (elab_term (comp_pre c1))\n (mk_abs t R.Q_Explicit (elab_term (comp_post c1)))\n e\n (elab_term reveal_a)&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val elab_lift (#g #c1 #c2: _) (d: lift_comp g c1 c2) (e: R.term) : Tot R.term\nlet elab_lift #g #c1 #c2 (d: lift_comp g c1 c2) (e: R.term) : Tot R.term =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;match d with\n| Lift_STAtomic_ST _ _ ->\n let t = elab_term (comp_res c1) in\n mk_lift_atomic_stt (comp_u c1)\n (elab_term (comp_res c1))\n t\n (mk_abs t R.Q_Explicit (elab_term (comp_post c1)))\n e\n| Lift_STGhost_STAtomic _ _ (| reveal_a , reveal_a_typing |) ->\n let t = elab_term (comp_res c1) in\n mk_lift_ghost_atomic (comp_u c1)\n t\n (elab_term (comp_inames c1))\n (elab_term (comp_pre c1))\n (mk_abs t R.Q_Explicit (elab_term (comp_post c1)))\n e\n (elab_term reveal_a)&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Pulse.Elaborate.Core.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Pulse.Typing.fst.checked\&quot;,\n \&quot;Pulse.Syntax.fst.checked\&quot;,\n \&quot;Pulse.Reflection.Util.fst.checked\&quot;,\n \&quot;Pulse.Elaborate.Pure.fst.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;FStar.Tactics.V2.fst.checked\&quot;,\n \&quot;FStar.Reflection.V2.fst.checked\&quot;,\n \&quot;FStar.Reflection.Typing.fsti.checked\&quot;,\n \&quot;FStar.Range.fsti.checked\&quot;,\n \&quot;FStar.Pervasives.Native.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.List.Tot.fst.checked\&quot;\n ],\n \&quot;interface_file\&quot;: false,\n \&quot;source_file\&quot;: \&quot;Pulse.Elaborate.Core.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;total&quot;],&quot;string&quot;:&quot;[\n \&quot;total\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;Pulse.Typing.Env.env&quot;,&quot;Pulse.Syntax.Base.comp&quot;,&quot;Pulse.Typing.lift_comp&quot;,&quot;FStar.Reflection.Types.term&quot;,&quot;Pulse.Syntax.Base.comp_st&quot;,&quot;Prims.l_and&quot;,&quot;Prims.b2t&quot;,&quot;Pulse.Syntax.Base.uu___is_C_STAtomic&quot;,&quot;Prims.eq2&quot;,&quot;Pulse.Syntax.Base.term&quot;,&quot;Pulse.Syntax.Base.comp_inames&quot;,&quot;Pulse.Syntax.Base.tm_emp_inames&quot;,&quot;Pulse.Reflection.Util.mk_lift_atomic_stt&quot;,&quot;Pulse.Syntax.Base.comp_u&quot;,&quot;Pulse.Elaborate.Pure.elab_term&quot;,&quot;Pulse.Syntax.Base.comp_res&quot;,&quot;Pulse.Reflection.Util.mk_abs&quot;,&quot;FStar.Reflection.V2.Data.Q_Explicit&quot;,&quot;Pulse.Syntax.Base.comp_post&quot;,&quot;Pulse.Syntax.Base.uu___is_C_STGhost&quot;,&quot;Pulse.Typing.tot_typing&quot;,&quot;Pulse.Typing.non_informative_witness_t&quot;,&quot;Pulse.Reflection.Util.mk_lift_ghost_atomic&quot;,&quot;Pulse.Syntax.Base.comp_pre&quot;],&quot;string&quot;:&quot;[\n \&quot;Pulse.Typing.Env.env\&quot;,\n \&quot;Pulse.Syntax.Base.comp\&quot;,\n \&quot;Pulse.Typing.lift_comp\&quot;,\n \&quot;FStar.Reflection.Types.term\&quot;,\n \&quot;Pulse.Syntax.Base.comp_st\&quot;,\n \&quot;Prims.l_and\&quot;,\n \&quot;Prims.b2t\&quot;,\n \&quot;Pulse.Syntax.Base.uu___is_C_STAtomic\&quot;,\n \&quot;Prims.eq2\&quot;,\n \&quot;Pulse.Syntax.Base.term\&quot;,\n \&quot;Pulse.Syntax.Base.comp_inames\&quot;,\n \&quot;Pulse.Syntax.Base.tm_emp_inames\&quot;,\n \&quot;Pulse.Reflection.Util.mk_lift_atomic_stt\&quot;,\n \&quot;Pulse.Syntax.Base.comp_u\&quot;,\n \&quot;Pulse.Elaborate.Pure.elab_term\&quot;,\n \&quot;Pulse.Syntax.Base.comp_res\&quot;,\n \&quot;Pulse.Reflection.Util.mk_abs\&quot;,\n \&quot;FStar.Reflection.V2.Data.Q_Explicit\&quot;,\n \&quot;Pulse.Syntax.Base.comp_post\&quot;,\n \&quot;Pulse.Syntax.Base.uu___is_C_STGhost\&quot;,\n \&quot;Pulse.Typing.tot_typing\&quot;,\n \&quot;Pulse.Typing.non_informative_witness_t\&quot;,\n \&quot;Pulse.Reflection.Util.mk_lift_ghost_atomic\&quot;,\n \&quot;Pulse.Syntax.Base.comp_pre\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Pulse.Elaborate.Core\nmodule RT = FStar.Reflection.Typing\nmodule R = FStar.Reflection.V2\nmodule L = FStar.List.Tot\nmodule T = FStar.Tactics.V2\nopen FStar.List.Tot\nopen Pulse.Syntax\nopen Pulse.Elaborate.Pure\nopen Pulse.Typing\n\nopen Pulse.Reflection.Util\n\nlet elab_frame (c:comp_st) (frame:term) (e:R.term) =\n let u = comp_u c in\n let ty = elab_term (comp_res c) in\n let pre = elab_term (comp_pre c) in\n let post = elab_term (comp_post c) in\n if C_ST? c\n then mk_frame_stt u ty pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e\n else let opened = elab_term (comp_inames c) in \n if C_STAtomic? c\n then mk_frame_stt_atomic u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e\n else let _ = assert (C_STGhost? c) in\n mk_frame_stt_ghost u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e\n\nlet elab_sub (c1 c2:comp_st) (e:R.term) =\n let ty = elab_term (comp_res c1) in\n let u = comp_u c1 in\n let pre1 = elab_term (comp_pre c1) in\n let pre2 = elab_term (comp_pre c2) in\n let post1 = mk_abs ty R.Q_Explicit (elab_term (comp_post c1)) in\n let post2 = mk_abs ty R.Q_Explicit (elab_term (comp_post c2)) in\n if C_ST? c1\n then mk_sub_stt u ty pre1 pre2 post1 post2 e\n else let opened = elab_term (comp_inames c1) in\n if C_STAtomic? c1\n then mk_sub_stt_atomic u ty opened pre1 pre2 post1 post2 e\n else let _ = assert (C_STGhost? c1) in\n mk_sub_stt_ghost u ty opened pre1 pre2 post1 post2 e\n\n\nlet elab_bind #g #x #c1 #c2 #c\n (bc:bind_comp g x c1 c2 c)\n (e1 e2:R.term)\n : R.term\n = let t1 = elab_term (comp_res c1) in\n let t2 = elab_term (comp_res c2) in\n match bc with\n | Bind_comp _ _ _ _ _ _ _ ->\n if C_ST? c1\n then\n mk_bind_stt\n (comp_u c1)\n (comp_u c2)\n t1 t2\n (elab_term (comp_pre c1))\n (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1)))\n (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2)))\n e1 e2\n else \n mk_bind_ghost\n (comp_u c1)\n (comp_u c2)\n t1 t2\n (elab_term (comp_inames c1))\n (elab_term (comp_pre c1))\n (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1)))\n (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2)))\n e1 e2\n \n | Bind_comp_ghost_l _ _ _ _ (| reveal_a, reveal_a_typing |) _ _ _ ->\n mk_bind_ghost_atomic\n (comp_u c1)\n (comp_u c2)\n t1 t2\n (elab_term (comp_inames c1))\n (elab_term (comp_pre c1))\n (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1)))\n (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2)))\n e1 e2\n (elab_term reveal_a)\n\n | Bind_comp_ghost_r _ _ _ _ (| reveal_b, reveal_b_typing |) _ _ _ ->\n mk_bind_atomic_ghost\n (comp_u c1)\n (comp_u c2)\n t1 t2\n (elab_term (comp_inames c1))\n (elab_term (comp_pre c1))\n (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1)))\n (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2)))\n e1 e2\n (elab_term reveal_b)\n\nlet elab_lift #g #c1 #c2 (d:lift_comp g c1 c2) (e:R.term)&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Pulse.Elaborate.Core.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 2,\n \&quot;initial_ifuel\&quot;: 1,\n \&quot;max_fuel\&quot;: 8,\n \&quot;max_ifuel\&quot;: 2,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: false,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: true,\n \&quot;z3cliopt\&quot;: [],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 5,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val elab_lift (#g #c1 #c2: _) (d: lift_comp g c1 c2) (e: R.term) : Tot R.term&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Pulse.Elaborate.Core.elab_lift&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;lib/steel/pulse/Pulse.Elaborate.Core.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;7fbb54e94dd4f48ff7cb867d3bae6889a635541e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/FStarLang/steel.git\&quot;,\n \&quot;project_name\&quot;: \&quot;steel\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;d: Pulse.Typing.lift_comp g c1 c2 -> e: FStar.Reflection.Types.term -> FStar.Reflection.Types.term&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 28,\n \&quot;end_line\&quot;: 116,\n \&quot;start_col\&quot;: 4,\n \&quot;start_line\&quot;: 97\n}&quot;}}},{&quot;rowIdx&quot;:17,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Prims.Tot&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val elab_bind (#g #x #c1 #c2 #c: _) (bc: bind_comp g x c1 c2 c) (e1 e2: R.term) : R.term&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Reflection.Util&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Typing&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Elaborate.Pure&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Syntax&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.List.Tot&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Tactics.V2&quot;,&quot;short_module&quot;:&quot;T&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.List.Tot&quot;,&quot;short_module&quot;:&quot;L&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Reflection.V2&quot;,&quot;short_module&quot;:&quot;R&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.Reflection.Typing&quot;,&quot;short_module&quot;:&quot;RT&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Elaborate&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Pulse.Elaborate&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Reflection.Util\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Typing\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Elaborate.Pure\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Syntax\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.List.Tot\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Tactics.V2\&quot;,\n \&quot;short_module\&quot;: \&quot;T\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.List.Tot\&quot;,\n \&quot;short_module\&quot;: \&quot;L\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Reflection.V2\&quot;,\n \&quot;short_module\&quot;: \&quot;R\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.Reflection.Typing\&quot;,\n \&quot;short_module\&quot;: \&quot;RT\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Elaborate\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Pulse.Elaborate\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let elab_bind #g #x #c1 #c2 #c\n (bc:bind_comp g x c1 c2 c)\n (e1 e2:R.term)\n : R.term\n = let t1 = elab_term (comp_res c1) in\n let t2 = elab_term (comp_res c2) in\n match bc with\n | Bind_comp _ _ _ _ _ _ _ ->\n if C_ST? c1\n then\n mk_bind_stt\n (comp_u c1)\n (comp_u c2)\n t1 t2\n (elab_term (comp_pre c1))\n (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1)))\n (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2)))\n e1 e2\n else \n mk_bind_ghost\n (comp_u c1)\n (comp_u c2)\n t1 t2\n (elab_term (comp_inames c1))\n (elab_term (comp_pre c1))\n (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1)))\n (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2)))\n e1 e2\n \n | Bind_comp_ghost_l _ _ _ _ (| reveal_a, reveal_a_typing |) _ _ _ ->\n mk_bind_ghost_atomic\n (comp_u c1)\n (comp_u c2)\n t1 t2\n (elab_term (comp_inames c1))\n (elab_term (comp_pre c1))\n (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1)))\n (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2)))\n e1 e2\n (elab_term reveal_a)\n\n | Bind_comp_ghost_r _ _ _ _ (| reveal_b, reveal_b_typing |) _ _ _ ->\n mk_bind_atomic_ghost\n (comp_u c1)\n (comp_u c2)\n t1 t2\n (elab_term (comp_inames c1))\n (elab_term (comp_pre c1))\n (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1)))\n (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2)))\n e1 e2\n (elab_term reveal_b)&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val elab_bind (#g #x #c1 #c2 #c: _) (bc: bind_comp g x c1 c2 c) (e1 e2: R.term) : R.term\nlet elab_bind #g #x #c1 #c2 #c (bc: bind_comp g x c1 c2 c) (e1: R.term) (e2: R.term) : R.term =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let t1 = elab_term (comp_res c1) in\nlet t2 = elab_term (comp_res c2) in\nmatch bc with\n| Bind_comp _ _ _ _ _ _ _ ->\n if C_ST? c1\n then\n mk_bind_stt (comp_u c1)\n (comp_u c2)\n t1\n t2\n (elab_term (comp_pre c1))\n (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1)))\n (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2)))\n e1\n e2\n else\n mk_bind_ghost (comp_u c1) (comp_u c2) t1 t2 (elab_term (comp_inames c1))\n (elab_term (comp_pre c1)) (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1)))\n (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2))) e1 e2\n| Bind_comp_ghost_l _ _ _ _ (| reveal_a , reveal_a_typing |) _ _ _ ->\n mk_bind_ghost_atomic (comp_u c1) (comp_u c2) t1 t2 (elab_term (comp_inames c1))\n (elab_term (comp_pre c1)) (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1)))\n (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2))) e1 e2 (elab_term reveal_a)\n| Bind_comp_ghost_r _ _ _ _ (| reveal_b , reveal_b_typing |) _ _ _ ->\n mk_bind_atomic_ghost (comp_u c1) (comp_u c2) t1 t2 (elab_term (comp_inames c1))\n (elab_term (comp_pre c1)) (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1)))\n (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2))) e1 e2 (elab_term reveal_b)&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Pulse.Elaborate.Core.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Pulse.Typing.fst.checked\&quot;,\n \&quot;Pulse.Syntax.fst.checked\&quot;,\n \&quot;Pulse.Reflection.Util.fst.checked\&quot;,\n \&quot;Pulse.Elaborate.Pure.fst.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;FStar.Tactics.V2.fst.checked\&quot;,\n \&quot;FStar.Reflection.V2.fst.checked\&quot;,\n \&quot;FStar.Reflection.Typing.fsti.checked\&quot;,\n \&quot;FStar.Range.fsti.checked\&quot;,\n \&quot;FStar.Pervasives.Native.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.List.Tot.fst.checked\&quot;\n ],\n \&quot;interface_file\&quot;: false,\n \&quot;source_file\&quot;: \&quot;Pulse.Elaborate.Core.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;total&quot;],&quot;string&quot;:&quot;[\n \&quot;total\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;Pulse.Typing.Env.env&quot;,&quot;Pulse.Syntax.Base.var&quot;,&quot;Pulse.Syntax.Base.comp&quot;,&quot;Pulse.Typing.bind_comp&quot;,&quot;FStar.Reflection.Types.term&quot;,&quot;Prims.b2t&quot;,&quot;FStar.Pervasives.Native.uu___is_None&quot;,&quot;Pulse.Syntax.Base.typ&quot;,&quot;Pulse.Typing.Env.lookup&quot;,&quot;Pulse.Syntax.Base.comp_st&quot;,&quot;Pulse.Typing.bind_comp_pre&quot;,&quot;Pulse.Typing.universe_of&quot;,&quot;Pulse.Syntax.Base.comp_res&quot;,&quot;Pulse.Syntax.Base.comp_u&quot;,&quot;Prims.l_and&quot;,&quot;Prims.l_not&quot;,&quot;FStar.Set.mem&quot;,&quot;Pulse.Syntax.Naming.freevars&quot;,&quot;Pulse.Syntax.Base.comp_post&quot;,&quot;Pulse.Typing.tot_typing&quot;,&quot;Pulse.Typing.Env.push_binding&quot;,&quot;Pulse.Syntax.Base.ppname_default&quot;,&quot;Pulse.Syntax.Naming.open_term&quot;,&quot;Pulse.Syntax.Base.tm_vprop&quot;,&quot;Pulse.Syntax.Base.uu___is_C_ST&quot;,&quot;Pulse.Reflection.Util.mk_bind_stt&quot;,&quot;Pulse.Elaborate.Pure.elab_term&quot;,&quot;Pulse.Syntax.Base.comp_pre&quot;,&quot;Pulse.Reflection.Util.mk_abs&quot;,&quot;FStar.Reflection.V2.Data.Q_Explicit&quot;,&quot;Prims.bool&quot;,&quot;Pulse.Reflection.Util.mk_bind_ghost&quot;,&quot;Pulse.Syntax.Base.comp_inames&quot;,&quot;Pulse.Typing.bind_comp_ghost_l_pre&quot;,&quot;Pulse.Syntax.Base.term&quot;,&quot;Pulse.Typing.non_informative_witness_t&quot;,&quot;Pulse.Reflection.Util.mk_bind_ghost_atomic&quot;,&quot;Pulse.Typing.bind_comp_ghost_r_pre&quot;,&quot;Pulse.Reflection.Util.mk_bind_atomic_ghost&quot;],&quot;string&quot;:&quot;[\n \&quot;Pulse.Typing.Env.env\&quot;,\n \&quot;Pulse.Syntax.Base.var\&quot;,\n \&quot;Pulse.Syntax.Base.comp\&quot;,\n \&quot;Pulse.Typing.bind_comp\&quot;,\n \&quot;FStar.Reflection.Types.term\&quot;,\n \&quot;Prims.b2t\&quot;,\n \&quot;FStar.Pervasives.Native.uu___is_None\&quot;,\n \&quot;Pulse.Syntax.Base.typ\&quot;,\n \&quot;Pulse.Typing.Env.lookup\&quot;,\n \&quot;Pulse.Syntax.Base.comp_st\&quot;,\n \&quot;Pulse.Typing.bind_comp_pre\&quot;,\n \&quot;Pulse.Typing.universe_of\&quot;,\n \&quot;Pulse.Syntax.Base.comp_res\&quot;,\n \&quot;Pulse.Syntax.Base.comp_u\&quot;,\n \&quot;Prims.l_and\&quot;,\n \&quot;Prims.l_not\&quot;,\n \&quot;FStar.Set.mem\&quot;,\n \&quot;Pulse.Syntax.Naming.freevars\&quot;,\n \&quot;Pulse.Syntax.Base.comp_post\&quot;,\n \&quot;Pulse.Typing.tot_typing\&quot;,\n \&quot;Pulse.Typing.Env.push_binding\&quot;,\n \&quot;Pulse.Syntax.Base.ppname_default\&quot;,\n \&quot;Pulse.Syntax.Naming.open_term\&quot;,\n \&quot;Pulse.Syntax.Base.tm_vprop\&quot;,\n \&quot;Pulse.Syntax.Base.uu___is_C_ST\&quot;,\n \&quot;Pulse.Reflection.Util.mk_bind_stt\&quot;,\n \&quot;Pulse.Elaborate.Pure.elab_term\&quot;,\n \&quot;Pulse.Syntax.Base.comp_pre\&quot;,\n \&quot;Pulse.Reflection.Util.mk_abs\&quot;,\n \&quot;FStar.Reflection.V2.Data.Q_Explicit\&quot;,\n \&quot;Prims.bool\&quot;,\n \&quot;Pulse.Reflection.Util.mk_bind_ghost\&quot;,\n \&quot;Pulse.Syntax.Base.comp_inames\&quot;,\n \&quot;Pulse.Typing.bind_comp_ghost_l_pre\&quot;,\n \&quot;Pulse.Syntax.Base.term\&quot;,\n \&quot;Pulse.Typing.non_informative_witness_t\&quot;,\n \&quot;Pulse.Reflection.Util.mk_bind_ghost_atomic\&quot;,\n \&quot;Pulse.Typing.bind_comp_ghost_r_pre\&quot;,\n \&quot;Pulse.Reflection.Util.mk_bind_atomic_ghost\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Pulse.Elaborate.Core\nmodule RT = FStar.Reflection.Typing\nmodule R = FStar.Reflection.V2\nmodule L = FStar.List.Tot\nmodule T = FStar.Tactics.V2\nopen FStar.List.Tot\nopen Pulse.Syntax\nopen Pulse.Elaborate.Pure\nopen Pulse.Typing\n\nopen Pulse.Reflection.Util\n\nlet elab_frame (c:comp_st) (frame:term) (e:R.term) =\n let u = comp_u c in\n let ty = elab_term (comp_res c) in\n let pre = elab_term (comp_pre c) in\n let post = elab_term (comp_post c) in\n if C_ST? c\n then mk_frame_stt u ty pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e\n else let opened = elab_term (comp_inames c) in \n if C_STAtomic? c\n then mk_frame_stt_atomic u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e\n else let _ = assert (C_STGhost? c) in\n mk_frame_stt_ghost u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e\n\nlet elab_sub (c1 c2:comp_st) (e:R.term) =\n let ty = elab_term (comp_res c1) in\n let u = comp_u c1 in\n let pre1 = elab_term (comp_pre c1) in\n let pre2 = elab_term (comp_pre c2) in\n let post1 = mk_abs ty R.Q_Explicit (elab_term (comp_post c1)) in\n let post2 = mk_abs ty R.Q_Explicit (elab_term (comp_post c2)) in\n if C_ST? c1\n then mk_sub_stt u ty pre1 pre2 post1 post2 e\n else let opened = elab_term (comp_inames c1) in\n if C_STAtomic? c1\n then mk_sub_stt_atomic u ty opened pre1 pre2 post1 post2 e\n else let _ = assert (C_STGhost? c1) in\n mk_sub_stt_ghost u ty opened pre1 pre2 post1 post2 e\n\n\nlet elab_bind #g #x #c1 #c2 #c\n (bc:bind_comp g x c1 c2 c)\n (e1 e2:R.term)&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Pulse.Elaborate.Core.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 2,\n \&quot;initial_ifuel\&quot;: 1,\n \&quot;max_fuel\&quot;: 8,\n \&quot;max_ifuel\&quot;: 2,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: false,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: true,\n \&quot;z3cliopt\&quot;: [],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 5,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val elab_bind (#g #x #c1 #c2 #c: _) (bc: bind_comp g x c1 c2 c) (e1 e2: R.term) : R.term&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Pulse.Elaborate.Core.elab_bind&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;lib/steel/pulse/Pulse.Elaborate.Core.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;7fbb54e94dd4f48ff7cb867d3bae6889a635541e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/FStarLang/steel.git\&quot;,\n \&quot;project_name\&quot;: \&quot;steel\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;\n bc: Pulse.Typing.bind_comp g x c1 c2 c ->\n e1: FStar.Reflection.Types.term ->\n e2: FStar.Reflection.Types.term\n -> FStar.Reflection.Types.term&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 28,\n \&quot;end_line\&quot;: 93,\n \&quot;start_col\&quot;: 3,\n \&quot;start_line\&quot;: 46\n}&quot;}}},{&quot;rowIdx&quot;:18,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Prims.Tot&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Mul&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Curve25519.Fast_defs&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.HyperStack&quot;,&quot;short_module&quot;:&quot;HS&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.Buffer&quot;,&quot;short_module&quot;:&quot;B&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.HyperStack.ST&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.X64.CPU_Features_s&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Inline.X64&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Inline.X64&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Mul\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Curve25519.Fast_defs\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack\&quot;,\n \&quot;short_module\&quot;: \&quot;HS\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.Buffer\&quot;,\n \&quot;short_module\&quot;: \&quot;B\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack.ST\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.X64.CPU_Features_s\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Inline.X64\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Inline.X64\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let u1024 = b:B.buffer UInt64.t{B.length b == 16}&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let u1024 =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;b: B.buffer UInt64.t {B.length b == 16}&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Vale.Inline.X64.Fadd_inline.fsti.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Vale.X64.CPU_Features_s.fst.checked\&quot;,\n \&quot;Vale.Curve25519.Fast_defs.fst.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;LowStar.Buffer.fst.checked\&quot;,\n \&quot;FStar.UInt64.fsti.checked\&quot;,\n \&quot;FStar.Seq.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.Mul.fst.checked\&quot;,\n \&quot;FStar.HyperStack.ST.fsti.checked\&quot;,\n \&quot;FStar.HyperStack.fst.checked\&quot;,\n \&quot;FStar.Ghost.fsti.checked\&quot;\n ],\n \&quot;interface_file\&quot;: false,\n \&quot;source_file\&quot;: \&quot;Vale.Inline.X64.Fadd_inline.fsti\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;total&quot;],&quot;string&quot;:&quot;[\n \&quot;total\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;LowStar.Buffer.buffer&quot;,&quot;FStar.UInt64.t&quot;,&quot;Prims.eq2&quot;,&quot;Prims.int&quot;,&quot;LowStar.Monotonic.Buffer.length&quot;,&quot;LowStar.Buffer.trivial_preorder&quot;],&quot;string&quot;:&quot;[\n \&quot;LowStar.Buffer.buffer\&quot;,\n \&quot;FStar.UInt64.t\&quot;,\n \&quot;Prims.eq2\&quot;,\n \&quot;Prims.int\&quot;,\n \&quot;LowStar.Monotonic.Buffer.length\&quot;,\n \&quot;LowStar.Buffer.trivial_preorder\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Vale.Inline.X64.Fadd_inline\n\nopen Vale.X64.CPU_Features_s\nopen FStar.HyperStack.ST\nmodule B = LowStar.Buffer\nmodule HS = FStar.HyperStack\nopen Vale.Curve25519.Fast_defs\nopen FStar.Mul\n\nunfold\nlet u256 = b:B.buffer UInt64.t{B.length b == 4}\nunfold\nlet u512 = b:B.buffer UInt64.t{B.length b == 8}&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Inline.X64.Fadd_inline.fsti&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 2,\n \&quot;initial_ifuel\&quot;: 0,\n \&quot;max_fuel\&quot;: 1,\n \&quot;max_ifuel\&quot;: 1,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: true,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;native\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;wrapped\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: false,\n \&quot;z3cliopt\&quot;: [\n \&quot;smt.arith.nl=false\&quot;,\n \&quot;smt.QI.EAGER_THRESHOLD=100\&quot;,\n \&quot;smt.CASE_SPLIT=3\&quot;\n ],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 5,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val u1024 : Type0&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Inline.X64.Fadd_inline.u1024&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;vale/code/arch/x64/interop/Vale.Inline.X64.Fadd_inline.fsti\&quot;,\n \&quot;git_rev\&quot;: \&quot;12c5e9539c7e3c366c26409d3b86493548c4483e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/hacl-star/hacl-star.git\&quot;,\n \&quot;project_name\&quot;: \&quot;hacl-star\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Type0&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 49,\n \&quot;end_line\&quot;: 15,\n \&quot;start_col\&quot;: 12,\n \&quot;start_line\&quot;: 15\n}&quot;}}},{&quot;rowIdx&quot;:19,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Prims.Tot&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Mul&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Curve25519.Fast_defs&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.HyperStack&quot;,&quot;short_module&quot;:&quot;HS&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.Buffer&quot;,&quot;short_module&quot;:&quot;B&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.HyperStack.ST&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.X64.CPU_Features_s&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Inline.X64&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Inline.X64&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Mul\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Curve25519.Fast_defs\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack\&quot;,\n \&quot;short_module\&quot;: \&quot;HS\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.Buffer\&quot;,\n \&quot;short_module\&quot;: \&quot;B\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack.ST\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.X64.CPU_Features_s\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Inline.X64\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Inline.X64\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let u256 = b:B.buffer UInt64.t{B.length b == 4}&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let u256 =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;b: B.buffer UInt64.t {B.length b == 4}&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Vale.Inline.X64.Fadd_inline.fsti.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Vale.X64.CPU_Features_s.fst.checked\&quot;,\n \&quot;Vale.Curve25519.Fast_defs.fst.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;LowStar.Buffer.fst.checked\&quot;,\n \&quot;FStar.UInt64.fsti.checked\&quot;,\n \&quot;FStar.Seq.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.Mul.fst.checked\&quot;,\n \&quot;FStar.HyperStack.ST.fsti.checked\&quot;,\n \&quot;FStar.HyperStack.fst.checked\&quot;,\n \&quot;FStar.Ghost.fsti.checked\&quot;\n ],\n \&quot;interface_file\&quot;: false,\n \&quot;source_file\&quot;: \&quot;Vale.Inline.X64.Fadd_inline.fsti\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;total&quot;],&quot;string&quot;:&quot;[\n \&quot;total\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;LowStar.Buffer.buffer&quot;,&quot;FStar.UInt64.t&quot;,&quot;Prims.eq2&quot;,&quot;Prims.int&quot;,&quot;LowStar.Monotonic.Buffer.length&quot;,&quot;LowStar.Buffer.trivial_preorder&quot;],&quot;string&quot;:&quot;[\n \&quot;LowStar.Buffer.buffer\&quot;,\n \&quot;FStar.UInt64.t\&quot;,\n \&quot;Prims.eq2\&quot;,\n \&quot;Prims.int\&quot;,\n \&quot;LowStar.Monotonic.Buffer.length\&quot;,\n \&quot;LowStar.Buffer.trivial_preorder\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Vale.Inline.X64.Fadd_inline\n\nopen Vale.X64.CPU_Features_s\nopen FStar.HyperStack.ST\nmodule B = LowStar.Buffer\nmodule HS = FStar.HyperStack\nopen Vale.Curve25519.Fast_defs\nopen FStar.Mul&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Inline.X64.Fadd_inline.fsti&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 2,\n \&quot;initial_ifuel\&quot;: 0,\n \&quot;max_fuel\&quot;: 1,\n \&quot;max_ifuel\&quot;: 1,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: true,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;native\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;wrapped\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: false,\n \&quot;z3cliopt\&quot;: [\n \&quot;smt.arith.nl=false\&quot;,\n \&quot;smt.QI.EAGER_THRESHOLD=100\&quot;,\n \&quot;smt.CASE_SPLIT=3\&quot;\n ],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 5,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val u256 : Type0&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Inline.X64.Fadd_inline.u256&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;vale/code/arch/x64/interop/Vale.Inline.X64.Fadd_inline.fsti\&quot;,\n \&quot;git_rev\&quot;: \&quot;12c5e9539c7e3c366c26409d3b86493548c4483e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/hacl-star/hacl-star.git\&quot;,\n \&quot;project_name\&quot;: \&quot;hacl-star\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Type0&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 47,\n \&quot;end_line\&quot;: 11,\n \&quot;start_col\&quot;: 11,\n \&quot;start_line\&quot;: 11\n}&quot;}}},{&quot;rowIdx&quot;:20,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Prims.Tot&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Mul&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Curve25519.Fast_defs&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.HyperStack&quot;,&quot;short_module&quot;:&quot;HS&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.Buffer&quot;,&quot;short_module&quot;:&quot;B&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.HyperStack.ST&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.X64.CPU_Features_s&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Inline.X64&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Inline.X64&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Mul\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Curve25519.Fast_defs\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack\&quot;,\n \&quot;short_module\&quot;: \&quot;HS\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.Buffer\&quot;,\n \&quot;short_module\&quot;: \&quot;B\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack.ST\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.X64.CPU_Features_s\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Inline.X64\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Inline.X64\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let u512 = b:B.buffer UInt64.t{B.length b == 8}&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let u512 =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;b: B.buffer UInt64.t {B.length b == 8}&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Vale.Inline.X64.Fadd_inline.fsti.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Vale.X64.CPU_Features_s.fst.checked\&quot;,\n \&quot;Vale.Curve25519.Fast_defs.fst.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;LowStar.Buffer.fst.checked\&quot;,\n \&quot;FStar.UInt64.fsti.checked\&quot;,\n \&quot;FStar.Seq.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.Mul.fst.checked\&quot;,\n \&quot;FStar.HyperStack.ST.fsti.checked\&quot;,\n \&quot;FStar.HyperStack.fst.checked\&quot;,\n \&quot;FStar.Ghost.fsti.checked\&quot;\n ],\n \&quot;interface_file\&quot;: false,\n \&quot;source_file\&quot;: \&quot;Vale.Inline.X64.Fadd_inline.fsti\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;total&quot;],&quot;string&quot;:&quot;[\n \&quot;total\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;LowStar.Buffer.buffer&quot;,&quot;FStar.UInt64.t&quot;,&quot;Prims.eq2&quot;,&quot;Prims.int&quot;,&quot;LowStar.Monotonic.Buffer.length&quot;,&quot;LowStar.Buffer.trivial_preorder&quot;],&quot;string&quot;:&quot;[\n \&quot;LowStar.Buffer.buffer\&quot;,\n \&quot;FStar.UInt64.t\&quot;,\n \&quot;Prims.eq2\&quot;,\n \&quot;Prims.int\&quot;,\n \&quot;LowStar.Monotonic.Buffer.length\&quot;,\n \&quot;LowStar.Buffer.trivial_preorder\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Vale.Inline.X64.Fadd_inline\n\nopen Vale.X64.CPU_Features_s\nopen FStar.HyperStack.ST\nmodule B = LowStar.Buffer\nmodule HS = FStar.HyperStack\nopen Vale.Curve25519.Fast_defs\nopen FStar.Mul\n\nunfold\nlet u256 = b:B.buffer UInt64.t{B.length b == 4}&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Inline.X64.Fadd_inline.fsti&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 2,\n \&quot;initial_ifuel\&quot;: 0,\n \&quot;max_fuel\&quot;: 1,\n \&quot;max_ifuel\&quot;: 1,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: true,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;native\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;wrapped\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: false,\n \&quot;z3cliopt\&quot;: [\n \&quot;smt.arith.nl=false\&quot;,\n \&quot;smt.QI.EAGER_THRESHOLD=100\&quot;,\n \&quot;smt.CASE_SPLIT=3\&quot;\n ],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 5,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val u512 : Type0&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Inline.X64.Fadd_inline.u512&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;vale/code/arch/x64/interop/Vale.Inline.X64.Fadd_inline.fsti\&quot;,\n \&quot;git_rev\&quot;: \&quot;12c5e9539c7e3c366c26409d3b86493548c4483e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/hacl-star/hacl-star.git\&quot;,\n \&quot;project_name\&quot;: \&quot;hacl-star\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Type0&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 47,\n \&quot;end_line\&quot;: 13,\n \&quot;start_col\&quot;: 11,\n \&quot;start_line\&quot;: 13\n}&quot;}}},{&quot;rowIdx&quot;:21,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Prims.GTot&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val as_nat (b: B.buffer UInt64.t {B.length b == 4}) (h: HS.mem) : GTot nat&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Mul&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Curve25519.Fast_defs&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;FStar.HyperStack&quot;,&quot;short_module&quot;:&quot;HS&quot;},{&quot;abbrev&quot;:true,&quot;full_module&quot;:&quot;LowStar.Buffer&quot;,&quot;short_module&quot;:&quot;B&quot;},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.HyperStack.ST&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.X64.CPU_Features_s&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Inline.X64&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Vale.Inline.X64&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Mul\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Curve25519.Fast_defs\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack\&quot;,\n \&quot;short_module\&quot;: \&quot;HS\&quot;\n },\n {\n \&quot;abbrev\&quot;: true,\n \&quot;full_module\&quot;: \&quot;LowStar.Buffer\&quot;,\n \&quot;short_module\&quot;: \&quot;B\&quot;\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.HyperStack.ST\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.X64.CPU_Features_s\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Inline.X64\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Vale.Inline.X64\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let as_nat (b:B.buffer UInt64.t{B.length b == 4}) (h:HS.mem) : GTot nat =\n let s = B.as_seq h b in\n let s0 = UInt64.v (Seq.index s 0) in\n let s1 = UInt64.v (Seq.index s 1) in\n let s2 = UInt64.v (Seq.index s 2) in\n let s3 = UInt64.v (Seq.index s 3) in\n pow2_four s0 s1 s2 s3&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val as_nat (b: B.buffer UInt64.t {B.length b == 4}) (h: HS.mem) : GTot nat\nlet as_nat (b: B.buffer UInt64.t {B.length b == 4}) (h: HS.mem) : GTot nat =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let s = B.as_seq h b in\nlet s0 = UInt64.v (Seq.index s 0) in\nlet s1 = UInt64.v (Seq.index s 1) in\nlet s2 = UInt64.v (Seq.index s 2) in\nlet s3 = UInt64.v (Seq.index s 3) in\npow2_four s0 s1 s2 s3&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;Vale.Inline.X64.Fadd_inline.fsti.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;Vale.X64.CPU_Features_s.fst.checked\&quot;,\n \&quot;Vale.Curve25519.Fast_defs.fst.checked\&quot;,\n \&quot;prims.fst.checked\&quot;,\n \&quot;LowStar.Buffer.fst.checked\&quot;,\n \&quot;FStar.UInt64.fsti.checked\&quot;,\n \&quot;FStar.Seq.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.Mul.fst.checked\&quot;,\n \&quot;FStar.HyperStack.ST.fsti.checked\&quot;,\n \&quot;FStar.HyperStack.fst.checked\&quot;,\n \&quot;FStar.Ghost.fsti.checked\&quot;\n ],\n \&quot;interface_file\&quot;: false,\n \&quot;source_file\&quot;: \&quot;Vale.Inline.X64.Fadd_inline.fsti\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;sometrivial&quot;],&quot;string&quot;:&quot;[\n \&quot;sometrivial\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;LowStar.Buffer.buffer&quot;,&quot;FStar.UInt64.t&quot;,&quot;Prims.eq2&quot;,&quot;Prims.int&quot;,&quot;LowStar.Monotonic.Buffer.length&quot;,&quot;LowStar.Buffer.trivial_preorder&quot;,&quot;FStar.Monotonic.HyperStack.mem&quot;,&quot;Vale.Curve25519.Fast_defs.pow2_four&quot;,&quot;FStar.UInt.uint_t&quot;,&quot;FStar.UInt64.v&quot;,&quot;FStar.Seq.Base.index&quot;,&quot;FStar.Seq.Base.seq&quot;,&quot;LowStar.Monotonic.Buffer.as_seq&quot;,&quot;Prims.nat&quot;],&quot;string&quot;:&quot;[\n \&quot;LowStar.Buffer.buffer\&quot;,\n \&quot;FStar.UInt64.t\&quot;,\n \&quot;Prims.eq2\&quot;,\n \&quot;Prims.int\&quot;,\n \&quot;LowStar.Monotonic.Buffer.length\&quot;,\n \&quot;LowStar.Buffer.trivial_preorder\&quot;,\n \&quot;FStar.Monotonic.HyperStack.mem\&quot;,\n \&quot;Vale.Curve25519.Fast_defs.pow2_four\&quot;,\n \&quot;FStar.UInt.uint_t\&quot;,\n \&quot;FStar.UInt64.v\&quot;,\n \&quot;FStar.Seq.Base.index\&quot;,\n \&quot;FStar.Seq.Base.seq\&quot;,\n \&quot;LowStar.Monotonic.Buffer.as_seq\&quot;,\n \&quot;Prims.nat\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;module Vale.Inline.X64.Fadd_inline\n\nopen Vale.X64.CPU_Features_s\nopen FStar.HyperStack.ST\nmodule B = LowStar.Buffer\nmodule HS = FStar.HyperStack\nopen Vale.Curve25519.Fast_defs\nopen FStar.Mul\n\nunfold\nlet u256 = b:B.buffer UInt64.t{B.length b == 4}\nunfold\nlet u512 = b:B.buffer UInt64.t{B.length b == 8}\nunfold\nlet u1024 = b:B.buffer UInt64.t{B.length b == 16}&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Inline.X64.Fadd_inline.fsti&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 2,\n \&quot;initial_ifuel\&quot;: 0,\n \&quot;max_fuel\&quot;: 1,\n \&quot;max_ifuel\&quot;: 1,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: true,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;native\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;wrapped\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: false,\n \&quot;z3cliopt\&quot;: [\n \&quot;smt.arith.nl=false\&quot;,\n \&quot;smt.QI.EAGER_THRESHOLD=100\&quot;,\n \&quot;smt.CASE_SPLIT=3\&quot;\n ],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 5,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val as_nat (b: B.buffer UInt64.t {B.length b == 4}) (h: HS.mem) : GTot nat&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Vale.Inline.X64.Fadd_inline.as_nat&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;vale/code/arch/x64/interop/Vale.Inline.X64.Fadd_inline.fsti\&quot;,\n \&quot;git_rev\&quot;: \&quot;12c5e9539c7e3c366c26409d3b86493548c4483e\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/hacl-star/hacl-star.git\&quot;,\n \&quot;project_name\&quot;: \&quot;hacl-star\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;\n b: LowStar.Buffer.buffer FStar.UInt64.t {LowStar.Monotonic.Buffer.length b == 4} ->\n h: FStar.Monotonic.HyperStack.mem\n -> Prims.GTot Prims.nat&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 23,\n \&quot;end_line\&quot;: 23,\n \&quot;start_col\&quot;: 73,\n \&quot;start_line\&quot;: 17\n}&quot;}}},{&quot;rowIdx&quot;:22,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Prims.Tot&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Tactics.V2&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Tactics&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Tactics&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Tactics.V2\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Tactics\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Tactics\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let absvar = binding&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let absvar =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;binding&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;FStar.Tactics.PatternMatching.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;prims.fst.checked\&quot;,\n \&quot;FStar.Tactics.V2.fst.checked\&quot;,\n \&quot;FStar.Tactics.fst.checked\&quot;,\n \&quot;FStar.String.fsti.checked\&quot;,\n \&quot;FStar.Squash.fsti.checked\&quot;,\n \&quot;FStar.Pervasives.Native.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.List.Tot.Base.fst.checked\&quot;,\n \&quot;FStar.List.Tot.fst.checked\&quot;,\n \&quot;FStar.List.fst.checked\&quot;\n ],\n \&quot;interface_file\&quot;: false,\n \&quot;source_file\&quot;: \&quot;FStar.Tactics.PatternMatching.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;total&quot;],&quot;string&quot;:&quot;[\n \&quot;total\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;FStar.Tactics.NamedView.binding&quot;],&quot;string&quot;:&quot;[\n \&quot;FStar.Tactics.NamedView.binding\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;(*\n Copyright 2008-2018 Microsoft Research\n\n Licensed under the Apache License, Version 2.0 (the \&quot;License\&quot;);\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \&quot;AS IS\&quot; BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*)\n/// ==========================\n/// Pattern-matching tactics\n/// ==========================\n///\n/// :Author: Clément Pit-Claudel\n/// :Contact: clement.pitclaudel@live.com\n/// :Date: 2017-10-13\n\nmodule FStar.Tactics.PatternMatching\n\nopen FStar.Tactics.V2\n\n/// Contents\n/// ========\n///\n/// 1 Contents\n/// 2 Motivation\n/// 3 Some utility functions\n/// 4 Pattern types\n/// 5 Pattern matching exceptions\n/// 5.1 Types of exceptions\n/// 5.2 The exception monad\n/// 5.3 Liftings\n/// 6 Pattern interpretation\n/// 7 Pattern-matching problems\n/// 7.1 Definitions\n/// 7.2 Resolution\n/// 8 A DSL for pattern-matching\n/// 8.1 Pattern notations\n/// 8.2 Problem notations\n/// 8.3 Continuations\n/// 9 Putting it all together\n/// 10 Examples\n/// 10.1 Simple examples\n/// 10.2 A real-life example\n/// 11 Possible extensions\n/// 12 Notes\n///\n/// Motivation\n/// ==========\n///\n/// Suppose you have a goal of the form ``squash (a == b)``. How do you capture\n/// `a` and `b` for further inspection?\n///\n/// Here's a basic (but cumbersome!) implementation:\n\nlet fetch_eq_side () : Tac (term * term) =\n let g = cur_goal () in\n match inspect g with\n | Tv_App squash (g, _) ->\n (match inspect squash with\n | Tv_UInst squash _\n | Tv_FVar squash ->\n if fv_to_string squash = flatten_name squash_qn then\n (match inspect g with\n | Tv_App eq_type_x (y, _) ->\n (match inspect eq_type_x with\n | Tv_App eq_type (x, _) ->\n (match inspect eq_type with\n | Tv_App eq (typ, _) ->\n (match inspect eq with\n | Tv_UInst eq _\n | Tv_FVar eq ->\n if fv_to_string eq = flatten_name eq2_qn then\n (x, y)\n else fail \&quot;not an equality\&quot;\n | _ -> fail \&quot;not an app2 of fvar: \&quot;)\n | _ -> fail \&quot;not an app3\&quot;)\n | _ -> fail \&quot;not an app2\&quot;)\n | _ -> fail \&quot;not an app under squash\&quot;)\n else fail \&quot;not a squash\&quot;\n | _ -> fail \&quot;not an app of fvar at top level\&quot;)\n | _ -> fail \&quot;not an app at top level\&quot;\n\n/// …and here's how you could use it:\n\n(* let _ = *)\n(* assert_by_tactic (1 + 1 == 2) *)\n(* (fun () -> let l, r = fetch_eq_side () in *)\n(* print (term_to_string l ^ \&quot; / \&quot; ^ term_to_string r)) *)\n\n/// This file defines pattern-matching primitives that let you write the same\n/// thing like this…\n///\n/// .. code:: fstar\n///\n/// let fetch_eq_side' #a () : Tac (term * term) =\n/// gpm (fun (left right: a) (g: pm_goal (squash (left == right))) ->\n/// (quote left, quote right) <: Tac (term * term))\n///\n/// let _ =\n/// assert_by_tactic (1 + 1 == 2)\n/// (fun () -> let l, r = fetch_eq_side' #int () in\n/// print (term_to_string l ^ \&quot; / \&quot; ^ term_to_string r))\n///\n/// …or, more succinctly, like this:\n///\n/// .. code:: fstar\n///\n/// let _ =\n/// assert_by_tactic (1 + 1 == 2)\n/// (gpm (fun (left right: int) (g: pm_goal (squash (left == right))) ->\n/// let l, r = quote left, quote right in\n/// print (term_to_string l ^ \&quot; / \&quot; ^ term_to_string r) <: Tac unit))\n\n\n/// Some utility functions\n/// ======================\n///\n/// (Skip over this part on a quick read — these are just convenience functions)\n\n\n(** Ensure that tactic `t` fails. **)\nlet mustfail #a (t: unit -> Tac a) (message: string) : Tac unit =\n match trytac t with\n | Some _ -> fail message\n | None -> ()\n\n/// The following two tactics are needed because of issues with the ``Tac``\n/// effect.\n\nlet implies_intro' () : Tac unit =\n let _ = implies_intro () in ()\n\nlet repeat' #a (f: unit -> Tac a) : Tac unit =\n let _ = repeat f in ()\n\nlet and_elim' (h: binding) : Tac unit =\n and_elim (pack (Tv_Var h));\n clear h\n\n(** Use a hypothesis at type a to satisfy a goal at type squash a *)\nlet exact_hyp (a: Type0) (h: namedv) : Tac unit =\n let hd = quote (FStar.Squash.return_squash #a) in\n exact (mk_app hd [((pack (Tv_Var h)), Q_Explicit)])\n\n(** Use a hypothesis h (of type a) to satisfy a goal at type a *)\nlet exact_hyp' (h: namedv): Tac unit =\n exact (pack (Tv_Var h))\n\n/// Pattern types\n/// =============\n///\n/// Patterns are defined using a simple inductive type, mirroring the structure\n/// of ``term_view``.\n\ntype varname = string\n\ntype qn = string\n\ntype pattern =\n| PVar: name: varname -> pattern\n| PQn: qn: qn -> pattern\n| PType: pattern\n| PApp: hd: pattern -> arg: pattern -> pattern\n\nlet desc_of_pattern = function\n| PVar _ -> \&quot;a variable\&quot;\n| PQn qn -> \&quot;a constant (\&quot; ^ qn ^ \&quot;)\&quot;\n| PType -> \&quot;Type\&quot;\n| PApp _ _ -> \&quot;a function application\&quot;\n\nlet rec string_of_pattern = function\n| PVar x -> \&quot;?\&quot; ^ x\n| PQn qn -> qn\n| PType -> \&quot;Type\&quot;\n| PApp l r -> \&quot;(\&quot; ^ string_of_pattern l ^ \&quot; \&quot;\n ^ string_of_pattern r ^ \&quot;)\&quot;\n\n/// Pattern matching exceptions\n/// ===========================\n///\n/// Pattern-matching is defined as a pure, monadic function (because of issues\n/// with combining DM4F effects, but also because it helps with debugging).\n/// This section defines the exception monad.\n///\n/// Types of exceptions\n/// -------------------\n\nnoeq type match_exception =\n| NameMismatch of qn * qn\n| SimpleMismatch of pattern * term\n| NonLinearMismatch of varname * term * term\n| UnsupportedTermInPattern of term\n| IncorrectTypeInAbsPatBinder of typ\n\nlet term_head t : Tac string =\n match inspect t with\n | Tv_Var bv -> \&quot;Tv_Var\&quot;\n | Tv_BVar fv -> \&quot;Tv_BVar\&quot;\n | Tv_FVar fv -> \&quot;Tv_FVar\&quot;\n | Tv_UInst _ _ -> \&quot;Tv_UInst\&quot;\n | Tv_App f x -> \&quot;Tv_App\&quot;\n | Tv_Abs x t -> \&quot;Tv_Abs\&quot;\n | Tv_Arrow x t -> \&quot;Tv_Arrow\&quot;\n | Tv_Type _ -> \&quot;Tv_Type\&quot;\n | Tv_Refine x t -> \&quot;Tv_Refine\&quot;\n | Tv_Const cst -> \&quot;Tv_Const\&quot;\n | Tv_Uvar i t -> \&quot;Tv_Uvar\&quot;\n | Tv_Let r attrs b t1 t2 -> \&quot;Tv_Let\&quot;\n | Tv_Match t _ branches -> \&quot;Tv_Match\&quot;\n | Tv_AscribedT _ _ _ _ -> \&quot;Tv_AscribedT\&quot;\n | Tv_AscribedC _ _ _ _ -> \&quot;Tv_AscribedC\&quot;\n | Tv_Unknown -> \&quot;Tv_Unknown\&quot;\n | Tv_Unsupp -> \&quot;Tv_Unsupp\&quot;\n\nlet string_of_match_exception = function\n | NameMismatch (qn1, qn2) ->\n \&quot;Match failure (name mismatch): expecting \&quot; ^\n qn1 ^ \&quot;, found \&quot; ^ qn2\n | SimpleMismatch (pat, tm) ->\n \&quot;Match failure (sort mismatch): expecting \&quot; ^\n desc_of_pattern pat ^ \&quot;, got \&quot; ^ term_to_string tm\n | NonLinearMismatch (nm, t1, t2) ->\n \&quot;Match failure (nonlinear mismatch): variable \&quot; ^ nm ^\n \&quot; needs to match both \&quot; ^ (term_to_string t1) ^\n \&quot; and \&quot; ^ (term_to_string t2)\n | UnsupportedTermInPattern tm ->\n \&quot;Match failure (unsupported term in pattern): \&quot; ^\n term_to_string tm ^ \&quot; (\&quot; ^ term_head tm ^ \&quot;)\&quot;\n | IncorrectTypeInAbsPatBinder typ ->\n \&quot;Incorrect type in pattern-matching binder: \&quot; ^\n term_to_string typ ^ \&quot; (use one of ``var``, ``hyp …``, or ``goal …``)\&quot;\n\n/// The exception monad\n/// -------------------\n\nnoeq type match_res a =\n| Success of a\n| Failure of match_exception\n\nlet return #a (x: a) : match_res a =\n Success x\n\nlet (let?) (#a #b: Type)\n (f: match_res a)\n (g: a -> Tac (match_res b))\n : Tac (match_res b) =\n match f with\n | Success aa -> g aa\n | Failure ex -> Failure ex\n\nlet raise #a (ex: match_exception) : match_res a =\n Failure ex\n\n/// Liftings\n/// --------\n///\n/// There's a natural lifting from the exception monad into the tactic effect:\n\nlet lift_exn_tac #a #b (f: a -> match_res b) (aa: a) : Tac b =\n match f aa with\n | Success bb -> bb\n | Failure ex -> Tactics.fail (string_of_match_exception ex)\n\nlet lift_exn_tactic #a #b (f: a -> match_res b) (aa: a) : Tac b =\n match f aa with\n | Success bb -> bb\n | Failure ex -> Tactics.fail (string_of_match_exception ex)\n\n/// Pattern interpretation\n/// ======================\n///\n/// This section implement pattern-matching. This is strictly a one term, one\n/// pattern implementation — handling cases in which mutliple hypotheses match\n/// the same pattern is done later.\n\ntype bindings = list (varname * term)\nlet string_of_bindings (bindings: bindings) =\n String.concat \&quot;\\n\&quot;\n (map (fun (nm, tm) -> (\&quot;>> \&quot; ^ nm ^ \&quot;: \&quot; ^ term_to_string tm))\n bindings)\n\n(** Match a pattern against a term.\n`cur_bindings` is a list of bindings collected while matching previous parts of\nthe pattern. Returns a result in the exception monad. **)\nlet rec interp_pattern_aux (pat: pattern) (cur_bindings: bindings) (tm:term)\n : Tac (match_res bindings) =\n let interp_var (v: varname) cur_bindings tm =\n match List.Tot.Base.assoc v cur_bindings with\n | Some tm' -> if term_eq tm tm' then return cur_bindings\n else raise (NonLinearMismatch (v, tm, tm'))\n | None -> return ((v, tm) :: cur_bindings) in\n let interp_qn (qn: qn) cur_bindings tm =\n match inspect tm with\n | Tv_UInst fv _\n | Tv_FVar fv ->\n if fv_to_string fv = qn then return cur_bindings\n else raise (NameMismatch (qn, (fv_to_string fv)))\n | _ -> raise (SimpleMismatch (pat, tm)) in\n let interp_type cur_bindings tm =\n match inspect tm with\n | Tv_Type _ -> return cur_bindings\n | _ -> raise (SimpleMismatch (pat, tm)) in\n let interp_app (p_hd p_arg: (p:pattern{p << pat})) cur_bindings tm =\n match inspect tm with\n | Tv_App hd (arg, _) ->\n let? with_hd = interp_pattern_aux p_hd cur_bindings hd in\n let? with_arg = interp_pattern_aux p_arg with_hd arg in\n return with_arg\n | _ -> raise (SimpleMismatch (pat, tm)) in\n match pat with\n | PVar var -> interp_var var cur_bindings tm\n | PQn qn -> interp_qn qn cur_bindings tm\n | PType -> interp_type cur_bindings tm\n | PApp p_hd p_arg -> interp_app p_hd p_arg cur_bindings tm\n\n(** Match a pattern `pat` against a term.\nReturns a result in the exception monad. **)\nlet interp_pattern (pat: pattern) : term -> Tac (match_res bindings) =\n fun (tm: term) ->\n let? rev_bindings = interp_pattern_aux pat [] tm in\n return (List.Tot.Base.rev rev_bindings)\n\n(** Match a term `tm` against a pattern `pat`.\nRaises an exception if the match fails. This is mostly useful for debugging:\nuse ``mgw`` to capture matches. **)\nlet match_term pat (tm : term) : Tac bindings =\n match interp_pattern pat (norm_term [] tm) with\n | Success bb -> bb\n | Failure ex -> Tactics.fail (string_of_match_exception ex)\n\n/// Pattern-matching problems\n/// =========================\n///\n/// Generalizing past single-term single-pattern problems, we obtain the\n/// following notions of pattern-matching problems and solutions:\n\nlet debug msg : Tac unit = () // print msg\n\n/// Definitions\n/// -----------&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;FStar.Tactics.PatternMatching.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 2,\n \&quot;initial_ifuel\&quot;: 1,\n \&quot;max_fuel\&quot;: 8,\n \&quot;max_ifuel\&quot;: 2,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: false,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: true,\n \&quot;z3cliopt\&quot;: [],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 5,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val absvar : Type0&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;FStar.Tactics.PatternMatching.absvar&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;ulib/FStar.Tactics.PatternMatching.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;f4cbb7a38d67eeb13fbdb2f4fb8a44a65cbcdc1f\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/FStarLang/FStar.git\&quot;,\n \&quot;project_name\&quot;: \&quot;FStar\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Type0&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 20,\n \&quot;end_line\&quot;: 349,\n \&quot;start_col\&quot;: 13,\n \&quot;start_line\&quot;: 349\n}&quot;}}},{&quot;rowIdx&quot;:23,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Prims.Tot&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Tactics.V2&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Tactics&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Tactics&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Tactics.V2\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Tactics\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Tactics\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let hyp_qn = `%hyp&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let hyp_qn =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;`%hyp&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;FStar.Tactics.PatternMatching.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;prims.fst.checked\&quot;,\n \&quot;FStar.Tactics.V2.fst.checked\&quot;,\n \&quot;FStar.Tactics.fst.checked\&quot;,\n \&quot;FStar.String.fsti.checked\&quot;,\n \&quot;FStar.Squash.fsti.checked\&quot;,\n \&quot;FStar.Pervasives.Native.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.List.Tot.Base.fst.checked\&quot;,\n \&quot;FStar.List.Tot.fst.checked\&quot;,\n \&quot;FStar.List.fst.checked\&quot;\n ],\n \&quot;interface_file\&quot;: false,\n \&quot;source_file\&quot;: \&quot;FStar.Tactics.PatternMatching.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;total&quot;],&quot;string&quot;:&quot;[\n \&quot;total\&quot;\n]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;(*\n Copyright 2008-2018 Microsoft Research\n\n Licensed under the Apache License, Version 2.0 (the \&quot;License\&quot;);\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \&quot;AS IS\&quot; BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*)\n/// ==========================\n/// Pattern-matching tactics\n/// ==========================\n///\n/// :Author: Clément Pit-Claudel\n/// :Contact: clement.pitclaudel@live.com\n/// :Date: 2017-10-13\n\nmodule FStar.Tactics.PatternMatching\n\nopen FStar.Tactics.V2\n\n/// Contents\n/// ========\n///\n/// 1 Contents\n/// 2 Motivation\n/// 3 Some utility functions\n/// 4 Pattern types\n/// 5 Pattern matching exceptions\n/// 5.1 Types of exceptions\n/// 5.2 The exception monad\n/// 5.3 Liftings\n/// 6 Pattern interpretation\n/// 7 Pattern-matching problems\n/// 7.1 Definitions\n/// 7.2 Resolution\n/// 8 A DSL for pattern-matching\n/// 8.1 Pattern notations\n/// 8.2 Problem notations\n/// 8.3 Continuations\n/// 9 Putting it all together\n/// 10 Examples\n/// 10.1 Simple examples\n/// 10.2 A real-life example\n/// 11 Possible extensions\n/// 12 Notes\n///\n/// Motivation\n/// ==========\n///\n/// Suppose you have a goal of the form ``squash (a == b)``. How do you capture\n/// `a` and `b` for further inspection?\n///\n/// Here's a basic (but cumbersome!) implementation:\n\nlet fetch_eq_side () : Tac (term * term) =\n let g = cur_goal () in\n match inspect g with\n | Tv_App squash (g, _) ->\n (match inspect squash with\n | Tv_UInst squash _\n | Tv_FVar squash ->\n if fv_to_string squash = flatten_name squash_qn then\n (match inspect g with\n | Tv_App eq_type_x (y, _) ->\n (match inspect eq_type_x with\n | Tv_App eq_type (x, _) ->\n (match inspect eq_type with\n | Tv_App eq (typ, _) ->\n (match inspect eq with\n | Tv_UInst eq _\n | Tv_FVar eq ->\n if fv_to_string eq = flatten_name eq2_qn then\n (x, y)\n else fail \&quot;not an equality\&quot;\n | _ -> fail \&quot;not an app2 of fvar: \&quot;)\n | _ -> fail \&quot;not an app3\&quot;)\n | _ -> fail \&quot;not an app2\&quot;)\n | _ -> fail \&quot;not an app under squash\&quot;)\n else fail \&quot;not a squash\&quot;\n | _ -> fail \&quot;not an app of fvar at top level\&quot;)\n | _ -> fail \&quot;not an app at top level\&quot;\n\n/// …and here's how you could use it:\n\n(* let _ = *)\n(* assert_by_tactic (1 + 1 == 2) *)\n(* (fun () -> let l, r = fetch_eq_side () in *)\n(* print (term_to_string l ^ \&quot; / \&quot; ^ term_to_string r)) *)\n\n/// This file defines pattern-matching primitives that let you write the same\n/// thing like this…\n///\n/// .. code:: fstar\n///\n/// let fetch_eq_side' #a () : Tac (term * term) =\n/// gpm (fun (left right: a) (g: pm_goal (squash (left == right))) ->\n/// (quote left, quote right) <: Tac (term * term))\n///\n/// let _ =\n/// assert_by_tactic (1 + 1 == 2)\n/// (fun () -> let l, r = fetch_eq_side' #int () in\n/// print (term_to_string l ^ \&quot; / \&quot; ^ term_to_string r))\n///\n/// …or, more succinctly, like this:\n///\n/// .. code:: fstar\n///\n/// let _ =\n/// assert_by_tactic (1 + 1 == 2)\n/// (gpm (fun (left right: int) (g: pm_goal (squash (left == right))) ->\n/// let l, r = quote left, quote right in\n/// print (term_to_string l ^ \&quot; / \&quot; ^ term_to_string r) <: Tac unit))\n\n\n/// Some utility functions\n/// ======================\n///\n/// (Skip over this part on a quick read — these are just convenience functions)\n\n\n(** Ensure that tactic `t` fails. **)\nlet mustfail #a (t: unit -> Tac a) (message: string) : Tac unit =\n match trytac t with\n | Some _ -> fail message\n | None -> ()\n\n/// The following two tactics are needed because of issues with the ``Tac``\n/// effect.\n\nlet implies_intro' () : Tac unit =\n let _ = implies_intro () in ()\n\nlet repeat' #a (f: unit -> Tac a) : Tac unit =\n let _ = repeat f in ()\n\nlet and_elim' (h: binding) : Tac unit =\n and_elim (pack (Tv_Var h));\n clear h\n\n(** Use a hypothesis at type a to satisfy a goal at type squash a *)\nlet exact_hyp (a: Type0) (h: namedv) : Tac unit =\n let hd = quote (FStar.Squash.return_squash #a) in\n exact (mk_app hd [((pack (Tv_Var h)), Q_Explicit)])\n\n(** Use a hypothesis h (of type a) to satisfy a goal at type a *)\nlet exact_hyp' (h: namedv): Tac unit =\n exact (pack (Tv_Var h))\n\n/// Pattern types\n/// =============\n///\n/// Patterns are defined using a simple inductive type, mirroring the structure\n/// of ``term_view``.\n\ntype varname = string\n\ntype qn = string\n\ntype pattern =\n| PVar: name: varname -> pattern\n| PQn: qn: qn -> pattern\n| PType: pattern\n| PApp: hd: pattern -> arg: pattern -> pattern\n\nlet desc_of_pattern = function\n| PVar _ -> \&quot;a variable\&quot;\n| PQn qn -> \&quot;a constant (\&quot; ^ qn ^ \&quot;)\&quot;\n| PType -> \&quot;Type\&quot;\n| PApp _ _ -> \&quot;a function application\&quot;\n\nlet rec string_of_pattern = function\n| PVar x -> \&quot;?\&quot; ^ x\n| PQn qn -> qn\n| PType -> \&quot;Type\&quot;\n| PApp l r -> \&quot;(\&quot; ^ string_of_pattern l ^ \&quot; \&quot;\n ^ string_of_pattern r ^ \&quot;)\&quot;\n\n/// Pattern matching exceptions\n/// ===========================\n///\n/// Pattern-matching is defined as a pure, monadic function (because of issues\n/// with combining DM4F effects, but also because it helps with debugging).\n/// This section defines the exception monad.\n///\n/// Types of exceptions\n/// -------------------\n\nnoeq type match_exception =\n| NameMismatch of qn * qn\n| SimpleMismatch of pattern * term\n| NonLinearMismatch of varname * term * term\n| UnsupportedTermInPattern of term\n| IncorrectTypeInAbsPatBinder of typ\n\nlet term_head t : Tac string =\n match inspect t with\n | Tv_Var bv -> \&quot;Tv_Var\&quot;\n | Tv_BVar fv -> \&quot;Tv_BVar\&quot;\n | Tv_FVar fv -> \&quot;Tv_FVar\&quot;\n | Tv_UInst _ _ -> \&quot;Tv_UInst\&quot;\n | Tv_App f x -> \&quot;Tv_App\&quot;\n | Tv_Abs x t -> \&quot;Tv_Abs\&quot;\n | Tv_Arrow x t -> \&quot;Tv_Arrow\&quot;\n | Tv_Type _ -> \&quot;Tv_Type\&quot;\n | Tv_Refine x t -> \&quot;Tv_Refine\&quot;\n | Tv_Const cst -> \&quot;Tv_Const\&quot;\n | Tv_Uvar i t -> \&quot;Tv_Uvar\&quot;\n | Tv_Let r attrs b t1 t2 -> \&quot;Tv_Let\&quot;\n | Tv_Match t _ branches -> \&quot;Tv_Match\&quot;\n | Tv_AscribedT _ _ _ _ -> \&quot;Tv_AscribedT\&quot;\n | Tv_AscribedC _ _ _ _ -> \&quot;Tv_AscribedC\&quot;\n | Tv_Unknown -> \&quot;Tv_Unknown\&quot;\n | Tv_Unsupp -> \&quot;Tv_Unsupp\&quot;\n\nlet string_of_match_exception = function\n | NameMismatch (qn1, qn2) ->\n \&quot;Match failure (name mismatch): expecting \&quot; ^\n qn1 ^ \&quot;, found \&quot; ^ qn2\n | SimpleMismatch (pat, tm) ->\n \&quot;Match failure (sort mismatch): expecting \&quot; ^\n desc_of_pattern pat ^ \&quot;, got \&quot; ^ term_to_string tm\n | NonLinearMismatch (nm, t1, t2) ->\n \&quot;Match failure (nonlinear mismatch): variable \&quot; ^ nm ^\n \&quot; needs to match both \&quot; ^ (term_to_string t1) ^\n \&quot; and \&quot; ^ (term_to_string t2)\n | UnsupportedTermInPattern tm ->\n \&quot;Match failure (unsupported term in pattern): \&quot; ^\n term_to_string tm ^ \&quot; (\&quot; ^ term_head tm ^ \&quot;)\&quot;\n | IncorrectTypeInAbsPatBinder typ ->\n \&quot;Incorrect type in pattern-matching binder: \&quot; ^\n term_to_string typ ^ \&quot; (use one of ``var``, ``hyp …``, or ``goal …``)\&quot;\n\n/// The exception monad\n/// -------------------\n\nnoeq type match_res a =\n| Success of a\n| Failure of match_exception\n\nlet return #a (x: a) : match_res a =\n Success x\n\nlet (let?) (#a #b: Type)\n (f: match_res a)\n (g: a -> Tac (match_res b))\n : Tac (match_res b) =\n match f with\n | Success aa -> g aa\n | Failure ex -> Failure ex\n\nlet raise #a (ex: match_exception) : match_res a =\n Failure ex\n\n/// Liftings\n/// --------\n///\n/// There's a natural lifting from the exception monad into the tactic effect:\n\nlet lift_exn_tac #a #b (f: a -> match_res b) (aa: a) : Tac b =\n match f aa with\n | Success bb -> bb\n | Failure ex -> Tactics.fail (string_of_match_exception ex)\n\nlet lift_exn_tactic #a #b (f: a -> match_res b) (aa: a) : Tac b =\n match f aa with\n | Success bb -> bb\n | Failure ex -> Tactics.fail (string_of_match_exception ex)\n\n/// Pattern interpretation\n/// ======================\n///\n/// This section implement pattern-matching. This is strictly a one term, one\n/// pattern implementation — handling cases in which mutliple hypotheses match\n/// the same pattern is done later.\n\ntype bindings = list (varname * term)\nlet string_of_bindings (bindings: bindings) =\n String.concat \&quot;\\n\&quot;\n (map (fun (nm, tm) -> (\&quot;>> \&quot; ^ nm ^ \&quot;: \&quot; ^ term_to_string tm))\n bindings)\n\n(** Match a pattern against a term.\n`cur_bindings` is a list of bindings collected while matching previous parts of\nthe pattern. Returns a result in the exception monad. **)\nlet rec interp_pattern_aux (pat: pattern) (cur_bindings: bindings) (tm:term)\n : Tac (match_res bindings) =\n let interp_var (v: varname) cur_bindings tm =\n match List.Tot.Base.assoc v cur_bindings with\n | Some tm' -> if term_eq tm tm' then return cur_bindings\n else raise (NonLinearMismatch (v, tm, tm'))\n | None -> return ((v, tm) :: cur_bindings) in\n let interp_qn (qn: qn) cur_bindings tm =\n match inspect tm with\n | Tv_UInst fv _\n | Tv_FVar fv ->\n if fv_to_string fv = qn then return cur_bindings\n else raise (NameMismatch (qn, (fv_to_string fv)))\n | _ -> raise (SimpleMismatch (pat, tm)) in\n let interp_type cur_bindings tm =\n match inspect tm with\n | Tv_Type _ -> return cur_bindings\n | _ -> raise (SimpleMismatch (pat, tm)) in\n let interp_app (p_hd p_arg: (p:pattern{p << pat})) cur_bindings tm =\n match inspect tm with\n | Tv_App hd (arg, _) ->\n let? with_hd = interp_pattern_aux p_hd cur_bindings hd in\n let? with_arg = interp_pattern_aux p_arg with_hd arg in\n return with_arg\n | _ -> raise (SimpleMismatch (pat, tm)) in\n match pat with\n | PVar var -> interp_var var cur_bindings tm\n | PQn qn -> interp_qn qn cur_bindings tm\n | PType -> interp_type cur_bindings tm\n | PApp p_hd p_arg -> interp_app p_hd p_arg cur_bindings tm\n\n(** Match a pattern `pat` against a term.\nReturns a result in the exception monad. **)\nlet interp_pattern (pat: pattern) : term -> Tac (match_res bindings) =\n fun (tm: term) ->\n let? rev_bindings = interp_pattern_aux pat [] tm in\n return (List.Tot.Base.rev rev_bindings)\n\n(** Match a term `tm` against a pattern `pat`.\nRaises an exception if the match fails. This is mostly useful for debugging:\nuse ``mgw`` to capture matches. **)\nlet match_term pat (tm : term) : Tac bindings =\n match interp_pattern pat (norm_term [] tm) with\n | Success bb -> bb\n | Failure ex -> Tactics.fail (string_of_match_exception ex)\n\n/// Pattern-matching problems\n/// =========================\n///\n/// Generalizing past single-term single-pattern problems, we obtain the\n/// following notions of pattern-matching problems and solutions:\n\nlet debug msg : Tac unit = () // print msg\n\n/// Definitions\n/// -----------\n\nlet absvar = binding\ntype hypothesis = binding\n\n/// A matching problem is composed of holes (``mp_vars``), hypothesis patterns\n/// (``mp_hyps``), and a goal pattern (``mp_goal``).\n\nnoeq type matching_problem =\n { mp_vars: list varname;\n mp_hyps: list (varname * pattern);\n mp_goal: option pattern }\n\nlet string_of_matching_problem mp =\n let vars =\n String.concat \&quot;, \&quot; mp.mp_vars in\n let hyps =\n String.concat \&quot;\\n \&quot;\n (List.Tot.Base.map (fun (nm, pat) ->\n nm ^ \&quot;: \&quot; ^ (string_of_pattern pat)) mp.mp_hyps) in\n let goal = match mp.mp_goal with\n | None -> \&quot;_\&quot;\n | Some pat -> string_of_pattern pat in\n \&quot;\\n{ vars: \&quot; ^ vars ^ \&quot;\\n\&quot; ^\n \&quot; hyps: \&quot; ^ hyps ^ \&quot;\\n\&quot; ^\n \&quot; goal: \&quot; ^ goal ^ \&quot; }\&quot;\n\n/// A solution is composed of terms captured to mach the holes, and binders\n/// captured to match hypothesis patterns.\n\nnoeq type matching_solution =\n { ms_vars: list (varname * term);\n ms_hyps: list (varname * hypothesis) }\n\nlet string_of_matching_solution ms =\n let vars =\n String.concat \&quot;\\n \&quot;\n (map (fun (varname, tm) ->\n varname ^ \&quot;: \&quot; ^ (term_to_string tm)) ms.ms_vars) in\n let hyps =\n String.concat \&quot;\\n \&quot;\n (map (fun (nm, binding) ->\n nm ^ \&quot;: \&quot; ^ (binding_to_string binding)) ms.ms_hyps) in\n \&quot;\\n{ vars: \&quot; ^ vars ^ \&quot;\\n\&quot; ^\n \&quot; hyps: \&quot; ^ hyps ^ \&quot; }\&quot;\n\n(** Find a varname in an association list; fail if it can't be found. **)\nlet assoc_varname_fail (#b: Type) (key: varname) (ls: list (varname * b))\n : Tac b =\n match List.Tot.Base.assoc key ls with\n | None -> fail (\&quot;Not found: \&quot; ^ key)\n | Some x -> x\n\nlet ms_locate_hyp (a: Type) (solution: matching_solution)\n (name: varname) : Tac hypothesis =\n assoc_varname_fail name solution.ms_hyps\n\nlet ms_locate_var (a: Type) (solution: matching_solution)\n (name: varname) : Tac a =\n unquote #a (assoc_varname_fail name solution.ms_vars)\n\nlet ms_locate_unit (a: Type) _solution _binder_name : Tac unit =\n ()\n\n/// Resolution\n/// ----------\n///\n/// Solving a matching problem is a two-steps process: find an initial\n/// assignment for holes based on the goal pattern, then find a set of\n/// hypotheses matching hypothesis patterns.\n///\n/// Note that the implementation takes a continuation of type\n/// ``matching_solution -> Tac a``. This continuation is needed because we want\n/// users to be able to provide extra criteria on matching solutions (most\n/// commonly, this criterion is that a particular tactic should run\n/// successfuly).\n///\n/// This makes it easy to implement a simple for of search through the context,\n/// where one can find a hypothesis matching a particular predicate by\n/// constructing a trivial matching problem and passing the predicate as the\n/// continuation.\n\n(** Scan ``hypotheses`` for a match for ``pat`` that lets ``body`` succeed.\n\n``name`` is used to refer to the hypothesis matched in the final solution.\n``part_sol`` includes bindings gathered while matching previous solutions. **)\nlet rec solve_mp_for_single_hyp #a\n (name: varname)\n (pat: pattern)\n (hypotheses: list hypothesis)\n (body: matching_solution -> Tac a)\n (part_sol: matching_solution)\n : Tac a =\n match hypotheses with\n | [] ->\n fail #a \&quot;No matching hypothesis\&quot;\n | h :: hs ->\n or_else // Must be in ``Tac`` here to run `body`\n (fun () ->\n match interp_pattern_aux pat part_sol.ms_vars (type_of_binding h) with\n | Failure ex ->\n fail (\&quot;Failed to match hyp: \&quot; ^ (string_of_match_exception ex))\n | Success bindings ->\n let ms_hyps = (name, h) :: part_sol.ms_hyps in\n body ({ part_sol with ms_vars = bindings; ms_hyps = ms_hyps }))\n (fun () ->\n solve_mp_for_single_hyp name pat hs body part_sol)\n\n(** Scan ``hypotheses`` for matches for ``mp_hyps`` that lets ``body``\nsucceed. **)\nlet rec solve_mp_for_hyps #a\n (mp_hyps: list (varname * pattern))\n (hypotheses: list hypothesis)\n (body: matching_solution -> Tac a)\n (partial_solution: matching_solution)\n : Tac a =\n match mp_hyps with\n | [] -> body partial_solution\n | (name, pat) :: pats ->\n solve_mp_for_single_hyp name pat hypotheses\n (solve_mp_for_hyps pats hypotheses body)\n partial_solution\n\n(** Solve a matching problem.\n\nThe solution returned is constructed to ensure that the continuation ``body``\nsucceeds: this implements the usual backtracking-match semantics. **)\nlet solve_mp #a (problem: matching_problem)\n (hypotheses: list hypothesis) (goal: term)\n (body: matching_solution -> Tac a)\n : Tac a =\n let goal_ps =\n match problem.mp_goal with\n | None -> { ms_vars = []; ms_hyps = [] }\n | Some pat ->\n match interp_pattern pat goal with\n | Failure ex -> fail (\&quot;Failed to match goal: \&quot; ^ (string_of_match_exception ex))\n | Success bindings -> { ms_vars = bindings; ms_hyps = [] } in\n solve_mp_for_hyps #a problem.mp_hyps hypotheses body goal_ps\n\n/// A DSL for pattern-matching\n/// ==========================\n///\n/// Using pattern-matching problems as defined above is relatively cumbersome,\n/// so we now introduce a lightweight notation, in two steps: pattern notations,\n/// and matching-problem notations.\n///\n/// Pattern notations\n/// -----------------\n///\n/// The first part of our pattern-matching syntax is pattern notations: we\n/// provide a reflective function which constructs a pattern from a term:\n/// variables are holes, free variables are constants, and applications are\n/// application patterns.\n\n(* FIXME: MOVE *)\nlet name_of_namedv (x:namedv) : Tac string =\n unseal (inspect_namedv x).ppname\n\n(** Compile a term `tm` into a pattern. **)\nlet rec pattern_of_term_ex tm : Tac (match_res pattern) =\n match inspect tm with\n | Tv_Var bv ->\n return (PVar (name_of_namedv bv))\n | Tv_FVar fv\n | Tv_UInst fv _ ->\n let qn = fv_to_string fv in\n return (PQn qn)\n | Tv_Type _ ->\n return PType\n | Tv_App f (x, _) ->\n let? fpat = pattern_of_term_ex f in\n let? xpat = pattern_of_term_ex x in\n return (PApp fpat xpat)\n | _ -> raise (UnsupportedTermInPattern tm)\n\n(** β-reduce a term `tm`.\nThis is useful to remove needles function applications introduced by F*, like\n``(fun a b c -> a) 1 2 3``. **)\nlet beta_reduce (tm: term) : Tac term =\n norm_term [] tm\n\n(** Compile a term `tm` into a pattern. **)\nlet pattern_of_term tm : Tac pattern =\n match pattern_of_term_ex tm with\n | Success bb -> bb\n | Failure ex -> Tactics.fail (string_of_match_exception ex)\n\n/// Problem notations\n/// -----------------\n///\n/// We then introduce a DSL for matching problems, best explained on the\n/// following example::\n///\n/// (fun (a b c: ①) (h1 h2 h3: hyp ②) (g: pm_goal ③) → ④)\n///\n/// This notation is intended to express a pattern-matching problems with three\n/// holes ``a``, ``b``, and ``c`` of type ①, matching hypotheses ``h1``, ``h2``,\n/// and ``h3`` against pattern ② and the goal against the pattern ③. The body\n/// of the notation (④) is then run with appropriate terms bound to ``a``,\n/// ``b``, and ``c``, appropriate binders bound to ``h1``, ``h2``, and ``h3``,\n/// and ``()`` bound to ``g``.\n///\n/// We call these patterns ``abspat``s (abstraction patterns), and we provide\n/// facilities to parse them into matching problems, and to run their bodies\n/// against a particular matching solution.\n\n// We used to annotate variables with an explicit 'var' marker, but then that\n// var annotation leaked into the types of other hypotheses due to type\n// inference, requiring non-trivial normalization.\n\n// let var (a: Type) = a\nlet hyp (a: Type) = binding\nlet pm_goal (a: Type) = unit&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;FStar.Tactics.PatternMatching.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 2,\n \&quot;initial_ifuel\&quot;: 1,\n \&quot;max_fuel\&quot;: 8,\n \&quot;max_ifuel\&quot;: 2,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: false,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: true,\n \&quot;z3cliopt\&quot;: [],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 5,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val hyp_qn : Prims.string&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;FStar.Tactics.PatternMatching.hyp_qn&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;ulib/FStar.Tactics.PatternMatching.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;f4cbb7a38d67eeb13fbdb2f4fb8a44a65cbcdc1f\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/FStarLang/FStar.git\&quot;,\n \&quot;project_name\&quot;: \&quot;FStar\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;Prims.string&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 19,\n \&quot;end_line\&quot;: 562,\n \&quot;start_col\&quot;: 16,\n \&quot;start_line\&quot;: 562\n}&quot;}}},{&quot;rowIdx&quot;:24,&quot;cells&quot;:{&quot;effect&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;FStar.Tactics.Effect.Tac&quot;},&quot;original_source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val interp_pattern: pat: pattern -> term -> Tac (match_res bindings)&quot;},&quot;opens_and_abbrevs&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Tactics.V2&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Tactics&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Tactics&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar.Pervasives&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;Prims&quot;,&quot;short_module&quot;:null},{&quot;abbrev&quot;:false,&quot;full_module&quot;:&quot;FStar&quot;,&quot;short_module&quot;:null}],&quot;string&quot;:&quot;[\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Tactics.V2\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Tactics\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Tactics\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar.Pervasives\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;Prims\&quot;,\n \&quot;short_module\&quot;: null\n },\n {\n \&quot;abbrev\&quot;: false,\n \&quot;full_module\&quot;: \&quot;FStar\&quot;,\n \&quot;short_module\&quot;: null\n }\n]&quot;},&quot;isa_cross_project_example&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;source_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;let interp_pattern (pat: pattern) : term -> Tac (match_res bindings) =\n fun (tm: term) ->\n let? rev_bindings = interp_pattern_aux pat [] tm in\n return (List.Tot.Base.rev rev_bindings)&quot;},&quot;partial_definition&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val interp_pattern: pat: pattern -> term -> Tac (match_res bindings)\nlet interp_pattern (pat: pattern) : term -> Tac (match_res bindings) =&quot;},&quot;is_div&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;true&quot;},&quot;is_type&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;is_proof&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;completed_definiton&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;fun (tm: term) ->\n let? rev_bindings = interp_pattern_aux pat [] tm in\n return (List.Tot.Base.rev rev_bindings)&quot;},&quot;dependencies&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;checked_file\&quot;: \&quot;FStar.Tactics.PatternMatching.fst.checked\&quot;,\n \&quot;dependencies\&quot;: [\n \&quot;prims.fst.checked\&quot;,\n \&quot;FStar.Tactics.V2.fst.checked\&quot;,\n \&quot;FStar.Tactics.fst.checked\&quot;,\n \&quot;FStar.String.fsti.checked\&quot;,\n \&quot;FStar.Squash.fsti.checked\&quot;,\n \&quot;FStar.Pervasives.Native.fst.checked\&quot;,\n \&quot;FStar.Pervasives.fsti.checked\&quot;,\n \&quot;FStar.List.Tot.Base.fst.checked\&quot;,\n \&quot;FStar.List.Tot.fst.checked\&quot;,\n \&quot;FStar.List.fst.checked\&quot;\n ],\n \&quot;interface_file\&quot;: false,\n \&quot;source_file\&quot;: \&quot;FStar.Tactics.PatternMatching.fst\&quot;\n}&quot;},&quot;effect_flags&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;ideal_premises&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[&quot;FStar.Tactics.PatternMatching.pattern&quot;,&quot;FStar.Tactics.NamedView.term&quot;,&quot;FStar.Tactics.PatternMatching.op_let_Question&quot;,&quot;FStar.Tactics.PatternMatching.bindings&quot;,&quot;Prims.list&quot;,&quot;FStar.Pervasives.Native.tuple2&quot;,&quot;FStar.Tactics.PatternMatching.varname&quot;,&quot;FStar.Tactics.PatternMatching.return&quot;,&quot;FStar.List.Tot.Base.rev&quot;,&quot;FStar.Tactics.PatternMatching.match_res&quot;,&quot;FStar.Tactics.PatternMatching.interp_pattern_aux&quot;,&quot;Prims.Nil&quot;],&quot;string&quot;:&quot;[\n \&quot;FStar.Tactics.PatternMatching.pattern\&quot;,\n \&quot;FStar.Tactics.NamedView.term\&quot;,\n \&quot;FStar.Tactics.PatternMatching.op_let_Question\&quot;,\n \&quot;FStar.Tactics.PatternMatching.bindings\&quot;,\n \&quot;Prims.list\&quot;,\n \&quot;FStar.Pervasives.Native.tuple2\&quot;,\n \&quot;FStar.Tactics.PatternMatching.varname\&quot;,\n \&quot;FStar.Tactics.PatternMatching.return\&quot;,\n \&quot;FStar.List.Tot.Base.rev\&quot;,\n \&quot;FStar.Tactics.PatternMatching.match_res\&quot;,\n \&quot;FStar.Tactics.PatternMatching.interp_pattern_aux\&quot;,\n \&quot;Prims.Nil\&quot;\n]&quot;},&quot;mutual_with&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;file_context&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;(*\n Copyright 2008-2018 Microsoft Research\n\n Licensed under the Apache License, Version 2.0 (the \&quot;License\&quot;);\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \&quot;AS IS\&quot; BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*)\n/// ==========================\n/// Pattern-matching tactics\n/// ==========================\n///\n/// :Author: Clément Pit-Claudel\n/// :Contact: clement.pitclaudel@live.com\n/// :Date: 2017-10-13\n\nmodule FStar.Tactics.PatternMatching\n\nopen FStar.Tactics.V2\n\n/// Contents\n/// ========\n///\n/// 1 Contents\n/// 2 Motivation\n/// 3 Some utility functions\n/// 4 Pattern types\n/// 5 Pattern matching exceptions\n/// 5.1 Types of exceptions\n/// 5.2 The exception monad\n/// 5.3 Liftings\n/// 6 Pattern interpretation\n/// 7 Pattern-matching problems\n/// 7.1 Definitions\n/// 7.2 Resolution\n/// 8 A DSL for pattern-matching\n/// 8.1 Pattern notations\n/// 8.2 Problem notations\n/// 8.3 Continuations\n/// 9 Putting it all together\n/// 10 Examples\n/// 10.1 Simple examples\n/// 10.2 A real-life example\n/// 11 Possible extensions\n/// 12 Notes\n///\n/// Motivation\n/// ==========\n///\n/// Suppose you have a goal of the form ``squash (a == b)``. How do you capture\n/// `a` and `b` for further inspection?\n///\n/// Here's a basic (but cumbersome!) implementation:\n\nlet fetch_eq_side () : Tac (term * term) =\n let g = cur_goal () in\n match inspect g with\n | Tv_App squash (g, _) ->\n (match inspect squash with\n | Tv_UInst squash _\n | Tv_FVar squash ->\n if fv_to_string squash = flatten_name squash_qn then\n (match inspect g with\n | Tv_App eq_type_x (y, _) ->\n (match inspect eq_type_x with\n | Tv_App eq_type (x, _) ->\n (match inspect eq_type with\n | Tv_App eq (typ, _) ->\n (match inspect eq with\n | Tv_UInst eq _\n | Tv_FVar eq ->\n if fv_to_string eq = flatten_name eq2_qn then\n (x, y)\n else fail \&quot;not an equality\&quot;\n | _ -> fail \&quot;not an app2 of fvar: \&quot;)\n | _ -> fail \&quot;not an app3\&quot;)\n | _ -> fail \&quot;not an app2\&quot;)\n | _ -> fail \&quot;not an app under squash\&quot;)\n else fail \&quot;not a squash\&quot;\n | _ -> fail \&quot;not an app of fvar at top level\&quot;)\n | _ -> fail \&quot;not an app at top level\&quot;\n\n/// …and here's how you could use it:\n\n(* let _ = *)\n(* assert_by_tactic (1 + 1 == 2) *)\n(* (fun () -> let l, r = fetch_eq_side () in *)\n(* print (term_to_string l ^ \&quot; / \&quot; ^ term_to_string r)) *)\n\n/// This file defines pattern-matching primitives that let you write the same\n/// thing like this…\n///\n/// .. code:: fstar\n///\n/// let fetch_eq_side' #a () : Tac (term * term) =\n/// gpm (fun (left right: a) (g: pm_goal (squash (left == right))) ->\n/// (quote left, quote right) <: Tac (term * term))\n///\n/// let _ =\n/// assert_by_tactic (1 + 1 == 2)\n/// (fun () -> let l, r = fetch_eq_side' #int () in\n/// print (term_to_string l ^ \&quot; / \&quot; ^ term_to_string r))\n///\n/// …or, more succinctly, like this:\n///\n/// .. code:: fstar\n///\n/// let _ =\n/// assert_by_tactic (1 + 1 == 2)\n/// (gpm (fun (left right: int) (g: pm_goal (squash (left == right))) ->\n/// let l, r = quote left, quote right in\n/// print (term_to_string l ^ \&quot; / \&quot; ^ term_to_string r) <: Tac unit))\n\n\n/// Some utility functions\n/// ======================\n///\n/// (Skip over this part on a quick read — these are just convenience functions)\n\n\n(** Ensure that tactic `t` fails. **)\nlet mustfail #a (t: unit -> Tac a) (message: string) : Tac unit =\n match trytac t with\n | Some _ -> fail message\n | None -> ()\n\n/// The following two tactics are needed because of issues with the ``Tac``\n/// effect.\n\nlet implies_intro' () : Tac unit =\n let _ = implies_intro () in ()\n\nlet repeat' #a (f: unit -> Tac a) : Tac unit =\n let _ = repeat f in ()\n\nlet and_elim' (h: binding) : Tac unit =\n and_elim (pack (Tv_Var h));\n clear h\n\n(** Use a hypothesis at type a to satisfy a goal at type squash a *)\nlet exact_hyp (a: Type0) (h: namedv) : Tac unit =\n let hd = quote (FStar.Squash.return_squash #a) in\n exact (mk_app hd [((pack (Tv_Var h)), Q_Explicit)])\n\n(** Use a hypothesis h (of type a) to satisfy a goal at type a *)\nlet exact_hyp' (h: namedv): Tac unit =\n exact (pack (Tv_Var h))\n\n/// Pattern types\n/// =============\n///\n/// Patterns are defined using a simple inductive type, mirroring the structure\n/// of ``term_view``.\n\ntype varname = string\n\ntype qn = string\n\ntype pattern =\n| PVar: name: varname -> pattern\n| PQn: qn: qn -> pattern\n| PType: pattern\n| PApp: hd: pattern -> arg: pattern -> pattern\n\nlet desc_of_pattern = function\n| PVar _ -> \&quot;a variable\&quot;\n| PQn qn -> \&quot;a constant (\&quot; ^ qn ^ \&quot;)\&quot;\n| PType -> \&quot;Type\&quot;\n| PApp _ _ -> \&quot;a function application\&quot;\n\nlet rec string_of_pattern = function\n| PVar x -> \&quot;?\&quot; ^ x\n| PQn qn -> qn\n| PType -> \&quot;Type\&quot;\n| PApp l r -> \&quot;(\&quot; ^ string_of_pattern l ^ \&quot; \&quot;\n ^ string_of_pattern r ^ \&quot;)\&quot;\n\n/// Pattern matching exceptions\n/// ===========================\n///\n/// Pattern-matching is defined as a pure, monadic function (because of issues\n/// with combining DM4F effects, but also because it helps with debugging).\n/// This section defines the exception monad.\n///\n/// Types of exceptions\n/// -------------------\n\nnoeq type match_exception =\n| NameMismatch of qn * qn\n| SimpleMismatch of pattern * term\n| NonLinearMismatch of varname * term * term\n| UnsupportedTermInPattern of term\n| IncorrectTypeInAbsPatBinder of typ\n\nlet term_head t : Tac string =\n match inspect t with\n | Tv_Var bv -> \&quot;Tv_Var\&quot;\n | Tv_BVar fv -> \&quot;Tv_BVar\&quot;\n | Tv_FVar fv -> \&quot;Tv_FVar\&quot;\n | Tv_UInst _ _ -> \&quot;Tv_UInst\&quot;\n | Tv_App f x -> \&quot;Tv_App\&quot;\n | Tv_Abs x t -> \&quot;Tv_Abs\&quot;\n | Tv_Arrow x t -> \&quot;Tv_Arrow\&quot;\n | Tv_Type _ -> \&quot;Tv_Type\&quot;\n | Tv_Refine x t -> \&quot;Tv_Refine\&quot;\n | Tv_Const cst -> \&quot;Tv_Const\&quot;\n | Tv_Uvar i t -> \&quot;Tv_Uvar\&quot;\n | Tv_Let r attrs b t1 t2 -> \&quot;Tv_Let\&quot;\n | Tv_Match t _ branches -> \&quot;Tv_Match\&quot;\n | Tv_AscribedT _ _ _ _ -> \&quot;Tv_AscribedT\&quot;\n | Tv_AscribedC _ _ _ _ -> \&quot;Tv_AscribedC\&quot;\n | Tv_Unknown -> \&quot;Tv_Unknown\&quot;\n | Tv_Unsupp -> \&quot;Tv_Unsupp\&quot;\n\nlet string_of_match_exception = function\n | NameMismatch (qn1, qn2) ->\n \&quot;Match failure (name mismatch): expecting \&quot; ^\n qn1 ^ \&quot;, found \&quot; ^ qn2\n | SimpleMismatch (pat, tm) ->\n \&quot;Match failure (sort mismatch): expecting \&quot; ^\n desc_of_pattern pat ^ \&quot;, got \&quot; ^ term_to_string tm\n | NonLinearMismatch (nm, t1, t2) ->\n \&quot;Match failure (nonlinear mismatch): variable \&quot; ^ nm ^\n \&quot; needs to match both \&quot; ^ (term_to_string t1) ^\n \&quot; and \&quot; ^ (term_to_string t2)\n | UnsupportedTermInPattern tm ->\n \&quot;Match failure (unsupported term in pattern): \&quot; ^\n term_to_string tm ^ \&quot; (\&quot; ^ term_head tm ^ \&quot;)\&quot;\n | IncorrectTypeInAbsPatBinder typ ->\n \&quot;Incorrect type in pattern-matching binder: \&quot; ^\n term_to_string typ ^ \&quot; (use one of ``var``, ``hyp …``, or ``goal …``)\&quot;\n\n/// The exception monad\n/// -------------------\n\nnoeq type match_res a =\n| Success of a\n| Failure of match_exception\n\nlet return #a (x: a) : match_res a =\n Success x\n\nlet (let?) (#a #b: Type)\n (f: match_res a)\n (g: a -> Tac (match_res b))\n : Tac (match_res b) =\n match f with\n | Success aa -> g aa\n | Failure ex -> Failure ex\n\nlet raise #a (ex: match_exception) : match_res a =\n Failure ex\n\n/// Liftings\n/// --------\n///\n/// There's a natural lifting from the exception monad into the tactic effect:\n\nlet lift_exn_tac #a #b (f: a -> match_res b) (aa: a) : Tac b =\n match f aa with\n | Success bb -> bb\n | Failure ex -> Tactics.fail (string_of_match_exception ex)\n\nlet lift_exn_tactic #a #b (f: a -> match_res b) (aa: a) : Tac b =\n match f aa with\n | Success bb -> bb\n | Failure ex -> Tactics.fail (string_of_match_exception ex)\n\n/// Pattern interpretation\n/// ======================\n///\n/// This section implement pattern-matching. This is strictly a one term, one\n/// pattern implementation — handling cases in which mutliple hypotheses match\n/// the same pattern is done later.\n\ntype bindings = list (varname * term)\nlet string_of_bindings (bindings: bindings) =\n String.concat \&quot;\\n\&quot;\n (map (fun (nm, tm) -> (\&quot;>> \&quot; ^ nm ^ \&quot;: \&quot; ^ term_to_string tm))\n bindings)\n\n(** Match a pattern against a term.\n`cur_bindings` is a list of bindings collected while matching previous parts of\nthe pattern. Returns a result in the exception monad. **)\nlet rec interp_pattern_aux (pat: pattern) (cur_bindings: bindings) (tm:term)\n : Tac (match_res bindings) =\n let interp_var (v: varname) cur_bindings tm =\n match List.Tot.Base.assoc v cur_bindings with\n | Some tm' -> if term_eq tm tm' then return cur_bindings\n else raise (NonLinearMismatch (v, tm, tm'))\n | None -> return ((v, tm) :: cur_bindings) in\n let interp_qn (qn: qn) cur_bindings tm =\n match inspect tm with\n | Tv_UInst fv _\n | Tv_FVar fv ->\n if fv_to_string fv = qn then return cur_bindings\n else raise (NameMismatch (qn, (fv_to_string fv)))\n | _ -> raise (SimpleMismatch (pat, tm)) in\n let interp_type cur_bindings tm =\n match inspect tm with\n | Tv_Type _ -> return cur_bindings\n | _ -> raise (SimpleMismatch (pat, tm)) in\n let interp_app (p_hd p_arg: (p:pattern{p << pat})) cur_bindings tm =\n match inspect tm with\n | Tv_App hd (arg, _) ->\n let? with_hd = interp_pattern_aux p_hd cur_bindings hd in\n let? with_arg = interp_pattern_aux p_arg with_hd arg in\n return with_arg\n | _ -> raise (SimpleMismatch (pat, tm)) in\n match pat with\n | PVar var -> interp_var var cur_bindings tm\n | PQn qn -> interp_qn qn cur_bindings tm\n | PType -> interp_type cur_bindings tm\n | PApp p_hd p_arg -> interp_app p_hd p_arg cur_bindings tm\n\n(** Match a pattern `pat` against a term.\nReturns a result in the exception monad. **)&quot;},&quot;interleaved&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;is_simply_typed&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;false&quot;},&quot;file_name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;FStar.Tactics.PatternMatching.fst&quot;},&quot;vconfig&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;detail_errors\&quot;: false,\n \&quot;detail_hint_replay\&quot;: false,\n \&quot;initial_fuel\&quot;: 2,\n \&quot;initial_ifuel\&quot;: 1,\n \&quot;max_fuel\&quot;: 8,\n \&quot;max_ifuel\&quot;: 2,\n \&quot;no_plugins\&quot;: false,\n \&quot;no_smt\&quot;: false,\n \&quot;no_tactics\&quot;: false,\n \&quot;quake_hi\&quot;: 1,\n \&quot;quake_keep\&quot;: false,\n \&quot;quake_lo\&quot;: 1,\n \&quot;retry\&quot;: false,\n \&quot;reuse_hint_for\&quot;: null,\n \&quot;smtencoding_elim_box\&quot;: false,\n \&quot;smtencoding_l_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_nl_arith_repr\&quot;: \&quot;boxwrap\&quot;,\n \&quot;smtencoding_valid_elim\&quot;: false,\n \&quot;smtencoding_valid_intro\&quot;: true,\n \&quot;tcnorm\&quot;: true,\n \&quot;trivial_pre_for_unannotated_effectful_fns\&quot;: true,\n \&quot;z3cliopt\&quot;: [],\n \&quot;z3refresh\&quot;: false,\n \&quot;z3rlimit\&quot;: 5,\n \&quot;z3rlimit_factor\&quot;: 1,\n \&quot;z3seed\&quot;: 0,\n \&quot;z3smtopt\&quot;: [],\n \&quot;z3version\&quot;: \&quot;4.8.5\&quot;\n}&quot;},&quot;is_simple_lemma&quot;:{&quot;kind&quot;:&quot;null&quot;},&quot;source_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;val interp_pattern: pat: pattern -> term -> Tac (match_res bindings)&quot;},&quot;proof_features&quot;:{&quot;kind&quot;:&quot;list like&quot;,&quot;value&quot;:[],&quot;string&quot;:&quot;[]&quot;},&quot;name&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;FStar.Tactics.PatternMatching.interp_pattern&quot;},&quot;source&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;file_name\&quot;: \&quot;ulib/FStar.Tactics.PatternMatching.fst\&quot;,\n \&quot;git_rev\&quot;: \&quot;f4cbb7a38d67eeb13fbdb2f4fb8a44a65cbcdc1f\&quot;,\n \&quot;git_url\&quot;: \&quot;https://github.com/FStarLang/FStar.git\&quot;,\n \&quot;project_name\&quot;: \&quot;FStar\&quot;\n}&quot;},&quot;verbose_type&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;pat: FStar.Tactics.PatternMatching.pattern -> _: FStar.Tactics.NamedView.term\n -> FStar.Tactics.Effect.Tac\n (FStar.Tactics.PatternMatching.match_res FStar.Tactics.PatternMatching.bindings)&quot;},&quot;source_range&quot;:{&quot;kind&quot;:&quot;string&quot;,&quot;value&quot;:&quot;{\n \&quot;end_col\&quot;: 43,\n \&quot;end_line\&quot;: 328,\n \&quot;start_col\&quot;: 2,\n \&quot;start_line\&quot;: 326\n}&quot;}}}],&quot;truncated&quot;:true},&quot;paginationData&quot;:{&quot;pageIndex&quot;:0,&quot;numItemsPerPage&quot;:100,&quot;numTotalItems&quot;:22779,&quot;offset&quot;:0,&quot;length&quot;:100}},&quot;jwt&quot;:&quot;eyJhbGciOiJFZERTQSJ9.eyJyZWFkIjp0cnVlLCJwZXJtaXNzaW9ucyI6eyJyZXBvLmNvbnRlbnQucmVhZCI6dHJ1ZX0sImlhdCI6MTczMjc5MDQyNCwic3ViIjoiL2RhdGFzZXRzL21pY3Jvc29mdC9GU3RhckRhdGFTZXQiLCJleHAiOjE3MzI3OTQwMjQsImlzcyI6Imh0dHBzOi8vaHVnZ2luZ2ZhY2UuY28ifQ.Fqb6EwyoiCmCp4NhDINHi8Hn0J3gPPMzeeOH2-H3ekupaC3a3Y9PozzOimE6KmebjxEvhccHNehiGqv5fgjRBQ&quot;,&quot;displayUrls&quot;:true},&quot;dataset&quot;:&quot;microsoft/FStarDataSet&quot;,&quot;isGated&quot;:false,&quot;isPrivate&quot;:false,&quot;hasParquetFormat&quot;:false,&quot;author&quot;:{&quot;avatarUrl&quot;:&quot;https://cdn-avatars.huggingface.co/v1/production/uploads/1583646260758-5e64858c87403103f9f1055d.png&quot;,&quot;fullname&quot;:&quot;Microsoft&quot;,&quot;name&quot;:&quot;microsoft&quot;,&quot;type&quot;:&quot;org&quot;,&quot;isHf&quot;:false,&quot;isMod&quot;:false,&quot;isEnterprise&quot;:false,&quot;followerCount&quot;:5413},&quot;compact&quot;:true}"><div class="overflow-hidden px-2.5 mx-auto mb-10 rounded-lg border pt-2 shadow-sm "><div class="mb-2 flex flex-wrap items-center gap-2"><div class="mr-auto flex items-center"><svg class="mr-1 flex-none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 12 12"><path fill="currentColor" d="M2.5 2h7a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-7a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1Zm0 2v2h3V4h-3Zm4 0v2h3V4h-3Zm-4 3v2h3V7h-3Zm4 0v2h3V7h-3Z"></path></svg> <div class="whitespace-nowrap font-semibold">Dataset Viewer</div> </div> <a href="/datasets/microsoft/FStarDataSet/tree/refs%2Fconvert%2Fparquet/default" class="group mr-1 text-xs text-gray-400 max-sm:hidden"><svg class="text-[.6rem] mr-1 inline -translate-y-px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path fill="currentColor" d="M12 10H6.78A11 11 0 0 1 27 16h2A13 13 0 0 0 6 7.68V4H4v8h8zm8 12h5.22A11 11 0 0 1 5 16H3a13 13 0 0 0 23 8.32V28h2v-8h-8z"></path></svg> <span class="underline decoration-gray-300 group-hover:decoration-gray-400 dark:decoration-gray-500 dark:group-hover:decoration-gray-300">Auto-converted</span> to Parquet </a> <button class="btn flex cursor-pointer items-center rounded border px-1 py-0.5 text-xs font-normal text-gray-700 shadow-sm hover:text-gray-800 hover:shadow dark:hover:text-gray-200"><svg class="mr-1.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32" style="transform: rotate(360deg);"><path d="M31 16l-7 7l-1.41-1.41L28.17 16l-5.58-5.59L24 9l7 7z" fill="currentColor"></path><path d="M1 16l7-7l1.41 1.41L3.83 16l5.58 5.59L8 23l-7-7z" fill="currentColor"></path><path d="M12.419 25.484L17.639 6l1.932.518L14.35 26z" fill="currentColor"></path></svg>API</button> <button class="btn flex cursor-pointer items-center rounded border px-1 py-0.5 text-xs font-normal text-gray-700 shadow-sm hover:text-gray-800 hover:shadow dark:hover:text-gray-200"><svg class="mr-1.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 12 12"><path d="M9.80603 2.86737H3.56107C3.37704 2.86737 3.20055 2.94048 3.07042 3.0706C2.94029 3.20073 2.86719 3.37723 2.86719 3.56126V9.80622C2.86719 9.99025 2.94029 10.1667 3.07042 10.2969C3.20055 10.427 3.37704 10.5001 3.56107 10.5001H9.80603C9.99006 10.5001 10.1666 10.427 10.2967 10.2969C10.4268 10.1667 10.4999 9.99025 10.4999 9.80622V3.56126C10.4999 3.37723 10.4268 3.20073 10.2967 3.0706C10.1666 2.94048 9.99006 2.86737 9.80603 2.86737Z" fill="currentColor" fill-opacity="0.3"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M2.40942 1.66191C2.05175 1.66191 1.7618 1.95186 1.7618 2.30953V6.76191H1.43799V2.30953C1.43799 1.77303 1.87291 1.3381 2.40942 1.3381H6.45704V1.66191H2.40942Z" fill="currentColor"></path></svg>Embed</button> <a href="/datasets/microsoft/FStarDataSet/viewer/default/train" class="btn flex items-center rounded-full border px-2 py-0.5 text-xs font-normal text-gray-700 shadow-sm hover:text-gray-800 hover:shadow dark:hover:text-gray-200"><svg class="mr-1 text-red-500" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 12 12"><path fill="currentColor" d="M2.5 2h7a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-7a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1Zm0 2v2h3V4h-3Zm4 0v2h3V4h-3Zm-4 3v2h3V7h-3Zm4 0v2h3V7h-3Z"></path></svg> <div class="hidden sm:block">Full Screen Viewer</div> <div class="block sm:hidden">Full Screen</div></a></div> <div class="-mx-2.5 flex flex-nowrap border-t "><div class="grid flex-1 overflow-hidden text-sm md:grid-cols-2 md:place-content-center"><label class="relative block flex-1 px-3 py-2 hover:bg-gray-50 dark:border-gray-850 dark:hover:bg-gray-950 md:border-r md:border-r-0 hidden"><span class="text-gray-500">Subset (1)</span> <div class="flex items-center whitespace-nowrap">default <span class="mx-2 text-gray-500">·</span> <span class="text-gray-500">32.1k rows</span> <svg class="ml-auto" width="1em" height="1em" viewBox="0 0 12 7" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L6 6L11 1" stroke="currentColor"></path></svg></div> <select class="absolute inset-0 z-10 w-full cursor-pointer border-0 bg-white text-base opacity-0"><optgroup label="Subset (1)"><option value="default" selected>default (32.1k rows)</option></optgroup></select></label> <label class="relative block flex-1 px-3 py-2 hover:bg-gray-50 dark:border-gray-850 dark:hover:bg-gray-900 md:border-r md:border-r"><div class="text-gray-500">Split (3)</div> <div class="flex items-center whitespace-nowrap">train <span class="mx-2 text-gray-500">·</span> <span class="text-gray-500">22.8k rows</span> <svg class="ml-auto" width="1em" height="1em" viewBox="0 0 12 7" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L6 6L11 1" stroke="currentColor"></path></svg></div> <select class="absolute inset-0 z-10 w-full cursor-pointer border-0 bg-white text-base opacity-0"><optgroup label="Split (3)"><option value="train" selected>train (22.8k rows)</option><option value="validation" >validation (1.54k rows)</option><option value="test" >test (7.73k rows)</option></optgroup></select></label></div> </div> <div class="relative -mx-2.5 flex items-center border-t bg-gradient-to-r text-smd dark:border-gray-900 dark:bg-gray-950 [&amp;:has(:focus)]:from-gray-50 [&amp;:has(:focus)]:to-transparent [&amp;:has(:focus)]:to-20% dark:[&amp;:has(:focus)]:from-gray-900"><form class="flex-1"><svg class="absolute left-3 top-1/2 transform -translate-y-1/2 pointer-events-none text-gray-400" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M30 28.59L22.45 21A11 11 0 1 0 21 22.45L28.59 30zM5 14a9 9 0 1 1 9 9a9 9 0 0 1-9-9z" fill="currentColor"></path></svg> <input disabled class="h-9 w-full border-none bg-transparent px-1 pl-9 pr-3 outline-none placeholder:text-gray-400 " placeholder="Search this dataset" dir="auto"></form> <div class="flex items-center gap-2 px-2 py-1"><button type="button" class="mr-2 flex items-center gap-1 rounded-md border border-yellow-200 bg-yellow-100 pl-0.5 pr-1 text-[.8rem] leading-normal text-gray-700 hover:bg-yellow-200/70 dark:border-orange-500/25 dark:bg-orange-500/20 dark:text-gray-300 dark:hover:brightness-110"><div class="rounded bg-yellow-300 px-1 font-mono text-[.7rem] font-bold text-black dark:bg-yellow-700 dark:text-gray-200">SQL </div> Console </button> </div></div> <div class="-mx-2.5 flex flex-1 flex-col overflow-hidden border-t min-h-64"> <div class="max-h-96 relative overflow-auto"><table class="w-full table-auto rounded-lg font-mono text-xs text-gray-900"><thead class="sticky left-0 right-0 top-0 z-1 bg-white align-top shadow-sm"><tr class="space-y-54 h-full min-w-fit divide-x border-b text-left"><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">effect <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>string</span><span class="italic text-gray-400 before:mx-1 before:content-['·']">classes</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><defs><clipPath id="rounded-bar"><rect x="0" y="0" width="130" height="8" rx="4"></rect></clipPath><pattern id="hatching" patternUnits="userSpaceOnUse" patternTransform="rotate(-45)" height="1" width="5"><line y1="0" class="stroke-gray-400 dark:stroke-gray-500/80" stroke-width="3" y2="1" x1="2" x2="2"></line></pattern><pattern id="hatching-faded" patternUnits="userSpaceOnUse" patternTransform="rotate(-45)" height="1" width="5"><line y1="0" class="stroke-gray-100 dark:stroke-gray-500/20" stroke-width="3" y2="1" x1="2" x2="2"></line></pattern></defs><g height="8" style="transform: translateY(20px)" clip-path="url(#rounded-bar)"><g style="transform: scaleX(1.0153846153846153) translateX(-1px)"><g><rect class="fill-indigo-500 dark:fill-indigo-600/80" x="1" y="0" width="76.05478730409588" height="8" fill-opacity="1"></rect><rect class="fill-indigo-500 dark:fill-indigo-600/80" x="79.05478730409588" y="0" width="20.54269283111638" height="8" fill-opacity="1"></rect><rect class="fill-indigo-500 dark:fill-indigo-600/80" x="101.59748013521227" y="0" width="3.393125246937969" height="8" fill-opacity="1"></rect><rect class="fill-indigo-500 dark:fill-indigo-600/80" x="106.99060538215024" y="0" width="3.193379867421748" height="8" fill-opacity="1"></rect><rect class="fill-indigo-500 dark:fill-indigo-600/80" x="112.18398524957199" y="0" width="2.9194433469423595" height="8" fill-opacity="1"></rect><rect class="fill-indigo-500 dark:fill-indigo-600/80" x="117.10342859651435" y="0" width="2.388691338513543" height="8" fill-opacity="1"></rect><rect class="fill-indigo-500 dark:fill-indigo-600/80" x="121.49211993502789" y="0" width="2.2745511216471312" height="8" fill-opacity="1"></rect></g></g></g><g style="transform: scaleX(1.0153846153846153) translateX(-1px)"><g><rect class="fill-white cursor-pointer" x="0" y="0" width="78.05478730409588" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="78.05478730409588" y="0" width="22.54269283111638" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="100.59748013521227" y="0" width="5.393125246937969" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="105.99060538215024" y="0" width="5.193379867421748" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="111.18398524957199" y="0" width="4.9194433469423595" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="116.10342859651435" y="0" width="4.388691338513543" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="120.49211993502789" y="0" width="4.274551121647131" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="124.76667105667502" y="0" width="1.3639755915536238" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="126.13064664822865" y="0" width="1.0843320602309146" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="127.21497870845957" y="0" width="0.3424206505992361" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="127.5573993590588" y="0" width="0.29105755300935077" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="127.84845691206816" y="0" width="0.21115940120286228" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="128.05961631327102" y="0" width="0.21115940120286228" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="128.27077571447387" y="0" width="0.20545239035954166" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="128.4762281048334" y="0" width="0.19403836867290047" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="128.6702664735063" y="0" width="0.19403836867290047" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="128.8643048421792" y="0" width="0.14267527108301506" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.00698011326222" y="0" width="0.13696826023969447" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.1439483735019" y="0" width="0.12555423855305325" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.26950261205496" y="0" width="0.12555423855305325" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.39505685060803" y="0" width="0.06848413011984723" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.46354098072788" y="0" width="0.045656086746564815" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.50919706747445" y="0" width="0.039949075903244216" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.5491461433777" y="0" width="0.03424206505992362" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.5833882084376" y="0" width="0.03424206505992362" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.61763027349753" y="0" width="0.03424206505992362" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.65187233855744" y="0" width="0.03424206505992362" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.68611440361735" y="0" width="0.03424206505992362" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.72035646867727" y="0" width="0.02853505421660301" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.74889152289387" y="0" width="0.02853505421660301" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.77742657711048" y="0" width="0.022828043373282408" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.80025462048377" y="0" width="0.022828043373282408" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.82308266385706" y="0" width="0.01712103252996181" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.84020369638702" y="0" width="0.01712103252996181" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.85732472891698" y="0" width="0.01712103252996181" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.87444576144694" y="0" width="0.01712103252996181" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.8915667939769" y="0" width="0.011414021686641204" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.90298081566354" y="0" width="0.011414021686641204" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.9143948373502" y="0" width="0.011414021686641204" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.92580885903683" y="0" width="0.011414021686641204" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.93722288072348" y="0" width="0.011414021686641204" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.94863690241013" y="0" width="0.011414021686641204" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.96005092409678" y="0" width="0.011414021686641204" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.97146494578342" y="0" width="0.005707010843320602" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.97717195662673" y="0" width="0.005707010843320602" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.98287896747004" y="0" width="0.005707010843320602" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.98858597831335" y="0" width="0.005707010843320602" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="129.99429298915666" y="0" width="0.005707010843320602" height="28" fill-opacity="0"></rect></g></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 max-w-full overflow-hidden text-ellipsis whitespace-nowrap">48 values</div></div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">original_source_type <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>string</span><span class="italic text-gray-400 before:mx-1 before:content-['·']">lengths</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><g><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="0" y="0" width="11.2" height="30" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="13.2" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="26.4" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="39.599999999999994" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="52.8" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="66" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="79.19999999999999" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="92.39999999999999" y="26" width="11.2" height="4" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="105.6" y="26" width="11.2" height="4" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="118.8" y="25" width="11.2" height="5" fill-opacity="1"></rect></g><rect class="fill-white dark:fill-gray-900" x="0" y="26" width="130" height="2" stroke-opacity="1"></rect><line class="stroke-gray-100 dark:stroke-gray-500/20" x1="0" y1="27.5" x2="130" y2="27.5" stroke-opacity="1"></line><g><rect class="fill-indigo-500 cursor-pointer" x="-1" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="12.2" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="25.4" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="38.599999999999994" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="51.8" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="65" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="78.19999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="91.39999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="104.6" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="117.8" y="0" width="13.2" height="30" fill-opacity="0"></rect></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 overflow-hidden text-ellipsis whitespace-nowrap" style="max-width: 60px">0</div> <div class="absolute overflow-hidden text-ellipsis whitespace-nowrap" style="right: 0px; max-width: 60px">23k</div> </div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">opens_and_abbrevs <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>list</span><span class="italic text-gray-400 before:mx-1 before:content-['·']">lengths</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><g><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="0" y="0.2940728656878733" width="11.2" height="29.705927134312127" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="13.2" y="0" width="11.2" height="30" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="26.4" y="18.857422512234912" width="11.2" height="11.14257748776509" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="39.599999999999994" y="22.471125611745514" width="11.2" height="7.528874388254486" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="52.8" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="66" y="24.987710712343663" width="11.2" height="5.012289287656335" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="79.19999999999999" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="92.39999999999999" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="105.6" y="26" width="11.2" height="4" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="118.8" y="25" width="11.2" height="5" fill-opacity="1"></rect></g><rect class="fill-white dark:fill-gray-900" x="0" y="26" width="130" height="2" stroke-opacity="1"></rect><line class="stroke-gray-100 dark:stroke-gray-500/20" x1="0" y1="27.5" x2="130" y2="27.5" stroke-opacity="1"></line><g><rect class="fill-indigo-500 cursor-pointer" x="-1" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="12.2" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="25.4" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="38.599999999999994" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="51.8" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="65" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="78.19999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="91.39999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="104.6" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="117.8" y="0" width="13.2" height="30" fill-opacity="0"></rect></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 overflow-hidden text-ellipsis whitespace-nowrap" style="max-width: 60px">2</div> <div class="absolute overflow-hidden text-ellipsis whitespace-nowrap" style="right: 0px; max-width: 60px">92</div> </div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">isa_cross_project_example <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>bool</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><defs><clipPath id="rounded-bar"><rect x="0" y="0" width="130" height="8" rx="4"></rect></clipPath><pattern id="hatching" patternUnits="userSpaceOnUse" patternTransform="rotate(-45)" height="1" width="5"><line y1="0" class="stroke-gray-400 dark:stroke-gray-500/80" stroke-width="3" y2="1" x1="2" x2="2"></line></pattern><pattern id="hatching-faded" patternUnits="userSpaceOnUse" patternTransform="rotate(-45)" height="1" width="5"><line y1="0" class="stroke-gray-100 dark:stroke-gray-500/20" stroke-width="3" y2="1" x1="2" x2="2"></line></pattern></defs><g height="8" style="transform: translateY(20px)" clip-path="url(#rounded-bar)"><g style="transform: scaleX(1.0153846153846153) translateX(-1px)"><g><rect class="fill-indigo-500 dark:fill-indigo-600/80" x="1" y="0" width="128" height="8" fill-opacity="1"></rect></g></g></g><g style="transform: scaleX(1.0153846153846153) translateX(-1px)"><g><rect class="fill-white cursor-pointer" x="0" y="0" width="130" height="28" fill-opacity="0"></rect></g></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 max-w-full overflow-hidden text-ellipsis whitespace-nowrap">1 class</div></div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">source_definition <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>string</span><span class="italic text-gray-400 before:mx-1 before:content-['·']">lengths</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><g><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="0" y="0" width="11.2" height="30" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="13.2" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="26.4" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="39.599999999999994" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="52.8" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="66" y="26" width="11.2" height="4" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="79.19999999999999" y="26" width="11.2" height="4" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="92.39999999999999" y="26" width="11.2" height="4" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="105.6" y="26" width="11.2" height="4" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="118.8" y="25" width="11.2" height="5" fill-opacity="1"></rect></g><rect class="fill-white dark:fill-gray-900" x="0" y="26" width="130" height="2" stroke-opacity="1"></rect><line class="stroke-gray-100 dark:stroke-gray-500/20" x1="0" y1="27.5" x2="130" y2="27.5" stroke-opacity="1"></line><g><rect class="fill-indigo-500 cursor-pointer" x="-1" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="12.2" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="25.4" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="38.599999999999994" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="51.8" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="65" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="78.19999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="91.39999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="104.6" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="117.8" y="0" width="13.2" height="30" fill-opacity="0"></rect></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 overflow-hidden text-ellipsis whitespace-nowrap" style="max-width: 60px">9</div> <div class="absolute overflow-hidden text-ellipsis whitespace-nowrap" style="right: 0px; max-width: 60px">57.9k</div> </div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">partial_definition <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>string</span><span class="italic text-gray-400 before:mx-1 before:content-['·']">lengths</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><g><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="0" y="0" width="11.2" height="30" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="13.2" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="26.4" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="39.599999999999994" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="52.8" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="66" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="79.19999999999999" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="92.39999999999999" y="26" width="11.2" height="4" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="105.6" y="26" width="11.2" height="4" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="118.8" y="25" width="11.2" height="5" fill-opacity="1"></rect></g><rect class="fill-white dark:fill-gray-900" x="0" y="26" width="130" height="2" stroke-opacity="1"></rect><line class="stroke-gray-100 dark:stroke-gray-500/20" x1="0" y1="27.5" x2="130" y2="27.5" stroke-opacity="1"></line><g><rect class="fill-indigo-500 cursor-pointer" x="-1" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="12.2" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="25.4" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="38.599999999999994" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="51.8" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="65" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="78.19999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="91.39999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="104.6" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="117.8" y="0" width="13.2" height="30" fill-opacity="0"></rect></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 overflow-hidden text-ellipsis whitespace-nowrap" style="max-width: 60px">7</div> <div class="absolute overflow-hidden text-ellipsis whitespace-nowrap" style="right: 0px; max-width: 60px">23.3k</div> </div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">is_div <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>bool</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><defs><clipPath id="rounded-bar"><rect x="0" y="0" width="130" height="8" rx="4"></rect></clipPath><pattern id="hatching" patternUnits="userSpaceOnUse" patternTransform="rotate(-45)" height="1" width="5"><line y1="0" class="stroke-gray-400 dark:stroke-gray-500/80" stroke-width="3" y2="1" x1="2" x2="2"></line></pattern><pattern id="hatching-faded" patternUnits="userSpaceOnUse" patternTransform="rotate(-45)" height="1" width="5"><line y1="0" class="stroke-gray-100 dark:stroke-gray-500/20" stroke-width="3" y2="1" x1="2" x2="2"></line></pattern></defs><g height="8" style="transform: translateY(20px)" clip-path="url(#rounded-bar)"><g style="transform: scaleX(1.0153846153846153) translateX(-1px)"><g><rect class="fill-indigo-500 dark:fill-indigo-600/80" x="1" y="0" width="112.53400061460117" height="8" fill-opacity="1"></rect><rect class="fill-indigo-500 dark:fill-indigo-600/80" x="115.53400061460117" y="0" width="13.465999385398833" height="8" fill-opacity="1"></rect></g></g></g><g style="transform: scaleX(1.0153846153846153) translateX(-1px)"><g><rect class="fill-white cursor-pointer" x="0" y="0" width="114.53400061460117" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="114.53400061460117" y="0" width="15.465999385398833" height="28" fill-opacity="0"></rect></g></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 max-w-full overflow-hidden text-ellipsis whitespace-nowrap">2 classes</div></div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">is_type <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>null</span></div></div> <div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">is_proof <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>bool</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><defs><clipPath id="rounded-bar"><rect x="0" y="0" width="130" height="8" rx="4"></rect></clipPath><pattern id="hatching" patternUnits="userSpaceOnUse" patternTransform="rotate(-45)" height="1" width="5"><line y1="0" class="stroke-gray-400 dark:stroke-gray-500/80" stroke-width="3" y2="1" x1="2" x2="2"></line></pattern><pattern id="hatching-faded" patternUnits="userSpaceOnUse" patternTransform="rotate(-45)" height="1" width="5"><line y1="0" class="stroke-gray-100 dark:stroke-gray-500/20" stroke-width="3" y2="1" x1="2" x2="2"></line></pattern></defs><g height="8" style="transform: translateY(20px)" clip-path="url(#rounded-bar)"><g style="transform: scaleX(1.0153846153846153) translateX(-1px)"><g><rect class="fill-indigo-500 dark:fill-indigo-600/80" x="1" y="0" width="105.16054260503095" height="8" fill-opacity="1"></rect><rect class="fill-indigo-500 dark:fill-indigo-600/80" x="108.16054260503095" y="0" width="20.839457394969052" height="8" fill-opacity="1"></rect></g></g></g><g style="transform: scaleX(1.0153846153846153) translateX(-1px)"><g><rect class="fill-white cursor-pointer" x="0" y="0" width="107.16054260503095" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="107.16054260503095" y="0" width="22.839457394969052" height="28" fill-opacity="0"></rect></g></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 max-w-full overflow-hidden text-ellipsis whitespace-nowrap">2 classes</div></div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">completed_definiton <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>string</span><span class="italic text-gray-400 before:mx-1 before:content-['·']">lengths</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><g><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="0" y="0" width="11.2" height="30" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="13.2" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="26.4" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="39.599999999999994" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="52.8" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="66" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="79.19999999999999" y="26" width="11.2" height="4" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="92.39999999999999" y="26" width="11.2" height="4" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="105.6" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="118.8" y="25" width="11.2" height="5" fill-opacity="1"></rect></g><rect class="fill-white dark:fill-gray-900" x="0" y="26" width="130" height="2" stroke-opacity="1"></rect><line class="stroke-gray-100 dark:stroke-gray-500/20" x1="0" y1="27.5" x2="130" y2="27.5" stroke-opacity="1"></line><g><rect class="fill-indigo-500 cursor-pointer" x="-1" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="12.2" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="25.4" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="38.599999999999994" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="51.8" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="65" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="78.19999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="91.39999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="104.6" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="117.8" y="0" width="13.2" height="30" fill-opacity="0"></rect></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 overflow-hidden text-ellipsis whitespace-nowrap" style="max-width: 60px">1</div> <div class="absolute overflow-hidden text-ellipsis whitespace-nowrap" style="right: 0px; max-width: 60px">250k</div> </div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">dependencies <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>dict</span></div></div> <div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">effect_flags <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>sequence</span><span class="italic text-gray-400 before:mx-1 before:content-['·']">lengths</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><g><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="0" y="20.42867250857236" width="42" height="9.571327491427638" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="44" y="0" width="42" height="30" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="88" y="25" width="42" height="5" fill-opacity="1"></rect></g><rect class="fill-white dark:fill-gray-900" x="0" y="26" width="130" height="2" stroke-opacity="1"></rect><line class="stroke-gray-100 dark:stroke-gray-500/20" x1="0" y1="27.5" x2="130" y2="27.5" stroke-opacity="1"></line><g><rect class="fill-indigo-500 cursor-pointer" x="-1" y="0" width="44" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="43" y="0" width="44" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="87" y="0" width="44" height="30" fill-opacity="0"></rect></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 overflow-hidden text-ellipsis whitespace-nowrap" style="max-width: 60px">0</div> <div class="absolute overflow-hidden text-ellipsis whitespace-nowrap" style="right: 0px; max-width: 60px">2</div> </div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">ideal_premises <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>sequence</span><span class="italic text-gray-400 before:mx-1 before:content-['·']">lengths</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><g><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="0" y="0" width="11.2" height="30" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="13.2" y="20.342958096394852" width="11.2" height="9.657041903605146" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="26.4" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="39.599999999999994" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="52.8" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="66" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="79.19999999999999" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="92.39999999999999" y="26" width="11.2" height="4" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="105.6" y="26" width="11.2" height="4" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="118.8" y="25" width="11.2" height="5" fill-opacity="1"></rect></g><rect class="fill-white dark:fill-gray-900" x="0" y="26" width="130" height="2" stroke-opacity="1"></rect><line class="stroke-gray-100 dark:stroke-gray-500/20" x1="0" y1="27.5" x2="130" y2="27.5" stroke-opacity="1"></line><g><rect class="fill-indigo-500 cursor-pointer" x="-1" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="12.2" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="25.4" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="38.599999999999994" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="51.8" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="65" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="78.19999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="91.39999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="104.6" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="117.8" y="0" width="13.2" height="30" fill-opacity="0"></rect></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 overflow-hidden text-ellipsis whitespace-nowrap" style="max-width: 60px">0</div> <div class="absolute overflow-hidden text-ellipsis whitespace-nowrap" style="right: 0px; max-width: 60px">236</div> </div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">mutual_with <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>sequence</span><span class="italic text-gray-400 before:mx-1 before:content-['·']">lengths</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><g><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="0" y="0" width="20" height="30" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="22" y="25" width="20" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="44" y="25" width="20" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="66" y="26" width="20" height="4" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="88" y="26" width="20" height="4" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="110" y="25" width="20" height="5" fill-opacity="1"></rect></g><rect class="fill-white dark:fill-gray-900" x="0" y="26" width="130" height="2" stroke-opacity="1"></rect><line class="stroke-gray-100 dark:stroke-gray-500/20" x1="0" y1="27.5" x2="130" y2="27.5" stroke-opacity="1"></line><g><rect class="fill-indigo-500 cursor-pointer" x="-1" y="0" width="22" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="21" y="0" width="22" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="43" y="0" width="22" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="65" y="0" width="22" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="87" y="0" width="22" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="109" y="0" width="22" height="30" fill-opacity="0"></rect></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 overflow-hidden text-ellipsis whitespace-nowrap" style="max-width: 60px">0</div> <div class="absolute overflow-hidden text-ellipsis whitespace-nowrap" style="right: 0px; max-width: 60px">11</div> </div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">file_context <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>string</span><span class="italic text-gray-400 before:mx-1 before:content-['·']">lengths</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><g><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="0" y="0" width="11.2" height="30" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="13.2" y="24.709989564557443" width="11.2" height="5.290010435442557" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="26.4" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="39.599999999999994" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="52.8" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="66" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="79.19999999999999" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="92.39999999999999" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="105.6" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="118.8" y="25" width="11.2" height="5" fill-opacity="1"></rect></g><rect class="fill-white dark:fill-gray-900" x="0" y="26" width="130" height="2" stroke-opacity="1"></rect><line class="stroke-gray-100 dark:stroke-gray-500/20" x1="0" y1="27.5" x2="130" y2="27.5" stroke-opacity="1"></line><g><rect class="fill-indigo-500 cursor-pointer" x="-1" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="12.2" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="25.4" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="38.599999999999994" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="51.8" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="65" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="78.19999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="91.39999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="104.6" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="117.8" y="0" width="13.2" height="30" fill-opacity="0"></rect></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 overflow-hidden text-ellipsis whitespace-nowrap" style="max-width: 60px">0</div> <div class="absolute overflow-hidden text-ellipsis whitespace-nowrap" style="right: 0px; max-width: 60px">407k</div> </div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">interleaved <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>bool</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><defs><clipPath id="rounded-bar"><rect x="0" y="0" width="130" height="8" rx="4"></rect></clipPath><pattern id="hatching" patternUnits="userSpaceOnUse" patternTransform="rotate(-45)" height="1" width="5"><line y1="0" class="stroke-gray-400 dark:stroke-gray-500/80" stroke-width="3" y2="1" x1="2" x2="2"></line></pattern><pattern id="hatching-faded" patternUnits="userSpaceOnUse" patternTransform="rotate(-45)" height="1" width="5"><line y1="0" class="stroke-gray-100 dark:stroke-gray-500/20" stroke-width="3" y2="1" x1="2" x2="2"></line></pattern></defs><g height="8" style="transform: translateY(20px)" clip-path="url(#rounded-bar)"><g style="transform: scaleX(1.0153846153846153) translateX(-1px)"><g><rect class="fill-indigo-500 dark:fill-indigo-600/80" x="1" y="0" width="128" height="8" fill-opacity="1"></rect></g></g></g><g style="transform: scaleX(1.0153846153846153) translateX(-1px)"><g><rect class="fill-white cursor-pointer" x="0" y="0" width="130" height="28" fill-opacity="0"></rect></g></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 max-w-full overflow-hidden text-ellipsis whitespace-nowrap">1 class</div></div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">is_simply_typed <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>bool</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><defs><clipPath id="rounded-bar"><rect x="0" y="0" width="130" height="8" rx="4"></rect></clipPath><pattern id="hatching" patternUnits="userSpaceOnUse" patternTransform="rotate(-45)" height="1" width="5"><line y1="0" class="stroke-gray-400 dark:stroke-gray-500/80" stroke-width="3" y2="1" x1="2" x2="2"></line></pattern><pattern id="hatching-faded" patternUnits="userSpaceOnUse" patternTransform="rotate(-45)" height="1" width="5"><line y1="0" class="stroke-gray-100 dark:stroke-gray-500/20" stroke-width="3" y2="1" x1="2" x2="2"></line></pattern></defs><g height="8" style="transform: translateY(20px)" clip-path="url(#rounded-bar)"><g style="transform: scaleX(1.0153846153846153) translateX(-1px)"><g><rect class="fill-indigo-500 dark:fill-indigo-600/80" x="1" y="0" width="89.51191887264585" height="8" fill-opacity="1"></rect><rect class="fill-indigo-500 dark:fill-indigo-600/80" x="92.51191887264585" y="0" width="36.48808112735414" height="8" fill-opacity="1"></rect></g></g></g><g style="transform: scaleX(1.0153846153846153) translateX(-1px)"><g><rect class="fill-white cursor-pointer" x="0" y="0" width="91.51191887264585" height="28" fill-opacity="0"></rect><rect class="fill-white cursor-pointer" x="91.51191887264585" y="0" width="38.48808112735414" height="28" fill-opacity="0"></rect></g></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 max-w-full overflow-hidden text-ellipsis whitespace-nowrap">2 classes</div></div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">file_name <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>string</span><span class="italic text-gray-400 before:mx-1 before:content-['·']">lengths</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><g><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="0" y="25" width="12.666666666666666" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="14.666666666666666" y="22.265331321168887" width="12.666666666666666" height="7.734668678831115" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="29.333333333333332" y="10.16243654822335" width="12.666666666666666" height="19.83756345177665" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="44" y="0" width="12.666666666666666" height="30" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="58.666666666666664" y="4.776238167101113" width="12.666666666666666" height="25.223761832898887" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="73.33333333333333" y="16.158595143366718" width="12.666666666666666" height="13.841404856633282" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="88" y="22.993003155439702" width="12.666666666666666" height="7.006996844560296" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="102.66666666666666" y="25" width="12.666666666666666" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="117.33333333333333" y="25" width="12.666666666666666" height="5" fill-opacity="1"></rect></g><rect class="fill-white dark:fill-gray-900" x="0" y="26" width="130" height="2" stroke-opacity="1"></rect><line class="stroke-gray-100 dark:stroke-gray-500/20" x1="0" y1="27.5" x2="130" y2="27.5" stroke-opacity="1"></line><g><rect class="fill-indigo-500 cursor-pointer" x="-1" y="0" width="14.666666666666666" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="13.666666666666666" y="0" width="14.666666666666666" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="28.333333333333332" y="0" width="14.666666666666666" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="43" y="0" width="14.666666666666666" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="57.666666666666664" y="0" width="14.666666666666666" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="72.33333333333333" y="0" width="14.666666666666666" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="87" y="0" width="14.666666666666666" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="101.66666666666666" y="0" width="14.666666666666666" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="116.33333333333333" y="0" width="14.666666666666666" height="30" fill-opacity="0"></rect></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 overflow-hidden text-ellipsis whitespace-nowrap" style="max-width: 60px">5</div> <div class="absolute overflow-hidden text-ellipsis whitespace-nowrap" style="right: 0px; max-width: 60px">48</div> </div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">vconfig <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>dict</span></div></div> <div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">is_simple_lemma <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>null</span></div></div> <div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">source_type <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>string</span><span class="italic text-gray-400 before:mx-1 before:content-['·']">lengths</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><g><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="0" y="0" width="11.2" height="30" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="13.2" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="26.4" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="39.599999999999994" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="52.8" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="66" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="79.19999999999999" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="92.39999999999999" y="26" width="11.2" height="4" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="105.6" y="26" width="11.2" height="4" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="118.8" y="25" width="11.2" height="5" fill-opacity="1"></rect></g><rect class="fill-white dark:fill-gray-900" x="0" y="26" width="130" height="2" stroke-opacity="1"></rect><line class="stroke-gray-100 dark:stroke-gray-500/20" x1="0" y1="27.5" x2="130" y2="27.5" stroke-opacity="1"></line><g><rect class="fill-indigo-500 cursor-pointer" x="-1" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="12.2" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="25.4" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="38.599999999999994" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="51.8" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="65" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="78.19999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="91.39999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="104.6" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="117.8" y="0" width="13.2" height="30" fill-opacity="0"></rect></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 overflow-hidden text-ellipsis whitespace-nowrap" style="max-width: 60px">10</div> <div class="absolute overflow-hidden text-ellipsis whitespace-nowrap" style="right: 0px; max-width: 60px">23k</div> </div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">proof_features <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>sequence</span><span class="italic text-gray-400 before:mx-1 before:content-['·']">lengths</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><g><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="0" y="0" width="64" height="30" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="66" y="24.25976580796253" width="64" height="5.74023419203747" fill-opacity="1"></rect></g><rect class="fill-white dark:fill-gray-900" x="0" y="26" width="130" height="2" stroke-opacity="1"></rect><line class="stroke-gray-100 dark:stroke-gray-500/20" x1="0" y1="27.5" x2="130" y2="27.5" stroke-opacity="1"></line><g><rect class="fill-indigo-500 cursor-pointer" x="-1" y="0" width="66" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="65" y="0" width="66" height="30" fill-opacity="0"></rect></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 overflow-hidden text-ellipsis whitespace-nowrap" style="max-width: 60px">0</div> <div class="absolute overflow-hidden text-ellipsis whitespace-nowrap" style="right: 0px; max-width: 60px">1</div> </div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">name <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>string</span><span class="italic text-gray-400 before:mx-1 before:content-['·']">lengths</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><g><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="0" y="24.03235536057033" width="11.2" height="5.967644639429668" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="13.2" y="15.156567041403894" width="11.2" height="14.843432958596106" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="26.4" y="0" width="11.2" height="30" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="39.599999999999994" y="2.0888401425829457" width="11.2" height="27.911159857417054" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="52.8" y="14.040855497669318" width="11.2" height="15.959144502330682" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="66" y="20.948999177406087" width="11.2" height="9.051000822593913" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="79.19999999999999" y="24.90924047162051" width="11.2" height="5.09075952837949" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="92.39999999999999" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="105.6" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="118.8" y="25" width="11.2" height="5" fill-opacity="1"></rect></g><rect class="fill-white dark:fill-gray-900" x="0" y="26" width="130" height="2" stroke-opacity="1"></rect><line class="stroke-gray-100 dark:stroke-gray-500/20" x1="0" y1="27.5" x2="130" y2="27.5" stroke-opacity="1"></line><g><rect class="fill-indigo-500 cursor-pointer" x="-1" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="12.2" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="25.4" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="38.599999999999994" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="51.8" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="65" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="78.19999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="91.39999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="104.6" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="117.8" y="0" width="13.2" height="30" fill-opacity="0"></rect></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 overflow-hidden text-ellipsis whitespace-nowrap" style="max-width: 60px">8</div> <div class="absolute overflow-hidden text-ellipsis whitespace-nowrap" style="right: 0px; max-width: 60px">95</div> </div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">source <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>dict</span></div></div> <div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">verbose_type <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>string</span><span class="italic text-gray-400 before:mx-1 before:content-['·']">lengths</span></div></div> <div><div class="" style="height: 40px; padding-top: 2px"><svg width="130" height="28"><g><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="0" y="0" width="11.2" height="30" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="13.2" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="26.4" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="39.599999999999994" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="52.8" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="66" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="79.19999999999999" y="26" width="11.2" height="4" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="92.39999999999999" y="26" width="11.2" height="4" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="105.6" y="25" width="11.2" height="5" fill-opacity="1"></rect><rect class="fill-gray-400 dark:fill-gray-500/80" rx="2" x="118.8" y="25" width="11.2" height="5" fill-opacity="1"></rect></g><rect class="fill-white dark:fill-gray-900" x="0" y="26" width="130" height="2" stroke-opacity="1"></rect><line class="stroke-gray-100 dark:stroke-gray-500/20" x1="0" y1="27.5" x2="130" y2="27.5" stroke-opacity="1"></line><g><rect class="fill-indigo-500 cursor-pointer" x="-1" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="12.2" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="25.4" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="38.599999999999994" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="51.8" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="65" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="78.19999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="91.39999999999999" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="104.6" y="0" width="13.2" height="30" fill-opacity="0"></rect><rect class="fill-indigo-500 cursor-pointer" x="117.8" y="0" width="13.2" height="30" fill-opacity="0"></rect></g></svg> <div class="relative font-light text-gray-400" style="height: 10px; width: 130px;"><div class="absolute left-0 overflow-hidden text-ellipsis whitespace-nowrap" style="max-width: 60px">1</div> <div class="absolute overflow-hidden text-ellipsis whitespace-nowrap" style="right: 0px; max-width: 60px">7.42k</div> </div></div></div></div></th><th class="h-full max-w-sm p-2 text-left "><div class="flex h-full flex-col flex-nowrap justify-between"><div><div class="flex items-center justify-between">source_range <form class="flex flex-col"><button id="asc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="-rotate-180 transform text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button> <button id="desc" class="-mr-1 ml-2 h-[0.4rem] w-[0.8rem] transition ease-in-out"><svg class="text-gray-300 hover:text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 64 256 128" fill="currentColor" aria-hidden="true"><path d="M213.65674,101.657l-80,79.99976a7.99945,7.99945,0,0,1-11.31348,0l-80-79.99976A8,8,0,0,1,48,88H208a8,8,0,0,1,5.65674,13.657Z"></path></svg></button></form></div> <div class="mb-2 whitespace-nowrap text-xs font-normal text-gray-500"><span>dict</span></div></div> <div></div></div></th></tr></thead> <tbody class="h-16 overflow-scroll"><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="0"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Prims.Tot</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val aes128_key_expansion : normal lowstar_key128_t</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": true, "full_module": "Vale.AES.X64.AES", "short_module": "AE" }, { "abbrev": false, "full_module": "Vale.AES.AES_s", "short_module": null }, { "abbrev": true, "full_module": "Vale.X64.Machine_s", "short_module": "MS" }, { "abbrev": true, "full_module": "Vale.X64.State", "short_module": "VS" }, { "abbrev": false, "full_module": "Vale.X64.MemoryAdapters", "short_module": null }, { "abbrev": true, "full_module": "Vale.AsLowStar.Wrapper", "short_module": "W" }, { "abbrev": true, "full_module": "Vale.Interop.Assumptions", "short_module": "IA" }, { "abbrev": true, "full_module": "Vale.X64.Decls", "short_module": "V" }, { "abbrev": true, "full_module": "Vale.X64.Memory", "short_module": "ME" }, { "abbrev": true, "full_module": "Vale.AsLowStar.LowStarSig", "short_module": "LSig" }, { "abbrev": true, "full_module": "Vale.AsLowStar.ValeSig", "short_module": "VSig" }, { "abbrev": true, "full_module": "Vale.Interop.X64", "short_module": "IX64" }, { "abbrev": false, "full_module": "Vale.Interop.Base", "short_module": null }, { "abbrev": false, "full_module": "Vale.Def.Types_s", "short_module": null }, { "abbrev": true, "full_module": "LowStar.BufferView.Up", "short_module": "UV" }, { "abbrev": true, "full_module": "LowStar.BufferView.Down", "short_module": "DV" }, { "abbrev": false, "full_module": "FStar.Mul", "short_module": null }, { "abbrev": true, "full_module": "FStar.HyperStack", "short_module": "HS" }, { "abbrev": true, "full_module": "LowStar.Buffer", "short_module": "B" }, { "abbrev": false, "full_module": "FStar.HyperStack.ST", "short_module": null }, { "abbrev": false, "full_module": "Vale.Stdcalls.X64", "short_module": null }, { "abbrev": false, "full_module": "Vale.Stdcalls.X64", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let aes128_key_expansion //: normal lowstar_key128_t = as_normal_t #lowstar_key128_t lowstar_key128</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val aes128_key_expansion : normal lowstar_key128_t let aes128_key_expansion =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">as_normal_t #lowstar_key128_t lowstar_key128</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Vale.Stdcalls.X64.Aes.fst.checked", "dependencies": [ "Vale.X64.State.fsti.checked", "Vale.X64.MemoryAdapters.fsti.checked", "Vale.X64.Memory.fsti.checked", "Vale.X64.Machine_s.fst.checked", "Vale.X64.Decls.fsti.checked", "Vale.Interop.X64.fsti.checked", "Vale.Interop.Base.fst.checked", "Vale.Interop.Assumptions.fst.checked", "Vale.Def.Types_s.fst.checked", "Vale.AsLowStar.Wrapper.fsti.checked", "Vale.AsLowStar.ValeSig.fst.checked", "Vale.AsLowStar.LowStarSig.fst.checked", "prims.fst.checked", "LowStar.BufferView.Up.fsti.checked", "LowStar.BufferView.Down.fsti.checked", "LowStar.Buffer.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.Mul.fst.checked", "FStar.List.fst.checked", "FStar.HyperStack.ST.fsti.checked", "FStar.HyperStack.fst.checked" ], "interface_file": true, "source_file": "Vale.Stdcalls.X64.Aes.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "total" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "Vale.Stdcalls.X64.Aes.as_normal_t", "Vale.Stdcalls.X64.Aes.lowstar_key128_t", "Vale.Stdcalls.X64.Aes.lowstar_key128" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Vale.Stdcalls.X64.Aes open FStar.Mul open FStar.HyperStack.ST module HS = FStar.HyperStack module B = LowStar.Buffer module DV = LowStar.BufferView.Down module UV = LowStar.BufferView.Up open Vale.Def.Types_s open Vale.Interop.Base module IX64 = Vale.Interop.X64 module VSig = Vale.AsLowStar.ValeSig module LSig = Vale.AsLowStar.LowStarSig module ME = Vale.X64.Memory module V = Vale.X64.Decls module IA = Vale.Interop.Assumptions module W = Vale.AsLowStar.Wrapper open Vale.X64.MemoryAdapters module VS = Vale.X64.State module MS = Vale.X64.Machine_s let lowstar_key128 : lowstar_key128_t = assert_norm (List.length dom + List.length ([]&lt;:list arg) &lt;= 4); IX64.wrap_weak_stdcall code_key128 dom (W.mk_prediction code_key128 dom [] (key128_lemma code_key128 IA.win))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Stdcalls.X64.Aes.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 2, "initial_ifuel": 0, "max_fuel": 1, "max_ifuel": 1, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": true, "smtencoding_l_arith_repr": "native", "smtencoding_nl_arith_repr": "wrapped", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": false, "z3cliopt": [ "smt.arith.nl=false", "smt.QI.EAGER_THRESHOLD=100", "smt.CASE_SPLIT=3" ], "z3refresh": false, "z3rlimit": 5, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val aes128_key_expansion : normal lowstar_key128_t</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Stdcalls.X64.Aes.aes128_key_expansion</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "vale/code/arch/x64/interop/Vale.Stdcalls.X64.Aes.fst", "git_rev": "12c5e9539c7e3c366c26409d3b86493548c4483e", "git_url": "https://github.com/hacl-star/hacl-star.git", "project_name": "hacl-star" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Interop.Base.normal Vale.Stdcalls.X64.Aes.lowstar_key128_t</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 48, "end_line": 31, "start_col": 4, "start_line": 31 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="1"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Prims.Tot</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val aes256_key_expansion : normal lowstar_key256_t</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": true, "full_module": "Vale.AES.X64.AES", "short_module": "AE" }, { "abbrev": false, "full_module": "Vale.AES.AES_s", "short_module": null }, { "abbrev": true, "full_module": "Vale.X64.Machine_s", "short_module": "MS" }, { "abbrev": true, "full_module": "Vale.X64.State", "short_module": "VS" }, { "abbrev": false, "full_module": "Vale.X64.MemoryAdapters", "short_module": null }, { "abbrev": true, "full_module": "Vale.AsLowStar.Wrapper", "short_module": "W" }, { "abbrev": true, "full_module": "Vale.Interop.Assumptions", "short_module": "IA" }, { "abbrev": true, "full_module": "Vale.X64.Decls", "short_module": "V" }, { "abbrev": true, "full_module": "Vale.X64.Memory", "short_module": "ME" }, { "abbrev": true, "full_module": "Vale.AsLowStar.LowStarSig", "short_module": "LSig" }, { "abbrev": true, "full_module": "Vale.AsLowStar.ValeSig", "short_module": "VSig" }, { "abbrev": true, "full_module": "Vale.Interop.X64", "short_module": "IX64" }, { "abbrev": false, "full_module": "Vale.Interop.Base", "short_module": null }, { "abbrev": false, "full_module": "Vale.Def.Types_s", "short_module": null }, { "abbrev": true, "full_module": "LowStar.BufferView.Up", "short_module": "UV" }, { "abbrev": true, "full_module": "LowStar.BufferView.Down", "short_module": "DV" }, { "abbrev": false, "full_module": "FStar.Mul", "short_module": null }, { "abbrev": true, "full_module": "FStar.HyperStack", "short_module": "HS" }, { "abbrev": true, "full_module": "LowStar.Buffer", "short_module": "B" }, { "abbrev": false, "full_module": "FStar.HyperStack.ST", "short_module": null }, { "abbrev": false, "full_module": "Vale.Stdcalls.X64", "short_module": null }, { "abbrev": false, "full_module": "Vale.Stdcalls.X64", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let aes256_key_expansion //: normal lowstar_key256_t = as_normal_t #lowstar_key256_t lowstar_key256</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val aes256_key_expansion : normal lowstar_key256_t let aes256_key_expansion =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">as_normal_t #lowstar_key256_t lowstar_key256</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Vale.Stdcalls.X64.Aes.fst.checked", "dependencies": [ "Vale.X64.State.fsti.checked", "Vale.X64.MemoryAdapters.fsti.checked", "Vale.X64.Memory.fsti.checked", "Vale.X64.Machine_s.fst.checked", "Vale.X64.Decls.fsti.checked", "Vale.Interop.X64.fsti.checked", "Vale.Interop.Base.fst.checked", "Vale.Interop.Assumptions.fst.checked", "Vale.Def.Types_s.fst.checked", "Vale.AsLowStar.Wrapper.fsti.checked", "Vale.AsLowStar.ValeSig.fst.checked", "Vale.AsLowStar.LowStarSig.fst.checked", "prims.fst.checked", "LowStar.BufferView.Up.fsti.checked", "LowStar.BufferView.Down.fsti.checked", "LowStar.Buffer.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.Mul.fst.checked", "FStar.List.fst.checked", "FStar.HyperStack.ST.fsti.checked", "FStar.HyperStack.fst.checked" ], "interface_file": true, "source_file": "Vale.Stdcalls.X64.Aes.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "total" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "Vale.Stdcalls.X64.Aes.as_normal_t", "Vale.Stdcalls.X64.Aes.lowstar_key256_t", "Vale.Stdcalls.X64.Aes.lowstar_key256" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Vale.Stdcalls.X64.Aes open FStar.Mul open FStar.HyperStack.ST module HS = FStar.HyperStack module B = LowStar.Buffer module DV = LowStar.BufferView.Down module UV = LowStar.BufferView.Up open Vale.Def.Types_s open Vale.Interop.Base module IX64 = Vale.Interop.X64 module VSig = Vale.AsLowStar.ValeSig module LSig = Vale.AsLowStar.LowStarSig module ME = Vale.X64.Memory module V = Vale.X64.Decls module IA = Vale.Interop.Assumptions module W = Vale.AsLowStar.Wrapper open Vale.X64.MemoryAdapters module VS = Vale.X64.State module MS = Vale.X64.Machine_s let lowstar_key128 : lowstar_key128_t = assert_norm (List.length dom + List.length ([]&lt;:list arg) &lt;= 4); IX64.wrap_weak_stdcall code_key128 dom (W.mk_prediction code_key128 dom [] (key128_lemma code_key128 IA.win)) let aes128_key_expansion //: normal lowstar_key128_t = as_normal_t #lowstar_key128_t lowstar_key128 let lowstar_key256 : lowstar_key256_t = assert_norm (List.length dom + List.length ([]&lt;:list arg) &lt;= 4); IX64.wrap_weak_stdcall code_key256 dom (W.mk_prediction code_key256 dom [] (key256_lemma code_key256 IA.win))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Stdcalls.X64.Aes.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 2, "initial_ifuel": 0, "max_fuel": 1, "max_ifuel": 1, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": true, "smtencoding_l_arith_repr": "native", "smtencoding_nl_arith_repr": "wrapped", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": false, "z3cliopt": [ "smt.arith.nl=false", "smt.QI.EAGER_THRESHOLD=100", "smt.CASE_SPLIT=3" ], "z3refresh": false, "z3rlimit": 5, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val aes256_key_expansion : normal lowstar_key256_t</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Stdcalls.X64.Aes.aes256_key_expansion</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "vale/code/arch/x64/interop/Vale.Stdcalls.X64.Aes.fst", "git_rev": "12c5e9539c7e3c366c26409d3b86493548c4483e", "git_url": "https://github.com/hacl-star/hacl-star.git", "project_name": "hacl-star" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Interop.Base.normal Vale.Stdcalls.X64.Aes.lowstar_key256_t</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 48, "end_line": 41, "start_col": 4, "start_line": 41 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="2"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Prims.Tot</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val lowstar_key128:lowstar_key128_t</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": true, "full_module": "Vale.X64.Machine_s", "short_module": "MS" }, { "abbrev": true, "full_module": "Vale.X64.State", "short_module": "VS" }, { "abbrev": false, "full_module": "Vale.X64.MemoryAdapters", "short_module": null }, { "abbrev": true, "full_module": "Vale.AsLowStar.Wrapper", "short_module": "W" }, { "abbrev": true, "full_module": "Vale.Interop.Assumptions", "short_module": "IA" }, { "abbrev": true, "full_module": "Vale.X64.Decls", "short_module": "V" }, { "abbrev": true, "full_module": "Vale.X64.Memory", "short_module": "ME" }, { "abbrev": true, "full_module": "Vale.AsLowStar.LowStarSig", "short_module": "LSig" }, { "abbrev": true, "full_module": "Vale.AsLowStar.ValeSig", "short_module": "VSig" }, { "abbrev": true, "full_module": "Vale.Interop.X64", "short_module": "IX64" }, { "abbrev": false, "full_module": "Vale.Interop.Base", "short_module": null }, { "abbrev": false, "full_module": "Vale.Def.Types_s", "short_module": null }, { "abbrev": true, "full_module": "LowStar.BufferView.Up", "short_module": "UV" }, { "abbrev": true, "full_module": "LowStar.BufferView.Down", "short_module": "DV" }, { "abbrev": true, "full_module": "LowStar.Buffer", "short_module": "B" }, { "abbrev": true, "full_module": "FStar.HyperStack", "short_module": "HS" }, { "abbrev": false, "full_module": "FStar.HyperStack.ST", "short_module": null }, { "abbrev": false, "full_module": "FStar.Mul", "short_module": null }, { "abbrev": true, "full_module": "Vale.AES.X64.AES", "short_module": "AE" }, { "abbrev": false, "full_module": "Vale.AES.AES_s", "short_module": null }, { "abbrev": true, "full_module": "Vale.X64.Machine_s", "short_module": "MS" }, { "abbrev": true, "full_module": "Vale.X64.State", "short_module": "VS" }, { "abbrev": false, "full_module": "Vale.X64.MemoryAdapters", "short_module": null }, { "abbrev": true, "full_module": "Vale.AsLowStar.Wrapper", "short_module": "W" }, { "abbrev": true, "full_module": "Vale.Interop.Assumptions", "short_module": "IA" }, { "abbrev": true, "full_module": "Vale.X64.Decls", "short_module": "V" }, { "abbrev": true, "full_module": "Vale.X64.Memory", "short_module": "ME" }, { "abbrev": true, "full_module": "Vale.AsLowStar.LowStarSig", "short_module": "LSig" }, { "abbrev": true, "full_module": "Vale.AsLowStar.ValeSig", "short_module": "VSig" }, { "abbrev": true, "full_module": "Vale.Interop.X64", "short_module": "IX64" }, { "abbrev": false, "full_module": "Vale.Interop.Base", "short_module": null }, { "abbrev": false, "full_module": "Vale.Def.Types_s", "short_module": null }, { "abbrev": true, "full_module": "LowStar.BufferView.Up", "short_module": "UV" }, { "abbrev": true, "full_module": "LowStar.BufferView.Down", "short_module": "DV" }, { "abbrev": false, "full_module": "FStar.Mul", "short_module": null }, { "abbrev": true, "full_module": "FStar.HyperStack", "short_module": "HS" }, { "abbrev": true, "full_module": "LowStar.Buffer", "short_module": "B" }, { "abbrev": false, "full_module": "FStar.HyperStack.ST", "short_module": null }, { "abbrev": false, "full_module": "Vale.Stdcalls.X64", "short_module": null }, { "abbrev": false, "full_module": "Vale.Stdcalls.X64", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let lowstar_key128 : lowstar_key128_t = assert_norm (List.length dom + List.length ([]&lt;:list arg) &lt;= 4); IX64.wrap_weak_stdcall code_key128 dom (W.mk_prediction code_key128 dom [] (key128_lemma code_key128 IA.win))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val lowstar_key128:lowstar_key128_t let lowstar_key128:lowstar_key128_t =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">assert_norm (List.length dom + List.length ([] &lt;: list arg) &lt;= 4); IX64.wrap_weak_stdcall code_key128 dom (W.mk_prediction code_key128 dom [] (key128_lemma code_key128 IA.win))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Vale.Stdcalls.X64.Aes.fst.checked", "dependencies": [ "Vale.X64.State.fsti.checked", "Vale.X64.MemoryAdapters.fsti.checked", "Vale.X64.Memory.fsti.checked", "Vale.X64.Machine_s.fst.checked", "Vale.X64.Decls.fsti.checked", "Vale.Interop.X64.fsti.checked", "Vale.Interop.Base.fst.checked", "Vale.Interop.Assumptions.fst.checked", "Vale.Def.Types_s.fst.checked", "Vale.AsLowStar.Wrapper.fsti.checked", "Vale.AsLowStar.ValeSig.fst.checked", "Vale.AsLowStar.LowStarSig.fst.checked", "prims.fst.checked", "LowStar.BufferView.Up.fsti.checked", "LowStar.BufferView.Down.fsti.checked", "LowStar.Buffer.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.Mul.fst.checked", "FStar.List.fst.checked", "FStar.HyperStack.ST.fsti.checked", "FStar.HyperStack.fst.checked" ], "interface_file": true, "source_file": "Vale.Stdcalls.X64.Aes.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "total" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "Vale.Interop.X64.wrap_weak_stdcall", "Vale.Stdcalls.X64.Aes.code_key128", "Vale.Stdcalls.X64.Aes.dom", "Vale.AsLowStar.Wrapper.pre_rel_generic", "Vale.Interop.X64.max_stdcall", "Vale.Interop.X64.arg_reg_stdcall", "Prims.Nil", "Vale.Interop.Base.arg", "Vale.Stdcalls.X64.Aes.key128_pre", "Vale.AsLowStar.Wrapper.post_rel_generic", "Vale.Stdcalls.X64.Aes.key128_post", "Vale.AsLowStar.Wrapper.mk_prediction", "Vale.Interop.X64.regs_modified_stdcall", "Vale.Interop.X64.xmms_modified_stdcall", "Vale.Stdcalls.X64.Aes.key128_lemma", "Vale.Interop.Assumptions.win", "Prims.unit", "FStar.Pervasives.assert_norm", "Prims.b2t", "Prims.op_LessThanOrEqual", "Prims.op_Addition", "FStar.List.Tot.Base.length", "Vale.Interop.Base.td", "Prims.list" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Vale.Stdcalls.X64.Aes open FStar.Mul open FStar.HyperStack.ST module HS = FStar.HyperStack module B = LowStar.Buffer module DV = LowStar.BufferView.Down module UV = LowStar.BufferView.Up open Vale.Def.Types_s open Vale.Interop.Base module IX64 = Vale.Interop.X64 module VSig = Vale.AsLowStar.ValeSig module LSig = Vale.AsLowStar.LowStarSig module ME = Vale.X64.Memory module V = Vale.X64.Decls module IA = Vale.Interop.Assumptions module W = Vale.AsLowStar.Wrapper open Vale.X64.MemoryAdapters module VS = Vale.X64.State module MS = Vale.X64.Machine_s</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Stdcalls.X64.Aes.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 2, "initial_ifuel": 0, "max_fuel": 1, "max_ifuel": 1, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": true, "smtencoding_l_arith_repr": "native", "smtencoding_nl_arith_repr": "wrapped", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": false, "z3cliopt": [ "smt.arith.nl=false", "smt.QI.EAGER_THRESHOLD=100", "smt.CASE_SPLIT=3" ], "z3refresh": false, "z3rlimit": 5, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val lowstar_key128:lowstar_key128_t</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Stdcalls.X64.Aes.lowstar_key128</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "vale/code/arch/x64/interop/Vale.Stdcalls.X64.Aes.fst", "git_rev": "12c5e9539c7e3c366c26409d3b86493548c4483e", "git_url": "https://github.com/hacl-star/hacl-star.git", "project_name": "hacl-star" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Stdcalls.X64.Aes.lowstar_key128_t</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 74, "end_line": 28, "start_col": 2, "start_line": 24 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="3"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Prims.Tot</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val lowstar_key256:lowstar_key256_t</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": true, "full_module": "Vale.X64.Machine_s", "short_module": "MS" }, { "abbrev": true, "full_module": "Vale.X64.State", "short_module": "VS" }, { "abbrev": false, "full_module": "Vale.X64.MemoryAdapters", "short_module": null }, { "abbrev": true, "full_module": "Vale.AsLowStar.Wrapper", "short_module": "W" }, { "abbrev": true, "full_module": "Vale.Interop.Assumptions", "short_module": "IA" }, { "abbrev": true, "full_module": "Vale.X64.Decls", "short_module": "V" }, { "abbrev": true, "full_module": "Vale.X64.Memory", "short_module": "ME" }, { "abbrev": true, "full_module": "Vale.AsLowStar.LowStarSig", "short_module": "LSig" }, { "abbrev": true, "full_module": "Vale.AsLowStar.ValeSig", "short_module": "VSig" }, { "abbrev": true, "full_module": "Vale.Interop.X64", "short_module": "IX64" }, { "abbrev": false, "full_module": "Vale.Interop.Base", "short_module": null }, { "abbrev": false, "full_module": "Vale.Def.Types_s", "short_module": null }, { "abbrev": true, "full_module": "LowStar.BufferView.Up", "short_module": "UV" }, { "abbrev": true, "full_module": "LowStar.BufferView.Down", "short_module": "DV" }, { "abbrev": true, "full_module": "LowStar.Buffer", "short_module": "B" }, { "abbrev": true, "full_module": "FStar.HyperStack", "short_module": "HS" }, { "abbrev": false, "full_module": "FStar.HyperStack.ST", "short_module": null }, { "abbrev": false, "full_module": "FStar.Mul", "short_module": null }, { "abbrev": true, "full_module": "Vale.AES.X64.AES", "short_module": "AE" }, { "abbrev": false, "full_module": "Vale.AES.AES_s", "short_module": null }, { "abbrev": true, "full_module": "Vale.X64.Machine_s", "short_module": "MS" }, { "abbrev": true, "full_module": "Vale.X64.State", "short_module": "VS" }, { "abbrev": false, "full_module": "Vale.X64.MemoryAdapters", "short_module": null }, { "abbrev": true, "full_module": "Vale.AsLowStar.Wrapper", "short_module": "W" }, { "abbrev": true, "full_module": "Vale.Interop.Assumptions", "short_module": "IA" }, { "abbrev": true, "full_module": "Vale.X64.Decls", "short_module": "V" }, { "abbrev": true, "full_module": "Vale.X64.Memory", "short_module": "ME" }, { "abbrev": true, "full_module": "Vale.AsLowStar.LowStarSig", "short_module": "LSig" }, { "abbrev": true, "full_module": "Vale.AsLowStar.ValeSig", "short_module": "VSig" }, { "abbrev": true, "full_module": "Vale.Interop.X64", "short_module": "IX64" }, { "abbrev": false, "full_module": "Vale.Interop.Base", "short_module": null }, { "abbrev": false, "full_module": "Vale.Def.Types_s", "short_module": null }, { "abbrev": true, "full_module": "LowStar.BufferView.Up", "short_module": "UV" }, { "abbrev": true, "full_module": "LowStar.BufferView.Down", "short_module": "DV" }, { "abbrev": false, "full_module": "FStar.Mul", "short_module": null }, { "abbrev": true, "full_module": "FStar.HyperStack", "short_module": "HS" }, { "abbrev": true, "full_module": "LowStar.Buffer", "short_module": "B" }, { "abbrev": false, "full_module": "FStar.HyperStack.ST", "short_module": null }, { "abbrev": false, "full_module": "Vale.Stdcalls.X64", "short_module": null }, { "abbrev": false, "full_module": "Vale.Stdcalls.X64", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let lowstar_key256 : lowstar_key256_t = assert_norm (List.length dom + List.length ([]&lt;:list arg) &lt;= 4); IX64.wrap_weak_stdcall code_key256 dom (W.mk_prediction code_key256 dom [] (key256_lemma code_key256 IA.win))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val lowstar_key256:lowstar_key256_t let lowstar_key256:lowstar_key256_t =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">assert_norm (List.length dom + List.length ([] &lt;: list arg) &lt;= 4); IX64.wrap_weak_stdcall code_key256 dom (W.mk_prediction code_key256 dom [] (key256_lemma code_key256 IA.win))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Vale.Stdcalls.X64.Aes.fst.checked", "dependencies": [ "Vale.X64.State.fsti.checked", "Vale.X64.MemoryAdapters.fsti.checked", "Vale.X64.Memory.fsti.checked", "Vale.X64.Machine_s.fst.checked", "Vale.X64.Decls.fsti.checked", "Vale.Interop.X64.fsti.checked", "Vale.Interop.Base.fst.checked", "Vale.Interop.Assumptions.fst.checked", "Vale.Def.Types_s.fst.checked", "Vale.AsLowStar.Wrapper.fsti.checked", "Vale.AsLowStar.ValeSig.fst.checked", "Vale.AsLowStar.LowStarSig.fst.checked", "prims.fst.checked", "LowStar.BufferView.Up.fsti.checked", "LowStar.BufferView.Down.fsti.checked", "LowStar.Buffer.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.Mul.fst.checked", "FStar.List.fst.checked", "FStar.HyperStack.ST.fsti.checked", "FStar.HyperStack.fst.checked" ], "interface_file": true, "source_file": "Vale.Stdcalls.X64.Aes.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "total" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "Vale.Interop.X64.wrap_weak_stdcall", "Vale.Stdcalls.X64.Aes.code_key256", "Vale.Stdcalls.X64.Aes.dom", "Vale.AsLowStar.Wrapper.pre_rel_generic", "Vale.Interop.X64.max_stdcall", "Vale.Interop.X64.arg_reg_stdcall", "Prims.Nil", "Vale.Interop.Base.arg", "Vale.Stdcalls.X64.Aes.key256_pre", "Vale.AsLowStar.Wrapper.post_rel_generic", "Vale.Stdcalls.X64.Aes.key256_post", "Vale.AsLowStar.Wrapper.mk_prediction", "Vale.Interop.X64.regs_modified_stdcall", "Vale.Interop.X64.xmms_modified_stdcall", "Vale.Stdcalls.X64.Aes.key256_lemma", "Vale.Interop.Assumptions.win", "Prims.unit", "FStar.Pervasives.assert_norm", "Prims.b2t", "Prims.op_LessThanOrEqual", "Prims.op_Addition", "FStar.List.Tot.Base.length", "Vale.Interop.Base.td", "Prims.list" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Vale.Stdcalls.X64.Aes open FStar.Mul open FStar.HyperStack.ST module HS = FStar.HyperStack module B = LowStar.Buffer module DV = LowStar.BufferView.Down module UV = LowStar.BufferView.Up open Vale.Def.Types_s open Vale.Interop.Base module IX64 = Vale.Interop.X64 module VSig = Vale.AsLowStar.ValeSig module LSig = Vale.AsLowStar.LowStarSig module ME = Vale.X64.Memory module V = Vale.X64.Decls module IA = Vale.Interop.Assumptions module W = Vale.AsLowStar.Wrapper open Vale.X64.MemoryAdapters module VS = Vale.X64.State module MS = Vale.X64.Machine_s let lowstar_key128 : lowstar_key128_t = assert_norm (List.length dom + List.length ([]&lt;:list arg) &lt;= 4); IX64.wrap_weak_stdcall code_key128 dom (W.mk_prediction code_key128 dom [] (key128_lemma code_key128 IA.win)) let aes128_key_expansion //: normal lowstar_key128_t = as_normal_t #lowstar_key128_t lowstar_key128</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Stdcalls.X64.Aes.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 2, "initial_ifuel": 0, "max_fuel": 1, "max_ifuel": 1, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": true, "smtencoding_l_arith_repr": "native", "smtencoding_nl_arith_repr": "wrapped", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": false, "z3cliopt": [ "smt.arith.nl=false", "smt.QI.EAGER_THRESHOLD=100", "smt.CASE_SPLIT=3" ], "z3refresh": false, "z3rlimit": 5, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val lowstar_key256:lowstar_key256_t</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Stdcalls.X64.Aes.lowstar_key256</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "vale/code/arch/x64/interop/Vale.Stdcalls.X64.Aes.fst", "git_rev": "12c5e9539c7e3c366c26409d3b86493548c4483e", "git_url": "https://github.com/hacl-star/hacl-star.git", "project_name": "hacl-star" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Stdcalls.X64.Aes.lowstar_key256_t</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 74, "end_line": 38, "start_col": 2, "start_line": 34 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="4"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">FStar.Tactics.Effect.Tac</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val check_prop_validity (g: env) (p: term) (typing: tot_typing g p tm_prop) : T.Tac (prop_validity g p)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": true, "full_module": "Pulse.Syntax.Printer", "short_module": "P" }, { "abbrev": true, "full_module": "FStar.Tactics.V2", "short_module": "T" }, { "abbrev": false, "full_module": "Pulse.Checker.Prover", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Checker.Base", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Typing", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Syntax", "short_module": null }, { "abbrev": true, "full_module": "FStar.Tactics.V2", "short_module": "T" }, { "abbrev": false, "full_module": "Pulse.Checker.Base", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Typing", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Syntax", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Checker", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Checker", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let check_prop_validity (g:env) (p:term) (typing:tot_typing g p tm_prop): T.Tac (prop_validity g p) = Pulse.Checker.Pure.check_prop_validity g p typing</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val check_prop_validity (g: env) (p: term) (typing: tot_typing g p tm_prop) : T.Tac (prop_validity g p) let check_prop_validity (g: env) (p: term) (typing: tot_typing g p tm_prop) : T.Tac (prop_validity g p) =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Pulse.Checker.Pure.check_prop_validity g p typing</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Pulse.Checker.IntroPure.fst.checked", "dependencies": [ "Pulse.Typing.Metatheory.fsti.checked", "Pulse.Typing.Env.fsti.checked", "Pulse.Typing.fst.checked", "Pulse.Syntax.Printer.fsti.checked", "Pulse.Syntax.fst.checked", "Pulse.Checker.Pure.fsti.checked", "Pulse.Checker.Prover.fsti.checked", "Pulse.Checker.Base.fsti.checked", "prims.fst.checked", "FStar.Tactics.V2.fst.checked", "FStar.Printf.fst.checked", "FStar.Pervasives.fsti.checked" ], "interface_file": true, "source_file": "Pulse.Checker.IntroPure.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "Pulse.Typing.Env.env", "Pulse.Syntax.Base.term", "Pulse.Typing.tot_typing", "Pulse.Typing.tm_prop", "Pulse.Checker.Pure.check_prop_validity", "Pulse.Typing.prop_validity" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Pulse.Checker.IntroPure open Pulse.Syntax open Pulse.Typing open Pulse.Checker.Base open Pulse.Checker.Prover module T = FStar.Tactics.V2 module P = Pulse.Syntax.Printer let check_prop (g:env) (p:term) : T.Tac (p:term &amp; tot_typing g p tm_prop) = let p0 = p in let (| p, p_typing |) = Pulse.Checker.Pure.check_vprop g (tm_pure p) in match p.t with | Tm_Pure pp -> let prop_typing = Pulse.Typing.Metatheory.pure_typing_inversion #_ #pp p_typing in (| pp, prop_typing |) | _ -> fail g None (Printf.sprintf "Impossible: check_intro_pure: checking a pure vprop %s returned a non-pure vprop %s,\ please file a bug-report" (P.term_to_string (tm_pure p0)) (P.term_to_string p))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Pulse.Checker.IntroPure.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 2, "initial_ifuel": 1, "max_fuel": 8, "max_ifuel": 2, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": false, "smtencoding_l_arith_repr": "boxwrap", "smtencoding_nl_arith_repr": "boxwrap", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": true, "z3cliopt": [], "z3refresh": false, "z3rlimit": 5, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val check_prop_validity (g: env) (p: term) (typing: tot_typing g p tm_prop) : T.Tac (prop_validity g p)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Pulse.Checker.IntroPure.check_prop_validity</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "lib/steel/pulse/Pulse.Checker.IntroPure.fst", "git_rev": "7fbb54e94dd4f48ff7cb867d3bae6889a635541e", "git_url": "https://github.com/FStarLang/steel.git", "project_name": "steel" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto"> g: Pulse.Typing.Env.env -> p: Pulse.Syntax.Base.term -> typing: Pulse.Typing.tot_typing g p Pulse.Typing.tm_prop -> FStar.Tactics.Effect.Tac (Pulse.Typing.prop_validity g p)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 53, "end_line": 28, "start_col": 4, "start_line": 28 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="5"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">FStar.Tactics.Effect.Tac</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val check (g:env) (pre:term) (pre_typing:tot_typing g pre tm_vprop) (post_hint:post_hint_opt g) (res_ppname:ppname) (t:st_term { Tm_IntroPure? t.term }) : T.Tac (checker_result_t g pre post_hint)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": true, "full_module": "Pulse.Syntax.Printer", "short_module": "P" }, { "abbrev": false, "full_module": "Pulse.Checker.Prover", "short_module": null }, { "abbrev": true, "full_module": "FStar.Tactics.V2", "short_module": "T" }, { "abbrev": false, "full_module": "Pulse.Checker.Base", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Typing", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Syntax", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Checker", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Checker", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let check (g:env) (pre:term) (pre_typing:tot_typing g pre tm_vprop) (post_hint:post_hint_opt g) (res_ppname:ppname) (t:st_term { Tm_IntroPure? t.term }) : T.Tac (checker_result_t g pre post_hint) = let g = Pulse.Typing.Env.push_context g "check_intro_pure" t.range in let Tm_IntroPure { p } = t.term in let (| p, p_typing |) = check_prop g p in let pv = check_prop_validity g p p_typing in let st_typing = T_IntroPure _ _ p_typing pv in prove_post_hint (try_frame_pre pre_typing (match_comp_res_with_post_hint st_typing post_hint) res_ppname) post_hint t.range</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val check (g:env) (pre:term) (pre_typing:tot_typing g pre tm_vprop) (post_hint:post_hint_opt g) (res_ppname:ppname) (t:st_term { Tm_IntroPure? t.term }) : T.Tac (checker_result_t g pre post_hint) let check (g: env) (pre: term) (pre_typing: tot_typing g pre tm_vprop) (post_hint: post_hint_opt g) (res_ppname: ppname) (t: st_term{Tm_IntroPure? t.term}) : T.Tac (checker_result_t g pre post_hint) =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let g = Pulse.Typing.Env.push_context g "check_intro_pure" t.range in let Tm_IntroPure { p = p } = t.term in let (| p , p_typing |) = check_prop g p in let pv = check_prop_validity g p p_typing in let st_typing = T_IntroPure _ _ p_typing pv in prove_post_hint (try_frame_pre pre_typing (match_comp_res_with_post_hint st_typing post_hint) res_ppname) post_hint t.range</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Pulse.Checker.IntroPure.fst.checked", "dependencies": [ "Pulse.Typing.Metatheory.fsti.checked", "Pulse.Typing.Env.fsti.checked", "Pulse.Typing.fst.checked", "Pulse.Syntax.Printer.fsti.checked", "Pulse.Syntax.fst.checked", "Pulse.Checker.Pure.fsti.checked", "Pulse.Checker.Prover.fsti.checked", "Pulse.Checker.Base.fsti.checked", "prims.fst.checked", "FStar.Tactics.V2.fst.checked", "FStar.Printf.fst.checked", "FStar.Pervasives.fsti.checked" ], "interface_file": true, "source_file": "Pulse.Checker.IntroPure.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "Pulse.Typing.Env.env", "Pulse.Syntax.Base.term", "Pulse.Typing.tot_typing", "Pulse.Syntax.Base.tm_vprop", "Pulse.Typing.post_hint_opt", "Pulse.Syntax.Base.ppname", "Pulse.Syntax.Base.st_term", "Prims.b2t", "Pulse.Syntax.Base.uu___is_Tm_IntroPure", "Pulse.Syntax.Base.__proj__Mkst_term__item__term", "Pulse.Typing.tm_prop", "Pulse.Checker.Prover.prove_post_hint", "Pulse.Syntax.Base.__proj__Mkst_term__item__range", "Pulse.Checker.Base.checker_result_t", "FStar.Pervasives.Native.None", "Pulse.Typing.post_hint_t", "Pulse.Checker.Prover.try_frame_pre", "FStar.Pervasives.dtuple3", "Pulse.Syntax.Base.comp_st", "Pulse.Typing.st_typing", "Pulse.Checker.Base.match_comp_res_with_post_hint", "Pulse.Typing.wtag", "FStar.Pervasives.Native.Some", "Pulse.Syntax.Base.ctag", "Pulse.Syntax.Base.STT_Ghost", "Pulse.Syntax.Base.Tm_IntroPure", "Pulse.Syntax.Base.Mkst_term'__Tm_IntroPure__payload", "Pulse.Typing.comp_intro_pure", "Pulse.Typing.T_IntroPure", "Pulse.Typing.prop_validity", "Pulse.Checker.IntroPure.check_prop_validity", "Prims.dtuple2", "Pulse.Checker.IntroPure.check_prop", "Pulse.Syntax.Base.st_term'", "Prims.eq2", "Pulse.Typing.Env.push_context" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Pulse.Checker.IntroPure open Pulse.Syntax open Pulse.Typing open Pulse.Checker.Base open Pulse.Checker.Prover module T = FStar.Tactics.V2 module P = Pulse.Syntax.Printer let check_prop (g:env) (p:term) : T.Tac (p:term &amp; tot_typing g p tm_prop) = let p0 = p in let (| p, p_typing |) = Pulse.Checker.Pure.check_vprop g (tm_pure p) in match p.t with | Tm_Pure pp -> let prop_typing = Pulse.Typing.Metatheory.pure_typing_inversion #_ #pp p_typing in (| pp, prop_typing |) | _ -> fail g None (Printf.sprintf "Impossible: check_intro_pure: checking a pure vprop %s returned a non-pure vprop %s,\ please file a bug-report" (P.term_to_string (tm_pure p0)) (P.term_to_string p)) let check_prop_validity (g:env) (p:term) (typing:tot_typing g p tm_prop): T.Tac (prop_validity g p) = Pulse.Checker.Pure.check_prop_validity g p typing let check (g:env) (pre:term) (pre_typing:tot_typing g pre tm_vprop) (post_hint:post_hint_opt g) (res_ppname:ppname) (t:st_term { Tm_IntroPure? t.term })</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Pulse.Checker.IntroPure.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 2, "initial_ifuel": 1, "max_fuel": 8, "max_ifuel": 2, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": false, "smtencoding_l_arith_repr": "boxwrap", "smtencoding_nl_arith_repr": "boxwrap", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": true, "z3cliopt": [], "z3refresh": false, "z3rlimit": 5, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val check (g:env) (pre:term) (pre_typing:tot_typing g pre tm_vprop) (post_hint:post_hint_opt g) (res_ppname:ppname) (t:st_term { Tm_IntroPure? t.term }) : T.Tac (checker_result_t g pre post_hint)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Pulse.Checker.IntroPure.check</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "lib/steel/pulse/Pulse.Checker.IntroPure.fst", "git_rev": "7fbb54e94dd4f48ff7cb867d3bae6889a635541e", "git_url": "https://github.com/FStarLang/steel.git", "project_name": "steel" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto"> g: Pulse.Typing.Env.env -> pre: Pulse.Syntax.Base.term -> pre_typing: Pulse.Typing.tot_typing g pre Pulse.Syntax.Base.tm_vprop -> post_hint: Pulse.Typing.post_hint_opt g -> res_ppname: Pulse.Syntax.Base.ppname -> t: Pulse.Syntax.Base.st_term{Tm_IntroPure? (Mkst_term?.term t)} -> FStar.Tactics.Effect.Tac (Pulse.Checker.Base.checker_result_t g pre post_hint)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 125, "end_line": 46, "start_col": 46, "start_line": 38 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="6"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">FStar.Tactics.Effect.Tac</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val check_prop (g: env) (p: term) : T.Tac (p: term &amp; tot_typing g p tm_prop)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": true, "full_module": "Pulse.Syntax.Printer", "short_module": "P" }, { "abbrev": true, "full_module": "FStar.Tactics.V2", "short_module": "T" }, { "abbrev": false, "full_module": "Pulse.Checker.Prover", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Checker.Base", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Typing", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Syntax", "short_module": null }, { "abbrev": true, "full_module": "FStar.Tactics.V2", "short_module": "T" }, { "abbrev": false, "full_module": "Pulse.Checker.Base", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Typing", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Syntax", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Checker", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Checker", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let check_prop (g:env) (p:term) : T.Tac (p:term &amp; tot_typing g p tm_prop) = let p0 = p in let (| p, p_typing |) = Pulse.Checker.Pure.check_vprop g (tm_pure p) in match p.t with | Tm_Pure pp -> let prop_typing = Pulse.Typing.Metatheory.pure_typing_inversion #_ #pp p_typing in (| pp, prop_typing |) | _ -> fail g None (Printf.sprintf "Impossible: check_intro_pure: checking a pure vprop %s returned a non-pure vprop %s,\ please file a bug-report" (P.term_to_string (tm_pure p0)) (P.term_to_string p))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val check_prop (g: env) (p: term) : T.Tac (p: term &amp; tot_typing g p tm_prop) let check_prop (g: env) (p: term) : T.Tac (p: term &amp; tot_typing g p tm_prop) =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let p0 = p in let (| p , p_typing |) = Pulse.Checker.Pure.check_vprop g (tm_pure p) in match p.t with | Tm_Pure pp -> let prop_typing = Pulse.Typing.Metatheory.pure_typing_inversion #_ #pp p_typing in (| pp, prop_typing |) | _ -> fail g None (Printf.sprintf "Impossible: check_intro_pure: checking a pure vprop %s returned a non-pure vprop %s,please file a bug-report" (P.term_to_string (tm_pure p0)) (P.term_to_string p))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Pulse.Checker.IntroPure.fst.checked", "dependencies": [ "Pulse.Typing.Metatheory.fsti.checked", "Pulse.Typing.Env.fsti.checked", "Pulse.Typing.fst.checked", "Pulse.Syntax.Printer.fsti.checked", "Pulse.Syntax.fst.checked", "Pulse.Checker.Pure.fsti.checked", "Pulse.Checker.Prover.fsti.checked", "Pulse.Checker.Base.fsti.checked", "prims.fst.checked", "FStar.Tactics.V2.fst.checked", "FStar.Printf.fst.checked", "FStar.Pervasives.fsti.checked" ], "interface_file": true, "source_file": "Pulse.Checker.IntroPure.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "Pulse.Typing.Env.env", "Pulse.Syntax.Base.term", "Pulse.Typing.tot_typing", "Pulse.Syntax.Base.tm_vprop", "Pulse.Syntax.Base.__proj__Mkterm__item__t", "Prims.Mkdtuple2", "Pulse.Typing.tm_prop", "Pulse.Syntax.Base.tm_fstar", "FStar.Reflection.Typing.tm_prop", "FStar.Range.range_0", "Pulse.Typing.Metatheory.Base.pure_typing_inversion", "Prims.dtuple2", "Pulse.Syntax.Base.term'", "Pulse.Typing.Env.fail", "FStar.Pervasives.Native.None", "Pulse.Syntax.Base.range", "Prims.string", "FStar.Printf.sprintf", "Pulse.Syntax.Printer.term_to_string", "Pulse.Syntax.Base.tm_pure", "Pulse.Checker.Pure.check_vprop" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Pulse.Checker.IntroPure open Pulse.Syntax open Pulse.Typing open Pulse.Checker.Base open Pulse.Checker.Prover module T = FStar.Tactics.V2 module P = Pulse.Syntax.Printer</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Pulse.Checker.IntroPure.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 2, "initial_ifuel": 1, "max_fuel": 8, "max_ifuel": 2, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": false, "smtencoding_l_arith_repr": "boxwrap", "smtencoding_nl_arith_repr": "boxwrap", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": true, "z3cliopt": [], "z3refresh": false, "z3rlimit": 5, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val check_prop (g: env) (p: term) : T.Tac (p: term &amp; tot_typing g p tm_prop)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Pulse.Checker.IntroPure.check_prop</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "lib/steel/pulse/Pulse.Checker.IntroPure.fst", "git_rev": "7fbb54e94dd4f48ff7cb867d3bae6889a635541e", "git_url": "https://github.com/FStarLang/steel.git", "project_name": "steel" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">g: Pulse.Typing.Env.env -> p: Pulse.Syntax.Base.term -> FStar.Tactics.Effect.Tac (Prims.dtuple2 Pulse.Syntax.Base.term (fun p -> Pulse.Typing.tot_typing g p Pulse.Typing.tm_prop))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 30, "end_line": 25, "start_col": 45, "start_line": 12 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="7"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">FStar.Pervasives.Lemma</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val transpose_state8_lemma: #a:sha2_alg -> #m:m_spec{lanes a m == 8} -> st:state_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 8 * word_length a} -> Lemma (let l = lanes a m in let ind = 8 * j + i / word_length a in Seq.index (vec_v (transpose_state8 st).[ind / l]) (ind % l) == Seq.index (state_spec_v st).[j] (i / word_length a))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": false, "full_module": "Hacl.Spec.SHA2.Vec", "short_module": null }, { "abbrev": false, "full_module": "Spec.Hash.Definitions", "short_module": null }, { "abbrev": false, "full_module": "Lib.IntVector.Transpose", "short_module": null }, { "abbrev": false, "full_module": "Lib.IntVector", "short_module": null }, { "abbrev": false, "full_module": "Lib.Sequence", "short_module": null }, { "abbrev": false, "full_module": "Lib.IntTypes", "short_module": null }, { "abbrev": false, "full_module": "FStar.Mul", "short_module": null }, { "abbrev": false, "full_module": "Hacl.Spec.SHA2", "short_module": null }, { "abbrev": false, "full_module": "Hacl.Spec.SHA2", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let transpose_state8_lemma #a #m st j i = let l = lanes a m in let ind = 8 * j + i / word_length a in let r0 = transpose8x8_lseq st in transpose8x8_lemma st</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val transpose_state8_lemma: #a:sha2_alg -> #m:m_spec{lanes a m == 8} -> st:state_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 8 * word_length a} -> Lemma (let l = lanes a m in let ind = 8 * j + i / word_length a in Seq.index (vec_v (transpose_state8 st).[ind / l]) (ind % l) == Seq.index (state_spec_v st).[j] (i / word_length a)) let transpose_state8_lemma #a #m st j i =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let l = lanes a m in let ind = 8 * j + i / word_length a in let r0 = transpose8x8_lseq st in transpose8x8_lemma st</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Hacl.Spec.SHA2.Lemmas.fst.checked", "dependencies": [ "Spec.Hash.Definitions.fst.checked", "prims.fst.checked", "Lib.Sequence.fsti.checked", "Lib.IntVector.Transpose.fsti.checked", "Lib.IntVector.fsti.checked", "Lib.IntTypes.fsti.checked", "Hacl.Spec.SHA2.Vec.fst.checked", "FStar.Seq.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.Mul.fst.checked" ], "interface_file": false, "source_file": "Hacl.Spec.SHA2.Lemmas.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "lemma" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "Spec.Hash.Definitions.sha2_alg", "Hacl.Spec.SHA2.Vec.m_spec", "Prims.eq2", "Prims.int", "Hacl.Spec.SHA2.Vec.lanes", "Hacl.Spec.SHA2.Vec.state_spec", "Prims.nat", "Prims.b2t", "Prims.op_LessThan", "FStar.Mul.op_Star", "Spec.Hash.Definitions.word_length", "Lib.IntVector.Transpose.transpose8x8_lemma", "Spec.Hash.Definitions.word_t", "Lib.Sequence.lseq", "Lib.IntVector.vec_t", "Lib.IntVector.Transpose.transpose8x8_lseq", "Prims.op_Addition", "Prims.op_Division", "Hacl.Spec.SHA2.Vec.lanes_t", "Prims.unit" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Hacl.Spec.SHA2.Lemmas open FStar.Mul open Lib.IntTypes open Lib.Sequence open Lib.IntVector open Lib.IntVector.Transpose open Spec.Hash.Definitions open Hacl.Spec.SHA2.Vec #set-options "--z3rlimit 50 --fuel 0 --ifuel 1" val transpose_ws4_lemma_ij: #a:sha2_alg -> #m:m_spec{lanes a m == 4} // lanes a m * lanes a m = 16 -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in (vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l]) let transpose_ws4_lemma_ij #a #m ws j i = let l = lanes a m in let i_sub = i / l in let j_sub = i % l in assert (i_sub * l + j_sub == i); let vs = sub ws (i_sub * l) l in eq_intro (sub (transpose_ws4 ws) (i_sub * l) l) (transpose4x4_lseq vs); //assert ((transpose_ws4 ws).[i] == (sub (transpose_ws4 ws) (i_sub * l) l).[j_sub]); //assert ((transpose_ws4 ws).[i] == (transpose4x4_lseq vs).[j_sub]); assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v (transpose4x4_lseq vs).[j_sub]).[j]); transpose4x4_lemma vs; assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v vs.[j]).[j_sub]); assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i_sub * l + j]).[j_sub]) val transpose_ws8_lemma_ij: #a:sha2_alg -> #m:m_spec{lanes a m == 8} -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in (vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l]) let transpose_ws8_lemma_ij #a #m ws j i = let l = lanes a m in let i_sub = i / l in let j_sub = i % l in assert (i_sub * l + j_sub == i); let vs = sub ws (i_sub * l) l in eq_intro (sub (transpose_ws8 ws) (i_sub * l) l) (transpose8x8_lseq vs); assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v (transpose8x8_lseq vs).[j_sub]).[j]); transpose8x8_lemma vs; assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i_sub * lanes a m + j]).[j_sub]) val transpose_ws_lemma_ij: #a:sha2_alg -> #m:m_spec{is_supported a m} -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in ((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v ws.[i / l * l + j]).[i % l]) let transpose_ws_lemma_ij #a #m ws j i = assert (((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v (transpose_ws ws).[i]).[j]); match lanes a m with | 1 -> () | 4 -> transpose_ws4_lemma_ij #a #m ws j i | 8 -> transpose_ws8_lemma_ij #a #m ws j i val transpose_state4_lemma: #a:sha2_alg -> #m:m_spec{lanes a m == 4} -> st:state_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 8 * word_length a} -> Lemma (let l = lanes a m in let ind = 8 * j + i / word_length a in Seq.index (vec_v (transpose_state st).[ind / l]) (ind % l) == Seq.index (state_spec_v st).[j] (i / word_length a)) let transpose_state4_lemma #a #m st j i = let r0 = transpose4x4_lseq (sub st 0 4) in transpose4x4_lemma (sub st 0 4); let r1 = transpose4x4_lseq (sub st 4 4) in transpose4x4_lemma (sub st 4 4) val transpose_state8_lemma: #a:sha2_alg -> #m:m_spec{lanes a m == 8} -> st:state_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 8 * word_length a} -> Lemma (let l = lanes a m in let ind = 8 * j + i / word_length a in Seq.index (vec_v (transpose_state8 st).[ind / l]) (ind % l) == Seq.index (state_spec_v st).[j] (i / word_length a))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Hacl.Spec.SHA2.Lemmas.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 0, "initial_ifuel": 1, "max_fuel": 0, "max_ifuel": 1, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": false, "smtencoding_l_arith_repr": "boxwrap", "smtencoding_nl_arith_repr": "boxwrap", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": false, "z3cliopt": [], "z3refresh": false, "z3rlimit": 50, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val transpose_state8_lemma: #a:sha2_alg -> #m:m_spec{lanes a m == 8} -> st:state_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 8 * word_length a} -> Lemma (let l = lanes a m in let ind = 8 * j + i / word_length a in Seq.index (vec_v (transpose_state8 st).[ind / l]) (ind % l) == Seq.index (state_spec_v st).[j] (i / word_length a))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Hacl.Spec.SHA2.Lemmas.transpose_state8_lemma</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "code/sha2-mb/Hacl.Spec.SHA2.Lemmas.fst", "git_rev": "12c5e9539c7e3c366c26409d3b86493548c4483e", "git_url": "https://github.com/hacl-star/hacl-star.git", "project_name": "hacl-star" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto"> st: Hacl.Spec.SHA2.Vec.state_spec a m -> j: Prims.nat{j &lt; Hacl.Spec.SHA2.Vec.lanes a m} -> i: Prims.nat{i &lt; 8 * Spec.Hash.Definitions.word_length a} -> FStar.Pervasives.Lemma (ensures (let l = Hacl.Spec.SHA2.Vec.lanes a m in let ind = 8 * j + i / Spec.Hash.Definitions.word_length a in FStar.Seq.Base.index (Lib.IntVector.vec_v (Hacl.Spec.SHA2.Vec.transpose_state8 st).[ ind / l ]) (ind % l) == FStar.Seq.Base.index (Hacl.Spec.SHA2.Vec.state_spec_v st).[ j ] (i / Spec.Hash.Definitions.word_length a)))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 23, "end_line": 117, "start_col": 41, "start_line": 113 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="8"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">FStar.Pervasives.Lemma</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val transpose_state_lemma_ij: #a:sha2_alg -> #m:m_spec{is_supported a m} -> st:state_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 8 * word_length a} -> Lemma (let l = lanes a m in let ind = 8 * j + i / word_length a in (Seq.index (vec_v (transpose_state st).[ind / l])) (ind % l) == (Seq.index (state_spec_v st).[j] (i / word_length a)))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": false, "full_module": "Hacl.Spec.SHA2.Vec", "short_module": null }, { "abbrev": false, "full_module": "Spec.Hash.Definitions", "short_module": null }, { "abbrev": false, "full_module": "Lib.IntVector.Transpose", "short_module": null }, { "abbrev": false, "full_module": "Lib.IntVector", "short_module": null }, { "abbrev": false, "full_module": "Lib.Sequence", "short_module": null }, { "abbrev": false, "full_module": "Lib.IntTypes", "short_module": null }, { "abbrev": false, "full_module": "FStar.Mul", "short_module": null }, { "abbrev": false, "full_module": "Hacl.Spec.SHA2", "short_module": null }, { "abbrev": false, "full_module": "Hacl.Spec.SHA2", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let transpose_state_lemma_ij #a #m st j i = match lanes a m with | 1 -> () | 4 -> transpose_state4_lemma #a #m st j i | 8 -> transpose_state8_lemma #a #m st j i</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val transpose_state_lemma_ij: #a:sha2_alg -> #m:m_spec{is_supported a m} -> st:state_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 8 * word_length a} -> Lemma (let l = lanes a m in let ind = 8 * j + i / word_length a in (Seq.index (vec_v (transpose_state st).[ind / l])) (ind % l) == (Seq.index (state_spec_v st).[j] (i / word_length a))) let transpose_state_lemma_ij #a #m st j i =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">match lanes a m with | 1 -> () | 4 -> transpose_state4_lemma #a #m st j i | 8 -> transpose_state8_lemma #a #m st j i</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Hacl.Spec.SHA2.Lemmas.fst.checked", "dependencies": [ "Spec.Hash.Definitions.fst.checked", "prims.fst.checked", "Lib.Sequence.fsti.checked", "Lib.IntVector.Transpose.fsti.checked", "Lib.IntVector.fsti.checked", "Lib.IntTypes.fsti.checked", "Hacl.Spec.SHA2.Vec.fst.checked", "FStar.Seq.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.Mul.fst.checked" ], "interface_file": false, "source_file": "Hacl.Spec.SHA2.Lemmas.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "lemma" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "Spec.Hash.Definitions.sha2_alg", "Hacl.Spec.SHA2.Vec.m_spec", "Hacl.Spec.SHA2.Vec.is_supported", "Hacl.Spec.SHA2.Vec.state_spec", "Prims.nat", "Prims.b2t", "Prims.op_LessThan", "Hacl.Spec.SHA2.Vec.lanes", "FStar.Mul.op_Star", "Spec.Hash.Definitions.word_length", "Hacl.Spec.SHA2.Lemmas.transpose_state4_lemma", "Hacl.Spec.SHA2.Lemmas.transpose_state8_lemma", "Prims.unit" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Hacl.Spec.SHA2.Lemmas open FStar.Mul open Lib.IntTypes open Lib.Sequence open Lib.IntVector open Lib.IntVector.Transpose open Spec.Hash.Definitions open Hacl.Spec.SHA2.Vec #set-options "--z3rlimit 50 --fuel 0 --ifuel 1" val transpose_ws4_lemma_ij: #a:sha2_alg -> #m:m_spec{lanes a m == 4} // lanes a m * lanes a m = 16 -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in (vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l]) let transpose_ws4_lemma_ij #a #m ws j i = let l = lanes a m in let i_sub = i / l in let j_sub = i % l in assert (i_sub * l + j_sub == i); let vs = sub ws (i_sub * l) l in eq_intro (sub (transpose_ws4 ws) (i_sub * l) l) (transpose4x4_lseq vs); //assert ((transpose_ws4 ws).[i] == (sub (transpose_ws4 ws) (i_sub * l) l).[j_sub]); //assert ((transpose_ws4 ws).[i] == (transpose4x4_lseq vs).[j_sub]); assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v (transpose4x4_lseq vs).[j_sub]).[j]); transpose4x4_lemma vs; assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v vs.[j]).[j_sub]); assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i_sub * l + j]).[j_sub]) val transpose_ws8_lemma_ij: #a:sha2_alg -> #m:m_spec{lanes a m == 8} -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in (vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l]) let transpose_ws8_lemma_ij #a #m ws j i = let l = lanes a m in let i_sub = i / l in let j_sub = i % l in assert (i_sub * l + j_sub == i); let vs = sub ws (i_sub * l) l in eq_intro (sub (transpose_ws8 ws) (i_sub * l) l) (transpose8x8_lseq vs); assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v (transpose8x8_lseq vs).[j_sub]).[j]); transpose8x8_lemma vs; assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i_sub * lanes a m + j]).[j_sub]) val transpose_ws_lemma_ij: #a:sha2_alg -> #m:m_spec{is_supported a m} -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in ((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v ws.[i / l * l + j]).[i % l]) let transpose_ws_lemma_ij #a #m ws j i = assert (((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v (transpose_ws ws).[i]).[j]); match lanes a m with | 1 -> () | 4 -> transpose_ws4_lemma_ij #a #m ws j i | 8 -> transpose_ws8_lemma_ij #a #m ws j i val transpose_state4_lemma: #a:sha2_alg -> #m:m_spec{lanes a m == 4} -> st:state_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 8 * word_length a} -> Lemma (let l = lanes a m in let ind = 8 * j + i / word_length a in Seq.index (vec_v (transpose_state st).[ind / l]) (ind % l) == Seq.index (state_spec_v st).[j] (i / word_length a)) let transpose_state4_lemma #a #m st j i = let r0 = transpose4x4_lseq (sub st 0 4) in transpose4x4_lemma (sub st 0 4); let r1 = transpose4x4_lseq (sub st 4 4) in transpose4x4_lemma (sub st 4 4) val transpose_state8_lemma: #a:sha2_alg -> #m:m_spec{lanes a m == 8} -> st:state_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 8 * word_length a} -> Lemma (let l = lanes a m in let ind = 8 * j + i / word_length a in Seq.index (vec_v (transpose_state8 st).[ind / l]) (ind % l) == Seq.index (state_spec_v st).[j] (i / word_length a)) let transpose_state8_lemma #a #m st j i = let l = lanes a m in let ind = 8 * j + i / word_length a in let r0 = transpose8x8_lseq st in transpose8x8_lemma st val transpose_state_lemma_ij: #a:sha2_alg -> #m:m_spec{is_supported a m} -> st:state_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 8 * word_length a} -> Lemma (let l = lanes a m in let ind = 8 * j + i / word_length a in (Seq.index (vec_v (transpose_state st).[ind / l])) (ind % l) == (Seq.index (state_spec_v st).[j] (i / word_length a)))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Hacl.Spec.SHA2.Lemmas.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 0, "initial_ifuel": 1, "max_fuel": 0, "max_ifuel": 1, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": false, "smtencoding_l_arith_repr": "boxwrap", "smtencoding_nl_arith_repr": "boxwrap", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": false, "z3cliopt": [], "z3refresh": false, "z3rlimit": 50, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val transpose_state_lemma_ij: #a:sha2_alg -> #m:m_spec{is_supported a m} -> st:state_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 8 * word_length a} -> Lemma (let l = lanes a m in let ind = 8 * j + i / word_length a in (Seq.index (vec_v (transpose_state st).[ind / l])) (ind % l) == (Seq.index (state_spec_v st).[j] (i / word_length a)))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Hacl.Spec.SHA2.Lemmas.transpose_state_lemma_ij</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "code/sha2-mb/Hacl.Spec.SHA2.Lemmas.fst", "git_rev": "12c5e9539c7e3c366c26409d3b86493548c4483e", "git_url": "https://github.com/hacl-star/hacl-star.git", "project_name": "hacl-star" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto"> st: Hacl.Spec.SHA2.Vec.state_spec a m -> j: Prims.nat{j &lt; Hacl.Spec.SHA2.Vec.lanes a m} -> i: Prims.nat{i &lt; 8 * Spec.Hash.Definitions.word_length a} -> FStar.Pervasives.Lemma (ensures (let l = Hacl.Spec.SHA2.Vec.lanes a m in let ind = 8 * j + i / Spec.Hash.Definitions.word_length a in FStar.Seq.Base.index (Lib.IntVector.vec_v (Hacl.Spec.SHA2.Vec.transpose_state st).[ ind / l ]) (ind % l) == FStar.Seq.Base.index (Hacl.Spec.SHA2.Vec.state_spec_v st).[ j ] (i / Spec.Hash.Definitions.word_length a)))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 44, "end_line": 136, "start_col": 2, "start_line": 133 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="9"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">FStar.Pervasives.Lemma</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val transpose_ws4_lemma_ij: #a:sha2_alg -> #m:m_spec{lanes a m == 4} // lanes a m * lanes a m = 16 -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in (vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": false, "full_module": "Hacl.Spec.SHA2.Vec", "short_module": null }, { "abbrev": false, "full_module": "Spec.Hash.Definitions", "short_module": null }, { "abbrev": false, "full_module": "Lib.IntVector.Transpose", "short_module": null }, { "abbrev": false, "full_module": "Lib.IntVector", "short_module": null }, { "abbrev": false, "full_module": "Lib.Sequence", "short_module": null }, { "abbrev": false, "full_module": "Lib.IntTypes", "short_module": null }, { "abbrev": false, "full_module": "FStar.Mul", "short_module": null }, { "abbrev": false, "full_module": "Hacl.Spec.SHA2", "short_module": null }, { "abbrev": false, "full_module": "Hacl.Spec.SHA2", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let transpose_ws4_lemma_ij #a #m ws j i = let l = lanes a m in let i_sub = i / l in let j_sub = i % l in assert (i_sub * l + j_sub == i); let vs = sub ws (i_sub * l) l in eq_intro (sub (transpose_ws4 ws) (i_sub * l) l) (transpose4x4_lseq vs); //assert ((transpose_ws4 ws).[i] == (sub (transpose_ws4 ws) (i_sub * l) l).[j_sub]); //assert ((transpose_ws4 ws).[i] == (transpose4x4_lseq vs).[j_sub]); assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v (transpose4x4_lseq vs).[j_sub]).[j]); transpose4x4_lemma vs; assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v vs.[j]).[j_sub]); assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i_sub * l + j]).[j_sub])</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val transpose_ws4_lemma_ij: #a:sha2_alg -> #m:m_spec{lanes a m == 4} // lanes a m * lanes a m = 16 -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in (vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l]) let transpose_ws4_lemma_ij #a #m ws j i =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let l = lanes a m in let i_sub = i / l in let j_sub = i % l in assert (i_sub * l + j_sub == i); let vs = sub ws (i_sub * l) l in eq_intro (sub (transpose_ws4 ws) (i_sub * l) l) (transpose4x4_lseq vs); assert ((vec_v (transpose_ws4 ws).[ i ]).[ j ] == (vec_v (transpose4x4_lseq vs).[ j_sub ]).[ j ]); transpose4x4_lemma vs; assert ((vec_v (transpose_ws4 ws).[ i ]).[ j ] == (vec_v vs.[ j ]).[ j_sub ]); assert ((vec_v (transpose_ws4 ws).[ i ]).[ j ] == (vec_v ws.[ i_sub * l + j ]).[ j_sub ])</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Hacl.Spec.SHA2.Lemmas.fst.checked", "dependencies": [ "Spec.Hash.Definitions.fst.checked", "prims.fst.checked", "Lib.Sequence.fsti.checked", "Lib.IntVector.Transpose.fsti.checked", "Lib.IntVector.fsti.checked", "Lib.IntTypes.fsti.checked", "Hacl.Spec.SHA2.Vec.fst.checked", "FStar.Seq.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.Mul.fst.checked" ], "interface_file": false, "source_file": "Hacl.Spec.SHA2.Lemmas.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "lemma" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "Spec.Hash.Definitions.sha2_alg", "Hacl.Spec.SHA2.Vec.m_spec", "Prims.eq2", "Prims.int", "Hacl.Spec.SHA2.Vec.lanes", "Hacl.Spec.SHA2.Vec.ws_spec", "Prims.nat", "Prims.b2t", "Prims.op_LessThan", "Prims._assert", "Lib.IntTypes.uint_t", "Spec.Hash.Definitions.word_t", "Lib.IntTypes.SEC", "Prims.l_or", "FStar.Seq.Base.index", "Lib.Sequence.to_seq", "Lib.IntVector.vec_v", "Lib.Sequence.op_String_Access", "Hacl.Spec.SHA2.Vec.element_t", "Prims.op_Addition", "FStar.Mul.op_Star", "Hacl.Spec.SHA2.Vec.transpose_ws4", "Prims.unit", "Lib.IntVector.Transpose.transpose4x4_lemma", "Lib.IntVector.vec_t", "Lib.IntVector.Transpose.transpose4x4_lseq", "Lib.Sequence.eq_intro", "Lib.Sequence.sub", "Lib.Sequence.lseq", "Prims.l_and", "FStar.Seq.Base.seq", "FStar.Seq.Base.slice", "Prims.op_Multiply", "Prims.l_Forall", "Lib.Sequence.index", "Prims.op_Modulus", "Prims.op_Division", "Hacl.Spec.SHA2.Vec.lanes_t" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Hacl.Spec.SHA2.Lemmas open FStar.Mul open Lib.IntTypes open Lib.Sequence open Lib.IntVector open Lib.IntVector.Transpose open Spec.Hash.Definitions open Hacl.Spec.SHA2.Vec #set-options "--z3rlimit 50 --fuel 0 --ifuel 1" val transpose_ws4_lemma_ij: #a:sha2_alg -> #m:m_spec{lanes a m == 4} // lanes a m * lanes a m = 16 -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in (vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Hacl.Spec.SHA2.Lemmas.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 0, "initial_ifuel": 1, "max_fuel": 0, "max_ifuel": 1, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": false, "smtencoding_l_arith_repr": "boxwrap", "smtencoding_nl_arith_repr": "boxwrap", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": false, "z3cliopt": [], "z3refresh": false, "z3rlimit": 50, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val transpose_ws4_lemma_ij: #a:sha2_alg -> #m:m_spec{lanes a m == 4} // lanes a m * lanes a m = 16 -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in (vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Hacl.Spec.SHA2.Lemmas.transpose_ws4_lemma_ij</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "code/sha2-mb/Hacl.Spec.SHA2.Lemmas.fst", "git_rev": "12c5e9539c7e3c366c26409d3b86493548c4483e", "git_url": "https://github.com/hacl-star/hacl-star.git", "project_name": "hacl-star" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto"> ws: Hacl.Spec.SHA2.Vec.ws_spec a m -> j: Prims.nat{j &lt; Hacl.Spec.SHA2.Vec.lanes a m} -> i: Prims.nat{i &lt; 16} -> FStar.Pervasives.Lemma (ensures (let l = Hacl.Spec.SHA2.Vec.lanes a m in (Lib.IntVector.vec_v (Hacl.Spec.SHA2.Vec.transpose_ws4 ws).[ i ]).[ j ] == (Lib.IntVector.vec_v ws.[ (i / l) * l + j ]).[ i % l ]))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 83, "end_line": 38, "start_col": 41, "start_line": 25 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="10"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">FStar.Pervasives.Lemma</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val transpose_ws_lemma_ij: #a:sha2_alg -> #m:m_spec{is_supported a m} -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in ((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v ws.[i / l * l + j]).[i % l])</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": false, "full_module": "Hacl.Spec.SHA2.Vec", "short_module": null }, { "abbrev": false, "full_module": "Spec.Hash.Definitions", "short_module": null }, { "abbrev": false, "full_module": "Lib.IntVector.Transpose", "short_module": null }, { "abbrev": false, "full_module": "Lib.IntVector", "short_module": null }, { "abbrev": false, "full_module": "Lib.Sequence", "short_module": null }, { "abbrev": false, "full_module": "Lib.IntTypes", "short_module": null }, { "abbrev": false, "full_module": "FStar.Mul", "short_module": null }, { "abbrev": false, "full_module": "Hacl.Spec.SHA2", "short_module": null }, { "abbrev": false, "full_module": "Hacl.Spec.SHA2", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let transpose_ws_lemma_ij #a #m ws j i = assert (((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v (transpose_ws ws).[i]).[j]); match lanes a m with | 1 -> () | 4 -> transpose_ws4_lemma_ij #a #m ws j i | 8 -> transpose_ws8_lemma_ij #a #m ws j i</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val transpose_ws_lemma_ij: #a:sha2_alg -> #m:m_spec{is_supported a m} -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in ((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v ws.[i / l * l + j]).[i % l]) let transpose_ws_lemma_ij #a #m ws j i =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">assert (((ws_spec_v (transpose_ws ws)).[ j ]).[ i ] == (vec_v (transpose_ws ws).[ i ]).[ j ]); match lanes a m with | 1 -> () | 4 -> transpose_ws4_lemma_ij #a #m ws j i | 8 -> transpose_ws8_lemma_ij #a #m ws j i</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Hacl.Spec.SHA2.Lemmas.fst.checked", "dependencies": [ "Spec.Hash.Definitions.fst.checked", "prims.fst.checked", "Lib.Sequence.fsti.checked", "Lib.IntVector.Transpose.fsti.checked", "Lib.IntVector.fsti.checked", "Lib.IntTypes.fsti.checked", "Hacl.Spec.SHA2.Vec.fst.checked", "FStar.Seq.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.Mul.fst.checked" ], "interface_file": false, "source_file": "Hacl.Spec.SHA2.Lemmas.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "lemma" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "Spec.Hash.Definitions.sha2_alg", "Hacl.Spec.SHA2.Vec.m_spec", "Hacl.Spec.SHA2.Vec.is_supported", "Hacl.Spec.SHA2.Vec.ws_spec", "Prims.nat", "Prims.b2t", "Prims.op_LessThan", "Hacl.Spec.SHA2.Vec.lanes", "Hacl.Spec.SHA2.Lemmas.transpose_ws4_lemma_ij", "Hacl.Spec.SHA2.Lemmas.transpose_ws8_lemma_ij", "Prims.unit", "Prims._assert", "Prims.eq2", "Lib.IntTypes.uint_t", "Spec.Hash.Definitions.word_t", "Lib.IntTypes.SEC", "Prims.l_or", "Hacl.Spec.SHA2.Vec.word", "FStar.Seq.Base.index", "Lib.Sequence.to_seq", "Lib.Sequence.op_String_Access", "Lib.Sequence.lseq", "Hacl.Spec.SHA2.Vec.ws_spec_v", "Hacl.Spec.SHA2.Vec.transpose_ws", "Lib.IntVector.vec_v", "Hacl.Spec.SHA2.Vec.element_t" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Hacl.Spec.SHA2.Lemmas open FStar.Mul open Lib.IntTypes open Lib.Sequence open Lib.IntVector open Lib.IntVector.Transpose open Spec.Hash.Definitions open Hacl.Spec.SHA2.Vec #set-options "--z3rlimit 50 --fuel 0 --ifuel 1" val transpose_ws4_lemma_ij: #a:sha2_alg -> #m:m_spec{lanes a m == 4} // lanes a m * lanes a m = 16 -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in (vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l]) let transpose_ws4_lemma_ij #a #m ws j i = let l = lanes a m in let i_sub = i / l in let j_sub = i % l in assert (i_sub * l + j_sub == i); let vs = sub ws (i_sub * l) l in eq_intro (sub (transpose_ws4 ws) (i_sub * l) l) (transpose4x4_lseq vs); //assert ((transpose_ws4 ws).[i] == (sub (transpose_ws4 ws) (i_sub * l) l).[j_sub]); //assert ((transpose_ws4 ws).[i] == (transpose4x4_lseq vs).[j_sub]); assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v (transpose4x4_lseq vs).[j_sub]).[j]); transpose4x4_lemma vs; assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v vs.[j]).[j_sub]); assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i_sub * l + j]).[j_sub]) val transpose_ws8_lemma_ij: #a:sha2_alg -> #m:m_spec{lanes a m == 8} -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in (vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l]) let transpose_ws8_lemma_ij #a #m ws j i = let l = lanes a m in let i_sub = i / l in let j_sub = i % l in assert (i_sub * l + j_sub == i); let vs = sub ws (i_sub * l) l in eq_intro (sub (transpose_ws8 ws) (i_sub * l) l) (transpose8x8_lseq vs); assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v (transpose8x8_lseq vs).[j_sub]).[j]); transpose8x8_lemma vs; assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i_sub * lanes a m + j]).[j_sub]) val transpose_ws_lemma_ij: #a:sha2_alg -> #m:m_spec{is_supported a m} -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in ((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v ws.[i / l * l + j]).[i % l])</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Hacl.Spec.SHA2.Lemmas.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 0, "initial_ifuel": 1, "max_fuel": 0, "max_ifuel": 1, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": false, "smtencoding_l_arith_repr": "boxwrap", "smtencoding_nl_arith_repr": "boxwrap", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": false, "z3cliopt": [], "z3refresh": false, "z3rlimit": 50, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val transpose_ws_lemma_ij: #a:sha2_alg -> #m:m_spec{is_supported a m} -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in ((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v ws.[i / l * l + j]).[i % l])</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Hacl.Spec.SHA2.Lemmas.transpose_ws_lemma_ij</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "code/sha2-mb/Hacl.Spec.SHA2.Lemmas.fst", "git_rev": "12c5e9539c7e3c366c26409d3b86493548c4483e", "git_url": "https://github.com/hacl-star/hacl-star.git", "project_name": "hacl-star" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto"> ws: Hacl.Spec.SHA2.Vec.ws_spec a m -> j: Prims.nat{j &lt; Hacl.Spec.SHA2.Vec.lanes a m} -> i: Prims.nat{i &lt; 16} -> FStar.Pervasives.Lemma (ensures (let l = Hacl.Spec.SHA2.Vec.lanes a m in (Hacl.Spec.SHA2.Vec.ws_spec_v (Hacl.Spec.SHA2.Vec.transpose_ws ws)).[ j ].[ i ] == (Lib.IntVector.vec_v ws.[ (i / l) * l + j ]).[ i % l ]))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 44, "end_line": 79, "start_col": 2, "start_line": 75 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="11"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">FStar.Pervasives.Lemma</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val transpose_ws8_lemma_ij: #a:sha2_alg -> #m:m_spec{lanes a m == 8} -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in (vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": false, "full_module": "Hacl.Spec.SHA2.Vec", "short_module": null }, { "abbrev": false, "full_module": "Spec.Hash.Definitions", "short_module": null }, { "abbrev": false, "full_module": "Lib.IntVector.Transpose", "short_module": null }, { "abbrev": false, "full_module": "Lib.IntVector", "short_module": null }, { "abbrev": false, "full_module": "Lib.Sequence", "short_module": null }, { "abbrev": false, "full_module": "Lib.IntTypes", "short_module": null }, { "abbrev": false, "full_module": "FStar.Mul", "short_module": null }, { "abbrev": false, "full_module": "Hacl.Spec.SHA2", "short_module": null }, { "abbrev": false, "full_module": "Hacl.Spec.SHA2", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let transpose_ws8_lemma_ij #a #m ws j i = let l = lanes a m in let i_sub = i / l in let j_sub = i % l in assert (i_sub * l + j_sub == i); let vs = sub ws (i_sub * l) l in eq_intro (sub (transpose_ws8 ws) (i_sub * l) l) (transpose8x8_lseq vs); assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v (transpose8x8_lseq vs).[j_sub]).[j]); transpose8x8_lemma vs; assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i_sub * lanes a m + j]).[j_sub])</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val transpose_ws8_lemma_ij: #a:sha2_alg -> #m:m_spec{lanes a m == 8} -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in (vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l]) let transpose_ws8_lemma_ij #a #m ws j i =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let l = lanes a m in let i_sub = i / l in let j_sub = i % l in assert (i_sub * l + j_sub == i); let vs = sub ws (i_sub * l) l in eq_intro (sub (transpose_ws8 ws) (i_sub * l) l) (transpose8x8_lseq vs); assert ((vec_v (transpose_ws8 ws).[ i ]).[ j ] == (vec_v (transpose8x8_lseq vs).[ j_sub ]).[ j ]); transpose8x8_lemma vs; assert ((vec_v (transpose_ws8 ws).[ i ]).[ j ] == (vec_v ws.[ i_sub * lanes a m + j ]).[ j_sub ])</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Hacl.Spec.SHA2.Lemmas.fst.checked", "dependencies": [ "Spec.Hash.Definitions.fst.checked", "prims.fst.checked", "Lib.Sequence.fsti.checked", "Lib.IntVector.Transpose.fsti.checked", "Lib.IntVector.fsti.checked", "Lib.IntTypes.fsti.checked", "Hacl.Spec.SHA2.Vec.fst.checked", "FStar.Seq.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.Mul.fst.checked" ], "interface_file": false, "source_file": "Hacl.Spec.SHA2.Lemmas.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "lemma" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "Spec.Hash.Definitions.sha2_alg", "Hacl.Spec.SHA2.Vec.m_spec", "Prims.eq2", "Prims.int", "Hacl.Spec.SHA2.Vec.lanes", "Hacl.Spec.SHA2.Vec.ws_spec", "Prims.nat", "Prims.b2t", "Prims.op_LessThan", "Prims._assert", "Lib.IntTypes.uint_t", "Spec.Hash.Definitions.word_t", "Lib.IntTypes.SEC", "Prims.l_or", "FStar.Seq.Base.index", "Lib.Sequence.to_seq", "Lib.IntVector.vec_v", "Lib.Sequence.op_String_Access", "Hacl.Spec.SHA2.Vec.element_t", "Prims.op_Addition", "FStar.Mul.op_Star", "Hacl.Spec.SHA2.Vec.transpose_ws8", "Prims.unit", "Lib.IntVector.Transpose.transpose8x8_lemma", "Lib.IntVector.vec_t", "Lib.IntVector.Transpose.transpose8x8_lseq", "Lib.Sequence.eq_intro", "Lib.Sequence.sub", "Lib.Sequence.lseq", "Prims.l_and", "FStar.Seq.Base.seq", "FStar.Seq.Base.slice", "Prims.op_Multiply", "Prims.l_Forall", "Lib.Sequence.index", "Prims.op_Modulus", "Prims.op_Division", "Hacl.Spec.SHA2.Vec.lanes_t" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Hacl.Spec.SHA2.Lemmas open FStar.Mul open Lib.IntTypes open Lib.Sequence open Lib.IntVector open Lib.IntVector.Transpose open Spec.Hash.Definitions open Hacl.Spec.SHA2.Vec #set-options "--z3rlimit 50 --fuel 0 --ifuel 1" val transpose_ws4_lemma_ij: #a:sha2_alg -> #m:m_spec{lanes a m == 4} // lanes a m * lanes a m = 16 -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in (vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l]) let transpose_ws4_lemma_ij #a #m ws j i = let l = lanes a m in let i_sub = i / l in let j_sub = i % l in assert (i_sub * l + j_sub == i); let vs = sub ws (i_sub * l) l in eq_intro (sub (transpose_ws4 ws) (i_sub * l) l) (transpose4x4_lseq vs); //assert ((transpose_ws4 ws).[i] == (sub (transpose_ws4 ws) (i_sub * l) l).[j_sub]); //assert ((transpose_ws4 ws).[i] == (transpose4x4_lseq vs).[j_sub]); assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v (transpose4x4_lseq vs).[j_sub]).[j]); transpose4x4_lemma vs; assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v vs.[j]).[j_sub]); assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i_sub * l + j]).[j_sub]) val transpose_ws8_lemma_ij: #a:sha2_alg -> #m:m_spec{lanes a m == 8} -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in (vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Hacl.Spec.SHA2.Lemmas.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 0, "initial_ifuel": 1, "max_fuel": 0, "max_ifuel": 1, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": false, "smtencoding_l_arith_repr": "boxwrap", "smtencoding_nl_arith_repr": "boxwrap", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": false, "z3cliopt": [], "z3refresh": false, "z3rlimit": 50, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val transpose_ws8_lemma_ij: #a:sha2_alg -> #m:m_spec{lanes a m == 8} -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in (vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l])</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Hacl.Spec.SHA2.Lemmas.transpose_ws8_lemma_ij</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "code/sha2-mb/Hacl.Spec.SHA2.Lemmas.fst", "git_rev": "12c5e9539c7e3c366c26409d3b86493548c4483e", "git_url": "https://github.com/hacl-star/hacl-star.git", "project_name": "hacl-star" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto"> ws: Hacl.Spec.SHA2.Vec.ws_spec a m -> j: Prims.nat{j &lt; Hacl.Spec.SHA2.Vec.lanes a m} -> i: Prims.nat{i &lt; 16} -> FStar.Pervasives.Lemma (ensures (let l = Hacl.Spec.SHA2.Vec.lanes a m in (Lib.IntVector.vec_v (Hacl.Spec.SHA2.Vec.transpose_ws8 ws).[ i ]).[ j ] == (Lib.IntVector.vec_v ws.[ (i / l) * l + j ]).[ i % l ]))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 91, "end_line": 61, "start_col": 41, "start_line": 51 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="12"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">FStar.Pervasives.Lemma</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val transpose_state4_lemma: #a:sha2_alg -> #m:m_spec{lanes a m == 4} -> st:state_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 8 * word_length a} -> Lemma (let l = lanes a m in let ind = 8 * j + i / word_length a in Seq.index (vec_v (transpose_state st).[ind / l]) (ind % l) == Seq.index (state_spec_v st).[j] (i / word_length a))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": false, "full_module": "Hacl.Spec.SHA2.Vec", "short_module": null }, { "abbrev": false, "full_module": "Spec.Hash.Definitions", "short_module": null }, { "abbrev": false, "full_module": "Lib.IntVector.Transpose", "short_module": null }, { "abbrev": false, "full_module": "Lib.IntVector", "short_module": null }, { "abbrev": false, "full_module": "Lib.Sequence", "short_module": null }, { "abbrev": false, "full_module": "Lib.IntTypes", "short_module": null }, { "abbrev": false, "full_module": "FStar.Mul", "short_module": null }, { "abbrev": false, "full_module": "Hacl.Spec.SHA2", "short_module": null }, { "abbrev": false, "full_module": "Hacl.Spec.SHA2", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let transpose_state4_lemma #a #m st j i = let r0 = transpose4x4_lseq (sub st 0 4) in transpose4x4_lemma (sub st 0 4); let r1 = transpose4x4_lseq (sub st 4 4) in transpose4x4_lemma (sub st 4 4)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val transpose_state4_lemma: #a:sha2_alg -> #m:m_spec{lanes a m == 4} -> st:state_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 8 * word_length a} -> Lemma (let l = lanes a m in let ind = 8 * j + i / word_length a in Seq.index (vec_v (transpose_state st).[ind / l]) (ind % l) == Seq.index (state_spec_v st).[j] (i / word_length a)) let transpose_state4_lemma #a #m st j i =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let r0 = transpose4x4_lseq (sub st 0 4) in transpose4x4_lemma (sub st 0 4); let r1 = transpose4x4_lseq (sub st 4 4) in transpose4x4_lemma (sub st 4 4)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Hacl.Spec.SHA2.Lemmas.fst.checked", "dependencies": [ "Spec.Hash.Definitions.fst.checked", "prims.fst.checked", "Lib.Sequence.fsti.checked", "Lib.IntVector.Transpose.fsti.checked", "Lib.IntVector.fsti.checked", "Lib.IntTypes.fsti.checked", "Hacl.Spec.SHA2.Vec.fst.checked", "FStar.Seq.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.Mul.fst.checked" ], "interface_file": false, "source_file": "Hacl.Spec.SHA2.Lemmas.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "lemma" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "Spec.Hash.Definitions.sha2_alg", "Hacl.Spec.SHA2.Vec.m_spec", "Prims.eq2", "Prims.int", "Hacl.Spec.SHA2.Vec.lanes", "Hacl.Spec.SHA2.Vec.state_spec", "Prims.nat", "Prims.b2t", "Prims.op_LessThan", "FStar.Mul.op_Star", "Spec.Hash.Definitions.word_length", "Lib.IntVector.Transpose.transpose4x4_lemma", "Spec.Hash.Definitions.word_t", "Lib.Sequence.sub", "Hacl.Spec.SHA2.Vec.element_t", "Lib.Sequence.lseq", "Lib.IntVector.vec_t", "Lib.IntVector.Transpose.transpose4x4_lseq", "Prims.unit" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Hacl.Spec.SHA2.Lemmas open FStar.Mul open Lib.IntTypes open Lib.Sequence open Lib.IntVector open Lib.IntVector.Transpose open Spec.Hash.Definitions open Hacl.Spec.SHA2.Vec #set-options "--z3rlimit 50 --fuel 0 --ifuel 1" val transpose_ws4_lemma_ij: #a:sha2_alg -> #m:m_spec{lanes a m == 4} // lanes a m * lanes a m = 16 -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in (vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l]) let transpose_ws4_lemma_ij #a #m ws j i = let l = lanes a m in let i_sub = i / l in let j_sub = i % l in assert (i_sub * l + j_sub == i); let vs = sub ws (i_sub * l) l in eq_intro (sub (transpose_ws4 ws) (i_sub * l) l) (transpose4x4_lseq vs); //assert ((transpose_ws4 ws).[i] == (sub (transpose_ws4 ws) (i_sub * l) l).[j_sub]); //assert ((transpose_ws4 ws).[i] == (transpose4x4_lseq vs).[j_sub]); assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v (transpose4x4_lseq vs).[j_sub]).[j]); transpose4x4_lemma vs; assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v vs.[j]).[j_sub]); assert ((vec_v (transpose_ws4 ws).[i]).[j] == (vec_v ws.[i_sub * l + j]).[j_sub]) val transpose_ws8_lemma_ij: #a:sha2_alg -> #m:m_spec{lanes a m == 8} -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in (vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i / l * l + j]).[i % l]) let transpose_ws8_lemma_ij #a #m ws j i = let l = lanes a m in let i_sub = i / l in let j_sub = i % l in assert (i_sub * l + j_sub == i); let vs = sub ws (i_sub * l) l in eq_intro (sub (transpose_ws8 ws) (i_sub * l) l) (transpose8x8_lseq vs); assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v (transpose8x8_lseq vs).[j_sub]).[j]); transpose8x8_lemma vs; assert ((vec_v (transpose_ws8 ws).[i]).[j] == (vec_v ws.[i_sub * lanes a m + j]).[j_sub]) val transpose_ws_lemma_ij: #a:sha2_alg -> #m:m_spec{is_supported a m} -> ws:ws_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 16} -> Lemma (let l = lanes a m in ((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v ws.[i / l * l + j]).[i % l]) let transpose_ws_lemma_ij #a #m ws j i = assert (((ws_spec_v (transpose_ws ws)).[j]).[i] == (vec_v (transpose_ws ws).[i]).[j]); match lanes a m with | 1 -> () | 4 -> transpose_ws4_lemma_ij #a #m ws j i | 8 -> transpose_ws8_lemma_ij #a #m ws j i val transpose_state4_lemma: #a:sha2_alg -> #m:m_spec{lanes a m == 4} -> st:state_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 8 * word_length a} -> Lemma (let l = lanes a m in let ind = 8 * j + i / word_length a in Seq.index (vec_v (transpose_state st).[ind / l]) (ind % l) == Seq.index (state_spec_v st).[j] (i / word_length a))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Hacl.Spec.SHA2.Lemmas.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 0, "initial_ifuel": 1, "max_fuel": 0, "max_ifuel": 1, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": false, "smtencoding_l_arith_repr": "boxwrap", "smtencoding_nl_arith_repr": "boxwrap", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": false, "z3cliopt": [], "z3refresh": false, "z3rlimit": 50, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val transpose_state4_lemma: #a:sha2_alg -> #m:m_spec{lanes a m == 4} -> st:state_spec a m -> j:nat{j &lt; lanes a m} -> i:nat{i &lt; 8 * word_length a} -> Lemma (let l = lanes a m in let ind = 8 * j + i / word_length a in Seq.index (vec_v (transpose_state st).[ind / l]) (ind % l) == Seq.index (state_spec_v st).[j] (i / word_length a))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Hacl.Spec.SHA2.Lemmas.transpose_state4_lemma</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "code/sha2-mb/Hacl.Spec.SHA2.Lemmas.fst", "git_rev": "12c5e9539c7e3c366c26409d3b86493548c4483e", "git_url": "https://github.com/hacl-star/hacl-star.git", "project_name": "hacl-star" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto"> st: Hacl.Spec.SHA2.Vec.state_spec a m -> j: Prims.nat{j &lt; Hacl.Spec.SHA2.Vec.lanes a m} -> i: Prims.nat{i &lt; 8 * Spec.Hash.Definitions.word_length a} -> FStar.Pervasives.Lemma (ensures (let l = Hacl.Spec.SHA2.Vec.lanes a m in let ind = 8 * j + i / Spec.Hash.Definitions.word_length a in FStar.Seq.Base.index (Lib.IntVector.vec_v (Hacl.Spec.SHA2.Vec.transpose_state st).[ ind / l ]) (ind % l) == FStar.Seq.Base.index (Hacl.Spec.SHA2.Vec.state_spec_v st).[ j ] (i / Spec.Hash.Definitions.word_length a)))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 33, "end_line": 98, "start_col": 41, "start_line": 94 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="13"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Prims.Tot</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto"></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": false, "full_module": "Pulse.Reflection.Util", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Typing", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Elaborate.Pure", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Syntax", "short_module": null }, { "abbrev": false, "full_module": "FStar.List.Tot", "short_module": null }, { "abbrev": true, "full_module": "FStar.Tactics.V2", "short_module": "T" }, { "abbrev": true, "full_module": "FStar.List.Tot", "short_module": "L" }, { "abbrev": true, "full_module": "FStar.Reflection.V2", "short_module": "R" }, { "abbrev": true, "full_module": "FStar.Reflection.Typing", "short_module": "RT" }, { "abbrev": false, "full_module": "Pulse.Elaborate", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Elaborate", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let elab_frame (c:comp_st) (frame:term) (e:R.term) = let u = comp_u c in let ty = elab_term (comp_res c) in let pre = elab_term (comp_pre c) in let post = elab_term (comp_post c) in if C_ST? c then mk_frame_stt u ty pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e else let opened = elab_term (comp_inames c) in if C_STAtomic? c then mk_frame_stt_atomic u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e else let _ = assert (C_STGhost? c) in mk_frame_stt_ghost u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let elab_frame (c: comp_st) (frame: term) (e: R.term) =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let u = comp_u c in let ty = elab_term (comp_res c) in let pre = elab_term (comp_pre c) in let post = elab_term (comp_post c) in if C_ST? c then mk_frame_stt u ty pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e else let opened = elab_term (comp_inames c) in if C_STAtomic? c then mk_frame_stt_atomic u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e else let _ = assert (C_STGhost? c) in mk_frame_stt_ghost u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Pulse.Elaborate.Core.fst.checked", "dependencies": [ "Pulse.Typing.fst.checked", "Pulse.Syntax.fst.checked", "Pulse.Reflection.Util.fst.checked", "Pulse.Elaborate.Pure.fst.checked", "prims.fst.checked", "FStar.Tactics.V2.fst.checked", "FStar.Reflection.V2.fst.checked", "FStar.Reflection.Typing.fsti.checked", "FStar.Range.fsti.checked", "FStar.Pervasives.Native.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.List.Tot.fst.checked" ], "interface_file": false, "source_file": "Pulse.Elaborate.Core.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "total" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "Pulse.Syntax.Base.comp_st", "Pulse.Syntax.Base.term", "FStar.Reflection.Types.term", "Pulse.Syntax.Base.uu___is_C_ST", "Pulse.Reflection.Util.mk_frame_stt", "Pulse.Reflection.Util.mk_abs", "FStar.Reflection.V2.Data.Q_Explicit", "Pulse.Elaborate.Pure.elab_term", "Prims.bool", "Pulse.Syntax.Base.uu___is_C_STAtomic", "Pulse.Reflection.Util.mk_frame_stt_atomic", "Pulse.Reflection.Util.mk_frame_stt_ghost", "Prims.unit", "Prims._assert", "Prims.b2t", "Pulse.Syntax.Base.uu___is_C_STGhost", "Pulse.Syntax.Base.comp_inames", "Pulse.Syntax.Base.comp_post", "Pulse.Syntax.Base.comp_pre", "Pulse.Syntax.Base.comp_res", "Pulse.Syntax.Base.universe", "Pulse.Syntax.Base.comp_u" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Pulse.Elaborate.Core module RT = FStar.Reflection.Typing module R = FStar.Reflection.V2 module L = FStar.List.Tot module T = FStar.Tactics.V2 open FStar.List.Tot open Pulse.Syntax open Pulse.Elaborate.Pure open Pulse.Typing open Pulse.Reflection.Util</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Pulse.Elaborate.Core.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 2, "initial_ifuel": 1, "max_fuel": 8, "max_ifuel": 2, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": false, "smtencoding_l_arith_repr": "boxwrap", "smtencoding_nl_arith_repr": "boxwrap", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": true, "z3cliopt": [], "z3refresh": false, "z3rlimit": 5, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val elab_frame : c: Pulse.Syntax.Base.comp_st -> frame: Pulse.Syntax.Base.term -> e: FStar.Reflection.Types.term -> FStar.Reflection.Types.term</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Pulse.Elaborate.Core.elab_frame</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "lib/steel/pulse/Pulse.Elaborate.Core.fst", "git_rev": "7fbb54e94dd4f48ff7cb867d3bae6889a635541e", "git_url": "https://github.com/FStarLang/steel.git", "project_name": "steel" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">c: Pulse.Syntax.Base.comp_st -> frame: Pulse.Syntax.Base.term -> e: FStar.Reflection.Types.term -> FStar.Reflection.Types.term</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 96, "end_line": 24, "start_col": 52, "start_line": 13 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="14"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Prims.Tot</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto"></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": false, "full_module": "Pulse.Reflection.Util", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Typing", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Elaborate.Pure", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Syntax", "short_module": null }, { "abbrev": false, "full_module": "FStar.List.Tot", "short_module": null }, { "abbrev": true, "full_module": "FStar.Tactics.V2", "short_module": "T" }, { "abbrev": true, "full_module": "FStar.List.Tot", "short_module": "L" }, { "abbrev": true, "full_module": "FStar.Reflection.V2", "short_module": "R" }, { "abbrev": true, "full_module": "FStar.Reflection.Typing", "short_module": "RT" }, { "abbrev": false, "full_module": "Pulse.Elaborate", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Elaborate", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let elab_sub (c1 c2:comp_st) (e:R.term) = let ty = elab_term (comp_res c1) in let u = comp_u c1 in let pre1 = elab_term (comp_pre c1) in let pre2 = elab_term (comp_pre c2) in let post1 = mk_abs ty R.Q_Explicit (elab_term (comp_post c1)) in let post2 = mk_abs ty R.Q_Explicit (elab_term (comp_post c2)) in if C_ST? c1 then mk_sub_stt u ty pre1 pre2 post1 post2 e else let opened = elab_term (comp_inames c1) in if C_STAtomic? c1 then mk_sub_stt_atomic u ty opened pre1 pre2 post1 post2 e else let _ = assert (C_STGhost? c1) in mk_sub_stt_ghost u ty opened pre1 pre2 post1 post2 e</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let elab_sub (c1 c2: comp_st) (e: R.term) =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let ty = elab_term (comp_res c1) in let u = comp_u c1 in let pre1 = elab_term (comp_pre c1) in let pre2 = elab_term (comp_pre c2) in let post1 = mk_abs ty R.Q_Explicit (elab_term (comp_post c1)) in let post2 = mk_abs ty R.Q_Explicit (elab_term (comp_post c2)) in if C_ST? c1 then mk_sub_stt u ty pre1 pre2 post1 post2 e else let opened = elab_term (comp_inames c1) in if C_STAtomic? c1 then mk_sub_stt_atomic u ty opened pre1 pre2 post1 post2 e else let _ = assert (C_STGhost? c1) in mk_sub_stt_ghost u ty opened pre1 pre2 post1 post2 e</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Pulse.Elaborate.Core.fst.checked", "dependencies": [ "Pulse.Typing.fst.checked", "Pulse.Syntax.fst.checked", "Pulse.Reflection.Util.fst.checked", "Pulse.Elaborate.Pure.fst.checked", "prims.fst.checked", "FStar.Tactics.V2.fst.checked", "FStar.Reflection.V2.fst.checked", "FStar.Reflection.Typing.fsti.checked", "FStar.Range.fsti.checked", "FStar.Pervasives.Native.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.List.Tot.fst.checked" ], "interface_file": false, "source_file": "Pulse.Elaborate.Core.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "total" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "Pulse.Syntax.Base.comp_st", "FStar.Reflection.Types.term", "Pulse.Syntax.Base.uu___is_C_ST", "Pulse.Reflection.Util.mk_sub_stt", "Prims.bool", "Pulse.Syntax.Base.uu___is_C_STAtomic", "Pulse.Reflection.Util.mk_sub_stt_atomic", "Pulse.Reflection.Util.mk_sub_stt_ghost", "Prims.unit", "Prims._assert", "Prims.b2t", "Pulse.Syntax.Base.uu___is_C_STGhost", "Pulse.Elaborate.Pure.elab_term", "Pulse.Syntax.Base.comp_inames", "Pulse.Reflection.Util.mk_abs", "FStar.Reflection.V2.Data.Q_Explicit", "Pulse.Syntax.Base.comp_post", "Pulse.Syntax.Base.comp_pre", "Pulse.Syntax.Base.universe", "Pulse.Syntax.Base.comp_u", "Pulse.Syntax.Base.comp_res" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Pulse.Elaborate.Core module RT = FStar.Reflection.Typing module R = FStar.Reflection.V2 module L = FStar.List.Tot module T = FStar.Tactics.V2 open FStar.List.Tot open Pulse.Syntax open Pulse.Elaborate.Pure open Pulse.Typing open Pulse.Reflection.Util let elab_frame (c:comp_st) (frame:term) (e:R.term) = let u = comp_u c in let ty = elab_term (comp_res c) in let pre = elab_term (comp_pre c) in let post = elab_term (comp_post c) in if C_ST? c then mk_frame_stt u ty pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e else let opened = elab_term (comp_inames c) in if C_STAtomic? c then mk_frame_stt_atomic u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e else let _ = assert (C_STGhost? c) in mk_frame_stt_ghost u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Pulse.Elaborate.Core.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 2, "initial_ifuel": 1, "max_fuel": 8, "max_ifuel": 2, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": false, "smtencoding_l_arith_repr": "boxwrap", "smtencoding_nl_arith_repr": "boxwrap", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": true, "z3cliopt": [], "z3refresh": false, "z3rlimit": 5, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val elab_sub : c1: Pulse.Syntax.Base.comp_st -> c2: Pulse.Syntax.Base.comp_st -> e: FStar.Reflection.Types.term -> FStar.Reflection.Types.term</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Pulse.Elaborate.Core.elab_sub</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "lib/steel/pulse/Pulse.Elaborate.Core.fst", "git_rev": "7fbb54e94dd4f48ff7cb867d3bae6889a635541e", "git_url": "https://github.com/FStarLang/steel.git", "project_name": "steel" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">c1: Pulse.Syntax.Base.comp_st -> c2: Pulse.Syntax.Base.comp_st -> e: FStar.Reflection.Types.term -> FStar.Reflection.Types.term</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 64, "end_line": 39, "start_col": 41, "start_line": 26 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="15"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Prims.Tot</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto"></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": false, "full_module": "Pulse.Reflection.Util", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Typing", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Elaborate.Pure", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Syntax", "short_module": null }, { "abbrev": false, "full_module": "FStar.List.Tot", "short_module": null }, { "abbrev": true, "full_module": "FStar.Tactics.V2", "short_module": "T" }, { "abbrev": true, "full_module": "FStar.List.Tot", "short_module": "L" }, { "abbrev": true, "full_module": "FStar.Reflection.V2", "short_module": "R" }, { "abbrev": true, "full_module": "FStar.Reflection.Typing", "short_module": "RT" }, { "abbrev": false, "full_module": "Pulse.Elaborate", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Elaborate", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let intro_pure_tm (p:term) = let open Pulse.Reflection.Util in wtag (Some STT_Ghost) (Tm_STApp { head = tm_pureapp (tm_fvar (as_fv (mk_pulse_lib_core_lid "intro_pure"))) None p; arg_qual = None; arg = tm_fstar (`()) Range.range_0 })</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let intro_pure_tm (p: term) =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let open Pulse.Reflection.Util in wtag (Some STT_Ghost) (Tm_STApp ({ head = tm_pureapp (tm_fvar (as_fv (mk_pulse_lib_core_lid "intro_pure"))) None p; arg_qual = None; arg = tm_fstar (`()) Range.range_0 }))</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Pulse.Elaborate.Core.fst.checked", "dependencies": [ "Pulse.Typing.fst.checked", "Pulse.Syntax.fst.checked", "Pulse.Reflection.Util.fst.checked", "Pulse.Elaborate.Pure.fst.checked", "prims.fst.checked", "FStar.Tactics.V2.fst.checked", "FStar.Reflection.V2.fst.checked", "FStar.Reflection.Typing.fsti.checked", "FStar.Range.fsti.checked", "FStar.Pervasives.Native.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.List.Tot.fst.checked" ], "interface_file": false, "source_file": "Pulse.Elaborate.Core.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "total" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "Pulse.Syntax.Base.term", "Pulse.Typing.wtag", "FStar.Pervasives.Native.Some", "Pulse.Syntax.Base.ctag", "Pulse.Syntax.Base.STT_Ghost", "Pulse.Syntax.Base.Tm_STApp", "Pulse.Syntax.Base.Mkst_term'__Tm_STApp__payload", "Pulse.Syntax.Pure.tm_pureapp", "Pulse.Syntax.Pure.tm_fvar", "Pulse.Syntax.Base.as_fv", "Pulse.Reflection.Util.mk_pulse_lib_core_lid", "FStar.Pervasives.Native.None", "Pulse.Syntax.Base.qualifier", "Pulse.Syntax.Base.tm_fstar", "FStar.Range.range_0", "Pulse.Syntax.Base.st_term" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Pulse.Elaborate.Core module RT = FStar.Reflection.Typing module R = FStar.Reflection.V2 module L = FStar.List.Tot module T = FStar.Tactics.V2 open FStar.List.Tot open Pulse.Syntax open Pulse.Elaborate.Pure open Pulse.Typing open Pulse.Reflection.Util let elab_frame (c:comp_st) (frame:term) (e:R.term) = let u = comp_u c in let ty = elab_term (comp_res c) in let pre = elab_term (comp_pre c) in let post = elab_term (comp_post c) in if C_ST? c then mk_frame_stt u ty pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e else let opened = elab_term (comp_inames c) in if C_STAtomic? c then mk_frame_stt_atomic u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e else let _ = assert (C_STGhost? c) in mk_frame_stt_ghost u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e let elab_sub (c1 c2:comp_st) (e:R.term) = let ty = elab_term (comp_res c1) in let u = comp_u c1 in let pre1 = elab_term (comp_pre c1) in let pre2 = elab_term (comp_pre c2) in let post1 = mk_abs ty R.Q_Explicit (elab_term (comp_post c1)) in let post2 = mk_abs ty R.Q_Explicit (elab_term (comp_post c2)) in if C_ST? c1 then mk_sub_stt u ty pre1 pre2 post1 post2 e else let opened = elab_term (comp_inames c1) in if C_STAtomic? c1 then mk_sub_stt_atomic u ty opened pre1 pre2 post1 post2 e else let _ = assert (C_STGhost? c1) in mk_sub_stt_ghost u ty opened pre1 pre2 post1 post2 e let elab_bind #g #x #c1 #c2 #c (bc:bind_comp g x c1 c2 c) (e1 e2:R.term) : R.term = let t1 = elab_term (comp_res c1) in let t2 = elab_term (comp_res c2) in match bc with | Bind_comp _ _ _ _ _ _ _ -> if C_ST? c1 then mk_bind_stt (comp_u c1) (comp_u c2) t1 t2 (elab_term (comp_pre c1)) (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1))) (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2))) e1 e2 else mk_bind_ghost (comp_u c1) (comp_u c2) t1 t2 (elab_term (comp_inames c1)) (elab_term (comp_pre c1)) (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1))) (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2))) e1 e2 | Bind_comp_ghost_l _ _ _ _ (| reveal_a, reveal_a_typing |) _ _ _ -> mk_bind_ghost_atomic (comp_u c1) (comp_u c2) t1 t2 (elab_term (comp_inames c1)) (elab_term (comp_pre c1)) (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1))) (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2))) e1 e2 (elab_term reveal_a) | Bind_comp_ghost_r _ _ _ _ (| reveal_b, reveal_b_typing |) _ _ _ -> mk_bind_atomic_ghost (comp_u c1) (comp_u c2) t1 t2 (elab_term (comp_inames c1)) (elab_term (comp_pre c1)) (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1))) (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2))) e1 e2 (elab_term reveal_b) let elab_lift #g #c1 #c2 (d:lift_comp g c1 c2) (e:R.term) : Tot R.term = match d with | Lift_STAtomic_ST _ _ -> let t = elab_term (comp_res c1) in mk_lift_atomic_stt (comp_u c1) (elab_term (comp_res c1)) t (mk_abs t R.Q_Explicit (elab_term (comp_post c1))) e | Lift_STGhost_STAtomic _ _ (| reveal_a, reveal_a_typing |) -> let t = elab_term (comp_res c1) in mk_lift_ghost_atomic (comp_u c1) t (elab_term (comp_inames c1)) (elab_term (comp_pre c1)) (mk_abs t R.Q_Explicit (elab_term (comp_post c1))) e (elab_term reveal_a)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Pulse.Elaborate.Core.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 2, "initial_ifuel": 1, "max_fuel": 8, "max_ifuel": 2, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": false, "smtencoding_l_arith_repr": "boxwrap", "smtencoding_nl_arith_repr": "boxwrap", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": true, "z3cliopt": [], "z3refresh": false, "z3rlimit": 5, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val intro_pure_tm : p: Pulse.Syntax.Base.term -> Pulse.Syntax.Base.st_term</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Pulse.Elaborate.Core.intro_pure_tm</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "lib/steel/pulse/Pulse.Elaborate.Core.fst", "git_rev": "7fbb54e94dd4f48ff7cb867d3bae6889a635541e", "git_url": "https://github.com/FStarLang/steel.git", "project_name": "steel" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">p: Pulse.Syntax.Base.term -> Pulse.Syntax.Base.st_term</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 47, "end_line": 127, "start_col": 2, "start_line": 119 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="16"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Prims.Tot</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val elab_lift (#g #c1 #c2: _) (d: lift_comp g c1 c2) (e: R.term) : Tot R.term</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": false, "full_module": "Pulse.Reflection.Util", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Typing", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Elaborate.Pure", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Syntax", "short_module": null }, { "abbrev": false, "full_module": "FStar.List.Tot", "short_module": null }, { "abbrev": true, "full_module": "FStar.Tactics.V2", "short_module": "T" }, { "abbrev": true, "full_module": "FStar.List.Tot", "short_module": "L" }, { "abbrev": true, "full_module": "FStar.Reflection.V2", "short_module": "R" }, { "abbrev": true, "full_module": "FStar.Reflection.Typing", "short_module": "RT" }, { "abbrev": false, "full_module": "Pulse.Elaborate", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Elaborate", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let elab_lift #g #c1 #c2 (d:lift_comp g c1 c2) (e:R.term) : Tot R.term = match d with | Lift_STAtomic_ST _ _ -> let t = elab_term (comp_res c1) in mk_lift_atomic_stt (comp_u c1) (elab_term (comp_res c1)) t (mk_abs t R.Q_Explicit (elab_term (comp_post c1))) e | Lift_STGhost_STAtomic _ _ (| reveal_a, reveal_a_typing |) -> let t = elab_term (comp_res c1) in mk_lift_ghost_atomic (comp_u c1) t (elab_term (comp_inames c1)) (elab_term (comp_pre c1)) (mk_abs t R.Q_Explicit (elab_term (comp_post c1))) e (elab_term reveal_a)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val elab_lift (#g #c1 #c2: _) (d: lift_comp g c1 c2) (e: R.term) : Tot R.term let elab_lift #g #c1 #c2 (d: lift_comp g c1 c2) (e: R.term) : Tot R.term =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">match d with | Lift_STAtomic_ST _ _ -> let t = elab_term (comp_res c1) in mk_lift_atomic_stt (comp_u c1) (elab_term (comp_res c1)) t (mk_abs t R.Q_Explicit (elab_term (comp_post c1))) e | Lift_STGhost_STAtomic _ _ (| reveal_a , reveal_a_typing |) -> let t = elab_term (comp_res c1) in mk_lift_ghost_atomic (comp_u c1) t (elab_term (comp_inames c1)) (elab_term (comp_pre c1)) (mk_abs t R.Q_Explicit (elab_term (comp_post c1))) e (elab_term reveal_a)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Pulse.Elaborate.Core.fst.checked", "dependencies": [ "Pulse.Typing.fst.checked", "Pulse.Syntax.fst.checked", "Pulse.Reflection.Util.fst.checked", "Pulse.Elaborate.Pure.fst.checked", "prims.fst.checked", "FStar.Tactics.V2.fst.checked", "FStar.Reflection.V2.fst.checked", "FStar.Reflection.Typing.fsti.checked", "FStar.Range.fsti.checked", "FStar.Pervasives.Native.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.List.Tot.fst.checked" ], "interface_file": false, "source_file": "Pulse.Elaborate.Core.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "total" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "Pulse.Typing.Env.env", "Pulse.Syntax.Base.comp", "Pulse.Typing.lift_comp", "FStar.Reflection.Types.term", "Pulse.Syntax.Base.comp_st", "Prims.l_and", "Prims.b2t", "Pulse.Syntax.Base.uu___is_C_STAtomic", "Prims.eq2", "Pulse.Syntax.Base.term", "Pulse.Syntax.Base.comp_inames", "Pulse.Syntax.Base.tm_emp_inames", "Pulse.Reflection.Util.mk_lift_atomic_stt", "Pulse.Syntax.Base.comp_u", "Pulse.Elaborate.Pure.elab_term", "Pulse.Syntax.Base.comp_res", "Pulse.Reflection.Util.mk_abs", "FStar.Reflection.V2.Data.Q_Explicit", "Pulse.Syntax.Base.comp_post", "Pulse.Syntax.Base.uu___is_C_STGhost", "Pulse.Typing.tot_typing", "Pulse.Typing.non_informative_witness_t", "Pulse.Reflection.Util.mk_lift_ghost_atomic", "Pulse.Syntax.Base.comp_pre" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Pulse.Elaborate.Core module RT = FStar.Reflection.Typing module R = FStar.Reflection.V2 module L = FStar.List.Tot module T = FStar.Tactics.V2 open FStar.List.Tot open Pulse.Syntax open Pulse.Elaborate.Pure open Pulse.Typing open Pulse.Reflection.Util let elab_frame (c:comp_st) (frame:term) (e:R.term) = let u = comp_u c in let ty = elab_term (comp_res c) in let pre = elab_term (comp_pre c) in let post = elab_term (comp_post c) in if C_ST? c then mk_frame_stt u ty pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e else let opened = elab_term (comp_inames c) in if C_STAtomic? c then mk_frame_stt_atomic u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e else let _ = assert (C_STGhost? c) in mk_frame_stt_ghost u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e let elab_sub (c1 c2:comp_st) (e:R.term) = let ty = elab_term (comp_res c1) in let u = comp_u c1 in let pre1 = elab_term (comp_pre c1) in let pre2 = elab_term (comp_pre c2) in let post1 = mk_abs ty R.Q_Explicit (elab_term (comp_post c1)) in let post2 = mk_abs ty R.Q_Explicit (elab_term (comp_post c2)) in if C_ST? c1 then mk_sub_stt u ty pre1 pre2 post1 post2 e else let opened = elab_term (comp_inames c1) in if C_STAtomic? c1 then mk_sub_stt_atomic u ty opened pre1 pre2 post1 post2 e else let _ = assert (C_STGhost? c1) in mk_sub_stt_ghost u ty opened pre1 pre2 post1 post2 e let elab_bind #g #x #c1 #c2 #c (bc:bind_comp g x c1 c2 c) (e1 e2:R.term) : R.term = let t1 = elab_term (comp_res c1) in let t2 = elab_term (comp_res c2) in match bc with | Bind_comp _ _ _ _ _ _ _ -> if C_ST? c1 then mk_bind_stt (comp_u c1) (comp_u c2) t1 t2 (elab_term (comp_pre c1)) (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1))) (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2))) e1 e2 else mk_bind_ghost (comp_u c1) (comp_u c2) t1 t2 (elab_term (comp_inames c1)) (elab_term (comp_pre c1)) (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1))) (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2))) e1 e2 | Bind_comp_ghost_l _ _ _ _ (| reveal_a, reveal_a_typing |) _ _ _ -> mk_bind_ghost_atomic (comp_u c1) (comp_u c2) t1 t2 (elab_term (comp_inames c1)) (elab_term (comp_pre c1)) (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1))) (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2))) e1 e2 (elab_term reveal_a) | Bind_comp_ghost_r _ _ _ _ (| reveal_b, reveal_b_typing |) _ _ _ -> mk_bind_atomic_ghost (comp_u c1) (comp_u c2) t1 t2 (elab_term (comp_inames c1)) (elab_term (comp_pre c1)) (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1))) (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2))) e1 e2 (elab_term reveal_b) let elab_lift #g #c1 #c2 (d:lift_comp g c1 c2) (e:R.term)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Pulse.Elaborate.Core.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 2, "initial_ifuel": 1, "max_fuel": 8, "max_ifuel": 2, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": false, "smtencoding_l_arith_repr": "boxwrap", "smtencoding_nl_arith_repr": "boxwrap", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": true, "z3cliopt": [], "z3refresh": false, "z3rlimit": 5, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val elab_lift (#g #c1 #c2: _) (d: lift_comp g c1 c2) (e: R.term) : Tot R.term</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Pulse.Elaborate.Core.elab_lift</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "lib/steel/pulse/Pulse.Elaborate.Core.fst", "git_rev": "7fbb54e94dd4f48ff7cb867d3bae6889a635541e", "git_url": "https://github.com/FStarLang/steel.git", "project_name": "steel" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">d: Pulse.Typing.lift_comp g c1 c2 -> e: FStar.Reflection.Types.term -> FStar.Reflection.Types.term</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 28, "end_line": 116, "start_col": 4, "start_line": 97 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="17"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Prims.Tot</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val elab_bind (#g #x #c1 #c2 #c: _) (bc: bind_comp g x c1 c2 c) (e1 e2: R.term) : R.term</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": false, "full_module": "Pulse.Reflection.Util", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Typing", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Elaborate.Pure", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Syntax", "short_module": null }, { "abbrev": false, "full_module": "FStar.List.Tot", "short_module": null }, { "abbrev": true, "full_module": "FStar.Tactics.V2", "short_module": "T" }, { "abbrev": true, "full_module": "FStar.List.Tot", "short_module": "L" }, { "abbrev": true, "full_module": "FStar.Reflection.V2", "short_module": "R" }, { "abbrev": true, "full_module": "FStar.Reflection.Typing", "short_module": "RT" }, { "abbrev": false, "full_module": "Pulse.Elaborate", "short_module": null }, { "abbrev": false, "full_module": "Pulse.Elaborate", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let elab_bind #g #x #c1 #c2 #c (bc:bind_comp g x c1 c2 c) (e1 e2:R.term) : R.term = let t1 = elab_term (comp_res c1) in let t2 = elab_term (comp_res c2) in match bc with | Bind_comp _ _ _ _ _ _ _ -> if C_ST? c1 then mk_bind_stt (comp_u c1) (comp_u c2) t1 t2 (elab_term (comp_pre c1)) (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1))) (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2))) e1 e2 else mk_bind_ghost (comp_u c1) (comp_u c2) t1 t2 (elab_term (comp_inames c1)) (elab_term (comp_pre c1)) (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1))) (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2))) e1 e2 | Bind_comp_ghost_l _ _ _ _ (| reveal_a, reveal_a_typing |) _ _ _ -> mk_bind_ghost_atomic (comp_u c1) (comp_u c2) t1 t2 (elab_term (comp_inames c1)) (elab_term (comp_pre c1)) (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1))) (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2))) e1 e2 (elab_term reveal_a) | Bind_comp_ghost_r _ _ _ _ (| reveal_b, reveal_b_typing |) _ _ _ -> mk_bind_atomic_ghost (comp_u c1) (comp_u c2) t1 t2 (elab_term (comp_inames c1)) (elab_term (comp_pre c1)) (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1))) (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2))) e1 e2 (elab_term reveal_b)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val elab_bind (#g #x #c1 #c2 #c: _) (bc: bind_comp g x c1 c2 c) (e1 e2: R.term) : R.term let elab_bind #g #x #c1 #c2 #c (bc: bind_comp g x c1 c2 c) (e1: R.term) (e2: R.term) : R.term =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let t1 = elab_term (comp_res c1) in let t2 = elab_term (comp_res c2) in match bc with | Bind_comp _ _ _ _ _ _ _ -> if C_ST? c1 then mk_bind_stt (comp_u c1) (comp_u c2) t1 t2 (elab_term (comp_pre c1)) (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1))) (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2))) e1 e2 else mk_bind_ghost (comp_u c1) (comp_u c2) t1 t2 (elab_term (comp_inames c1)) (elab_term (comp_pre c1)) (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1))) (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2))) e1 e2 | Bind_comp_ghost_l _ _ _ _ (| reveal_a , reveal_a_typing |) _ _ _ -> mk_bind_ghost_atomic (comp_u c1) (comp_u c2) t1 t2 (elab_term (comp_inames c1)) (elab_term (comp_pre c1)) (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1))) (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2))) e1 e2 (elab_term reveal_a) | Bind_comp_ghost_r _ _ _ _ (| reveal_b , reveal_b_typing |) _ _ _ -> mk_bind_atomic_ghost (comp_u c1) (comp_u c2) t1 t2 (elab_term (comp_inames c1)) (elab_term (comp_pre c1)) (mk_abs t1 R.Q_Explicit (elab_term (comp_post c1))) (mk_abs t2 R.Q_Explicit (elab_term (comp_post c2))) e1 e2 (elab_term reveal_b)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Pulse.Elaborate.Core.fst.checked", "dependencies": [ "Pulse.Typing.fst.checked", "Pulse.Syntax.fst.checked", "Pulse.Reflection.Util.fst.checked", "Pulse.Elaborate.Pure.fst.checked", "prims.fst.checked", "FStar.Tactics.V2.fst.checked", "FStar.Reflection.V2.fst.checked", "FStar.Reflection.Typing.fsti.checked", "FStar.Range.fsti.checked", "FStar.Pervasives.Native.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.List.Tot.fst.checked" ], "interface_file": false, "source_file": "Pulse.Elaborate.Core.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "total" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "Pulse.Typing.Env.env", "Pulse.Syntax.Base.var", "Pulse.Syntax.Base.comp", "Pulse.Typing.bind_comp", "FStar.Reflection.Types.term", "Prims.b2t", "FStar.Pervasives.Native.uu___is_None", "Pulse.Syntax.Base.typ", "Pulse.Typing.Env.lookup", "Pulse.Syntax.Base.comp_st", "Pulse.Typing.bind_comp_pre", "Pulse.Typing.universe_of", "Pulse.Syntax.Base.comp_res", "Pulse.Syntax.Base.comp_u", "Prims.l_and", "Prims.l_not", "FStar.Set.mem", "Pulse.Syntax.Naming.freevars", "Pulse.Syntax.Base.comp_post", "Pulse.Typing.tot_typing", "Pulse.Typing.Env.push_binding", "Pulse.Syntax.Base.ppname_default", "Pulse.Syntax.Naming.open_term", "Pulse.Syntax.Base.tm_vprop", "Pulse.Syntax.Base.uu___is_C_ST", "Pulse.Reflection.Util.mk_bind_stt", "Pulse.Elaborate.Pure.elab_term", "Pulse.Syntax.Base.comp_pre", "Pulse.Reflection.Util.mk_abs", "FStar.Reflection.V2.Data.Q_Explicit", "Prims.bool", "Pulse.Reflection.Util.mk_bind_ghost", "Pulse.Syntax.Base.comp_inames", "Pulse.Typing.bind_comp_ghost_l_pre", "Pulse.Syntax.Base.term", "Pulse.Typing.non_informative_witness_t", "Pulse.Reflection.Util.mk_bind_ghost_atomic", "Pulse.Typing.bind_comp_ghost_r_pre", "Pulse.Reflection.Util.mk_bind_atomic_ghost" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Pulse.Elaborate.Core module RT = FStar.Reflection.Typing module R = FStar.Reflection.V2 module L = FStar.List.Tot module T = FStar.Tactics.V2 open FStar.List.Tot open Pulse.Syntax open Pulse.Elaborate.Pure open Pulse.Typing open Pulse.Reflection.Util let elab_frame (c:comp_st) (frame:term) (e:R.term) = let u = comp_u c in let ty = elab_term (comp_res c) in let pre = elab_term (comp_pre c) in let post = elab_term (comp_post c) in if C_ST? c then mk_frame_stt u ty pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e else let opened = elab_term (comp_inames c) in if C_STAtomic? c then mk_frame_stt_atomic u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e else let _ = assert (C_STGhost? c) in mk_frame_stt_ghost u ty opened pre (mk_abs ty R.Q_Explicit post) (elab_term frame) e let elab_sub (c1 c2:comp_st) (e:R.term) = let ty = elab_term (comp_res c1) in let u = comp_u c1 in let pre1 = elab_term (comp_pre c1) in let pre2 = elab_term (comp_pre c2) in let post1 = mk_abs ty R.Q_Explicit (elab_term (comp_post c1)) in let post2 = mk_abs ty R.Q_Explicit (elab_term (comp_post c2)) in if C_ST? c1 then mk_sub_stt u ty pre1 pre2 post1 post2 e else let opened = elab_term (comp_inames c1) in if C_STAtomic? c1 then mk_sub_stt_atomic u ty opened pre1 pre2 post1 post2 e else let _ = assert (C_STGhost? c1) in mk_sub_stt_ghost u ty opened pre1 pre2 post1 post2 e let elab_bind #g #x #c1 #c2 #c (bc:bind_comp g x c1 c2 c) (e1 e2:R.term)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Pulse.Elaborate.Core.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 2, "initial_ifuel": 1, "max_fuel": 8, "max_ifuel": 2, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": false, "smtencoding_l_arith_repr": "boxwrap", "smtencoding_nl_arith_repr": "boxwrap", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": true, "z3cliopt": [], "z3refresh": false, "z3rlimit": 5, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val elab_bind (#g #x #c1 #c2 #c: _) (bc: bind_comp g x c1 c2 c) (e1 e2: R.term) : R.term</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Pulse.Elaborate.Core.elab_bind</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "lib/steel/pulse/Pulse.Elaborate.Core.fst", "git_rev": "7fbb54e94dd4f48ff7cb867d3bae6889a635541e", "git_url": "https://github.com/FStarLang/steel.git", "project_name": "steel" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto"> bc: Pulse.Typing.bind_comp g x c1 c2 c -> e1: FStar.Reflection.Types.term -> e2: FStar.Reflection.Types.term -> FStar.Reflection.Types.term</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 28, "end_line": 93, "start_col": 3, "start_line": 46 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="18"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Prims.Tot</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto"></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": false, "full_module": "FStar.Mul", "short_module": null }, { "abbrev": false, "full_module": "Vale.Curve25519.Fast_defs", "short_module": null }, { "abbrev": true, "full_module": "FStar.HyperStack", "short_module": "HS" }, { "abbrev": true, "full_module": "LowStar.Buffer", "short_module": "B" }, { "abbrev": false, "full_module": "FStar.HyperStack.ST", "short_module": null }, { "abbrev": false, "full_module": "Vale.X64.CPU_Features_s", "short_module": null }, { "abbrev": false, "full_module": "Vale.Inline.X64", "short_module": null }, { "abbrev": false, "full_module": "Vale.Inline.X64", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let u1024 = b:B.buffer UInt64.t{B.length b == 16}</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let u1024 =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">b: B.buffer UInt64.t {B.length b == 16}</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Vale.Inline.X64.Fadd_inline.fsti.checked", "dependencies": [ "Vale.X64.CPU_Features_s.fst.checked", "Vale.Curve25519.Fast_defs.fst.checked", "prims.fst.checked", "LowStar.Buffer.fst.checked", "FStar.UInt64.fsti.checked", "FStar.Seq.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.Mul.fst.checked", "FStar.HyperStack.ST.fsti.checked", "FStar.HyperStack.fst.checked", "FStar.Ghost.fsti.checked" ], "interface_file": false, "source_file": "Vale.Inline.X64.Fadd_inline.fsti" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "total" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "LowStar.Buffer.buffer", "FStar.UInt64.t", "Prims.eq2", "Prims.int", "LowStar.Monotonic.Buffer.length", "LowStar.Buffer.trivial_preorder" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Vale.Inline.X64.Fadd_inline open Vale.X64.CPU_Features_s open FStar.HyperStack.ST module B = LowStar.Buffer module HS = FStar.HyperStack open Vale.Curve25519.Fast_defs open FStar.Mul unfold let u256 = b:B.buffer UInt64.t{B.length b == 4} unfold let u512 = b:B.buffer UInt64.t{B.length b == 8}</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Inline.X64.Fadd_inline.fsti</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 2, "initial_ifuel": 0, "max_fuel": 1, "max_ifuel": 1, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": true, "smtencoding_l_arith_repr": "native", "smtencoding_nl_arith_repr": "wrapped", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": false, "z3cliopt": [ "smt.arith.nl=false", "smt.QI.EAGER_THRESHOLD=100", "smt.CASE_SPLIT=3" ], "z3refresh": false, "z3rlimit": 5, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val u1024 : Type0</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Inline.X64.Fadd_inline.u1024</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "vale/code/arch/x64/interop/Vale.Inline.X64.Fadd_inline.fsti", "git_rev": "12c5e9539c7e3c366c26409d3b86493548c4483e", "git_url": "https://github.com/hacl-star/hacl-star.git", "project_name": "hacl-star" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Type0</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 49, "end_line": 15, "start_col": 12, "start_line": 15 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="19"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Prims.Tot</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto"></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": false, "full_module": "FStar.Mul", "short_module": null }, { "abbrev": false, "full_module": "Vale.Curve25519.Fast_defs", "short_module": null }, { "abbrev": true, "full_module": "FStar.HyperStack", "short_module": "HS" }, { "abbrev": true, "full_module": "LowStar.Buffer", "short_module": "B" }, { "abbrev": false, "full_module": "FStar.HyperStack.ST", "short_module": null }, { "abbrev": false, "full_module": "Vale.X64.CPU_Features_s", "short_module": null }, { "abbrev": false, "full_module": "Vale.Inline.X64", "short_module": null }, { "abbrev": false, "full_module": "Vale.Inline.X64", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let u256 = b:B.buffer UInt64.t{B.length b == 4}</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let u256 =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">b: B.buffer UInt64.t {B.length b == 4}</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Vale.Inline.X64.Fadd_inline.fsti.checked", "dependencies": [ "Vale.X64.CPU_Features_s.fst.checked", "Vale.Curve25519.Fast_defs.fst.checked", "prims.fst.checked", "LowStar.Buffer.fst.checked", "FStar.UInt64.fsti.checked", "FStar.Seq.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.Mul.fst.checked", "FStar.HyperStack.ST.fsti.checked", "FStar.HyperStack.fst.checked", "FStar.Ghost.fsti.checked" ], "interface_file": false, "source_file": "Vale.Inline.X64.Fadd_inline.fsti" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "total" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "LowStar.Buffer.buffer", "FStar.UInt64.t", "Prims.eq2", "Prims.int", "LowStar.Monotonic.Buffer.length", "LowStar.Buffer.trivial_preorder" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Vale.Inline.X64.Fadd_inline open Vale.X64.CPU_Features_s open FStar.HyperStack.ST module B = LowStar.Buffer module HS = FStar.HyperStack open Vale.Curve25519.Fast_defs open FStar.Mul</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Inline.X64.Fadd_inline.fsti</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 2, "initial_ifuel": 0, "max_fuel": 1, "max_ifuel": 1, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": true, "smtencoding_l_arith_repr": "native", "smtencoding_nl_arith_repr": "wrapped", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": false, "z3cliopt": [ "smt.arith.nl=false", "smt.QI.EAGER_THRESHOLD=100", "smt.CASE_SPLIT=3" ], "z3refresh": false, "z3rlimit": 5, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val u256 : Type0</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Inline.X64.Fadd_inline.u256</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "vale/code/arch/x64/interop/Vale.Inline.X64.Fadd_inline.fsti", "git_rev": "12c5e9539c7e3c366c26409d3b86493548c4483e", "git_url": "https://github.com/hacl-star/hacl-star.git", "project_name": "hacl-star" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Type0</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 47, "end_line": 11, "start_col": 11, "start_line": 11 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="20"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Prims.Tot</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto"></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": false, "full_module": "FStar.Mul", "short_module": null }, { "abbrev": false, "full_module": "Vale.Curve25519.Fast_defs", "short_module": null }, { "abbrev": true, "full_module": "FStar.HyperStack", "short_module": "HS" }, { "abbrev": true, "full_module": "LowStar.Buffer", "short_module": "B" }, { "abbrev": false, "full_module": "FStar.HyperStack.ST", "short_module": null }, { "abbrev": false, "full_module": "Vale.X64.CPU_Features_s", "short_module": null }, { "abbrev": false, "full_module": "Vale.Inline.X64", "short_module": null }, { "abbrev": false, "full_module": "Vale.Inline.X64", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let u512 = b:B.buffer UInt64.t{B.length b == 8}</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let u512 =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">b: B.buffer UInt64.t {B.length b == 8}</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Vale.Inline.X64.Fadd_inline.fsti.checked", "dependencies": [ "Vale.X64.CPU_Features_s.fst.checked", "Vale.Curve25519.Fast_defs.fst.checked", "prims.fst.checked", "LowStar.Buffer.fst.checked", "FStar.UInt64.fsti.checked", "FStar.Seq.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.Mul.fst.checked", "FStar.HyperStack.ST.fsti.checked", "FStar.HyperStack.fst.checked", "FStar.Ghost.fsti.checked" ], "interface_file": false, "source_file": "Vale.Inline.X64.Fadd_inline.fsti" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "total" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "LowStar.Buffer.buffer", "FStar.UInt64.t", "Prims.eq2", "Prims.int", "LowStar.Monotonic.Buffer.length", "LowStar.Buffer.trivial_preorder" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Vale.Inline.X64.Fadd_inline open Vale.X64.CPU_Features_s open FStar.HyperStack.ST module B = LowStar.Buffer module HS = FStar.HyperStack open Vale.Curve25519.Fast_defs open FStar.Mul unfold let u256 = b:B.buffer UInt64.t{B.length b == 4}</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Inline.X64.Fadd_inline.fsti</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 2, "initial_ifuel": 0, "max_fuel": 1, "max_ifuel": 1, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": true, "smtencoding_l_arith_repr": "native", "smtencoding_nl_arith_repr": "wrapped", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": false, "z3cliopt": [ "smt.arith.nl=false", "smt.QI.EAGER_THRESHOLD=100", "smt.CASE_SPLIT=3" ], "z3refresh": false, "z3rlimit": 5, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val u512 : Type0</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Inline.X64.Fadd_inline.u512</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "vale/code/arch/x64/interop/Vale.Inline.X64.Fadd_inline.fsti", "git_rev": "12c5e9539c7e3c366c26409d3b86493548c4483e", "git_url": "https://github.com/hacl-star/hacl-star.git", "project_name": "hacl-star" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Type0</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 47, "end_line": 13, "start_col": 11, "start_line": 13 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="21"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Prims.GTot</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val as_nat (b: B.buffer UInt64.t {B.length b == 4}) (h: HS.mem) : GTot nat</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": false, "full_module": "FStar.Mul", "short_module": null }, { "abbrev": false, "full_module": "Vale.Curve25519.Fast_defs", "short_module": null }, { "abbrev": true, "full_module": "FStar.HyperStack", "short_module": "HS" }, { "abbrev": true, "full_module": "LowStar.Buffer", "short_module": "B" }, { "abbrev": false, "full_module": "FStar.HyperStack.ST", "short_module": null }, { "abbrev": false, "full_module": "Vale.X64.CPU_Features_s", "short_module": null }, { "abbrev": false, "full_module": "Vale.Inline.X64", "short_module": null }, { "abbrev": false, "full_module": "Vale.Inline.X64", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let as_nat (b:B.buffer UInt64.t{B.length b == 4}) (h:HS.mem) : GTot nat = let s = B.as_seq h b in let s0 = UInt64.v (Seq.index s 0) in let s1 = UInt64.v (Seq.index s 1) in let s2 = UInt64.v (Seq.index s 2) in let s3 = UInt64.v (Seq.index s 3) in pow2_four s0 s1 s2 s3</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val as_nat (b: B.buffer UInt64.t {B.length b == 4}) (h: HS.mem) : GTot nat let as_nat (b: B.buffer UInt64.t {B.length b == 4}) (h: HS.mem) : GTot nat =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let s = B.as_seq h b in let s0 = UInt64.v (Seq.index s 0) in let s1 = UInt64.v (Seq.index s 1) in let s2 = UInt64.v (Seq.index s 2) in let s3 = UInt64.v (Seq.index s 3) in pow2_four s0 s1 s2 s3</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "Vale.Inline.X64.Fadd_inline.fsti.checked", "dependencies": [ "Vale.X64.CPU_Features_s.fst.checked", "Vale.Curve25519.Fast_defs.fst.checked", "prims.fst.checked", "LowStar.Buffer.fst.checked", "FStar.UInt64.fsti.checked", "FStar.Seq.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.Mul.fst.checked", "FStar.HyperStack.ST.fsti.checked", "FStar.HyperStack.fst.checked", "FStar.Ghost.fsti.checked" ], "interface_file": false, "source_file": "Vale.Inline.X64.Fadd_inline.fsti" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "sometrivial" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "LowStar.Buffer.buffer", "FStar.UInt64.t", "Prims.eq2", "Prims.int", "LowStar.Monotonic.Buffer.length", "LowStar.Buffer.trivial_preorder", "FStar.Monotonic.HyperStack.mem", "Vale.Curve25519.Fast_defs.pow2_four", "FStar.UInt.uint_t", "FStar.UInt64.v", "FStar.Seq.Base.index", "FStar.Seq.Base.seq", "LowStar.Monotonic.Buffer.as_seq", "Prims.nat" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">module Vale.Inline.X64.Fadd_inline open Vale.X64.CPU_Features_s open FStar.HyperStack.ST module B = LowStar.Buffer module HS = FStar.HyperStack open Vale.Curve25519.Fast_defs open FStar.Mul unfold let u256 = b:B.buffer UInt64.t{B.length b == 4} unfold let u512 = b:B.buffer UInt64.t{B.length b == 8} unfold let u1024 = b:B.buffer UInt64.t{B.length b == 16}</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Inline.X64.Fadd_inline.fsti</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 2, "initial_ifuel": 0, "max_fuel": 1, "max_ifuel": 1, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": true, "smtencoding_l_arith_repr": "native", "smtencoding_nl_arith_repr": "wrapped", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": false, "z3cliopt": [ "smt.arith.nl=false", "smt.QI.EAGER_THRESHOLD=100", "smt.CASE_SPLIT=3" ], "z3refresh": false, "z3rlimit": 5, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val as_nat (b: B.buffer UInt64.t {B.length b == 4}) (h: HS.mem) : GTot nat</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Vale.Inline.X64.Fadd_inline.as_nat</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "vale/code/arch/x64/interop/Vale.Inline.X64.Fadd_inline.fsti", "git_rev": "12c5e9539c7e3c366c26409d3b86493548c4483e", "git_url": "https://github.com/hacl-star/hacl-star.git", "project_name": "hacl-star" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto"> b: LowStar.Buffer.buffer FStar.UInt64.t {LowStar.Monotonic.Buffer.length b == 4} -> h: FStar.Monotonic.HyperStack.mem -> Prims.GTot Prims.nat</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 23, "end_line": 23, "start_col": 73, "start_line": 17 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="22"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Prims.Tot</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto"></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": false, "full_module": "FStar.Tactics.V2", "short_module": null }, { "abbrev": false, "full_module": "FStar.Tactics", "short_module": null }, { "abbrev": false, "full_module": "FStar.Tactics", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let absvar = binding</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let absvar =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">binding</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "FStar.Tactics.PatternMatching.fst.checked", "dependencies": [ "prims.fst.checked", "FStar.Tactics.V2.fst.checked", "FStar.Tactics.fst.checked", "FStar.String.fsti.checked", "FStar.Squash.fsti.checked", "FStar.Pervasives.Native.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.List.Tot.Base.fst.checked", "FStar.List.Tot.fst.checked", "FStar.List.fst.checked" ], "interface_file": false, "source_file": "FStar.Tactics.PatternMatching.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "total" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "FStar.Tactics.NamedView.binding" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">(* Copyright 2008-2018 Microsoft Research Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. *) /// ========================== /// Pattern-matching tactics /// ========================== /// /// :Author: Clément Pit-Claudel /// :Contact: clement.pitclaudel@live.com /// :Date: 2017-10-13 module FStar.Tactics.PatternMatching open FStar.Tactics.V2 /// Contents /// ======== /// /// 1 Contents /// 2 Motivation /// 3 Some utility functions /// 4 Pattern types /// 5 Pattern matching exceptions /// 5.1 Types of exceptions /// 5.2 The exception monad /// 5.3 Liftings /// 6 Pattern interpretation /// 7 Pattern-matching problems /// 7.1 Definitions /// 7.2 Resolution /// 8 A DSL for pattern-matching /// 8.1 Pattern notations /// 8.2 Problem notations /// 8.3 Continuations /// 9 Putting it all together /// 10 Examples /// 10.1 Simple examples /// 10.2 A real-life example /// 11 Possible extensions /// 12 Notes /// /// Motivation /// ========== /// /// Suppose you have a goal of the form ``squash (a == b)``. How do you capture /// `a` and `b` for further inspection? /// /// Here's a basic (but cumbersome!) implementation: let fetch_eq_side () : Tac (term * term) = let g = cur_goal () in match inspect g with | Tv_App squash (g, _) -> (match inspect squash with | Tv_UInst squash _ | Tv_FVar squash -> if fv_to_string squash = flatten_name squash_qn then (match inspect g with | Tv_App eq_type_x (y, _) -> (match inspect eq_type_x with | Tv_App eq_type (x, _) -> (match inspect eq_type with | Tv_App eq (typ, _) -> (match inspect eq with | Tv_UInst eq _ | Tv_FVar eq -> if fv_to_string eq = flatten_name eq2_qn then (x, y) else fail "not an equality" | _ -> fail "not an app2 of fvar: ") | _ -> fail "not an app3") | _ -> fail "not an app2") | _ -> fail "not an app under squash") else fail "not a squash" | _ -> fail "not an app of fvar at top level") | _ -> fail "not an app at top level" /// …and here's how you could use it: (* let _ = *) (* assert_by_tactic (1 + 1 == 2) *) (* (fun () -> let l, r = fetch_eq_side () in *) (* print (term_to_string l ^ " / " ^ term_to_string r)) *) /// This file defines pattern-matching primitives that let you write the same /// thing like this… /// /// .. code:: fstar /// /// let fetch_eq_side' #a () : Tac (term * term) = /// gpm (fun (left right: a) (g: pm_goal (squash (left == right))) -> /// (quote left, quote right) &lt;: Tac (term * term)) /// /// let _ = /// assert_by_tactic (1 + 1 == 2) /// (fun () -> let l, r = fetch_eq_side' #int () in /// print (term_to_string l ^ " / " ^ term_to_string r)) /// /// …or, more succinctly, like this: /// /// .. code:: fstar /// /// let _ = /// assert_by_tactic (1 + 1 == 2) /// (gpm (fun (left right: int) (g: pm_goal (squash (left == right))) -> /// let l, r = quote left, quote right in /// print (term_to_string l ^ " / " ^ term_to_string r) &lt;: Tac unit)) /// Some utility functions /// ====================== /// /// (Skip over this part on a quick read — these are just convenience functions) (** Ensure that tactic `t` fails. **) let mustfail #a (t: unit -> Tac a) (message: string) : Tac unit = match trytac t with | Some _ -> fail message | None -> () /// The following two tactics are needed because of issues with the ``Tac`` /// effect. let implies_intro' () : Tac unit = let _ = implies_intro () in () let repeat' #a (f: unit -> Tac a) : Tac unit = let _ = repeat f in () let and_elim' (h: binding) : Tac unit = and_elim (pack (Tv_Var h)); clear h (** Use a hypothesis at type a to satisfy a goal at type squash a *) let exact_hyp (a: Type0) (h: namedv) : Tac unit = let hd = quote (FStar.Squash.return_squash #a) in exact (mk_app hd [((pack (Tv_Var h)), Q_Explicit)]) (** Use a hypothesis h (of type a) to satisfy a goal at type a *) let exact_hyp' (h: namedv): Tac unit = exact (pack (Tv_Var h)) /// Pattern types /// ============= /// /// Patterns are defined using a simple inductive type, mirroring the structure /// of ``term_view``. type varname = string type qn = string type pattern = | PVar: name: varname -> pattern | PQn: qn: qn -> pattern | PType: pattern | PApp: hd: pattern -> arg: pattern -> pattern let desc_of_pattern = function | PVar _ -> "a variable" | PQn qn -> "a constant (" ^ qn ^ ")" | PType -> "Type" | PApp _ _ -> "a function application" let rec string_of_pattern = function | PVar x -> "?" ^ x | PQn qn -> qn | PType -> "Type" | PApp l r -> "(" ^ string_of_pattern l ^ " " ^ string_of_pattern r ^ ")" /// Pattern matching exceptions /// =========================== /// /// Pattern-matching is defined as a pure, monadic function (because of issues /// with combining DM4F effects, but also because it helps with debugging). /// This section defines the exception monad. /// /// Types of exceptions /// ------------------- noeq type match_exception = | NameMismatch of qn * qn | SimpleMismatch of pattern * term | NonLinearMismatch of varname * term * term | UnsupportedTermInPattern of term | IncorrectTypeInAbsPatBinder of typ let term_head t : Tac string = match inspect t with | Tv_Var bv -> "Tv_Var" | Tv_BVar fv -> "Tv_BVar" | Tv_FVar fv -> "Tv_FVar" | Tv_UInst _ _ -> "Tv_UInst" | Tv_App f x -> "Tv_App" | Tv_Abs x t -> "Tv_Abs" | Tv_Arrow x t -> "Tv_Arrow" | Tv_Type _ -> "Tv_Type" | Tv_Refine x t -> "Tv_Refine" | Tv_Const cst -> "Tv_Const" | Tv_Uvar i t -> "Tv_Uvar" | Tv_Let r attrs b t1 t2 -> "Tv_Let" | Tv_Match t _ branches -> "Tv_Match" | Tv_AscribedT _ _ _ _ -> "Tv_AscribedT" | Tv_AscribedC _ _ _ _ -> "Tv_AscribedC" | Tv_Unknown -> "Tv_Unknown" | Tv_Unsupp -> "Tv_Unsupp" let string_of_match_exception = function | NameMismatch (qn1, qn2) -> "Match failure (name mismatch): expecting " ^ qn1 ^ ", found " ^ qn2 | SimpleMismatch (pat, tm) -> "Match failure (sort mismatch): expecting " ^ desc_of_pattern pat ^ ", got " ^ term_to_string tm | NonLinearMismatch (nm, t1, t2) -> "Match failure (nonlinear mismatch): variable " ^ nm ^ " needs to match both " ^ (term_to_string t1) ^ " and " ^ (term_to_string t2) | UnsupportedTermInPattern tm -> "Match failure (unsupported term in pattern): " ^ term_to_string tm ^ " (" ^ term_head tm ^ ")" | IncorrectTypeInAbsPatBinder typ -> "Incorrect type in pattern-matching binder: " ^ term_to_string typ ^ " (use one of ``var``, ``hyp …``, or ``goal …``)" /// The exception monad /// ------------------- noeq type match_res a = | Success of a | Failure of match_exception let return #a (x: a) : match_res a = Success x let (let?) (#a #b: Type) (f: match_res a) (g: a -> Tac (match_res b)) : Tac (match_res b) = match f with | Success aa -> g aa | Failure ex -> Failure ex let raise #a (ex: match_exception) : match_res a = Failure ex /// Liftings /// -------- /// /// There's a natural lifting from the exception monad into the tactic effect: let lift_exn_tac #a #b (f: a -> match_res b) (aa: a) : Tac b = match f aa with | Success bb -> bb | Failure ex -> Tactics.fail (string_of_match_exception ex) let lift_exn_tactic #a #b (f: a -> match_res b) (aa: a) : Tac b = match f aa with | Success bb -> bb | Failure ex -> Tactics.fail (string_of_match_exception ex) /// Pattern interpretation /// ====================== /// /// This section implement pattern-matching. This is strictly a one term, one /// pattern implementation — handling cases in which mutliple hypotheses match /// the same pattern is done later. type bindings = list (varname * term) let string_of_bindings (bindings: bindings) = String.concat "\n" (map (fun (nm, tm) -> (">> " ^ nm ^ ": " ^ term_to_string tm)) bindings) (** Match a pattern against a term. `cur_bindings` is a list of bindings collected while matching previous parts of the pattern. Returns a result in the exception monad. **) let rec interp_pattern_aux (pat: pattern) (cur_bindings: bindings) (tm:term) : Tac (match_res bindings) = let interp_var (v: varname) cur_bindings tm = match List.Tot.Base.assoc v cur_bindings with | Some tm' -> if term_eq tm tm' then return cur_bindings else raise (NonLinearMismatch (v, tm, tm')) | None -> return ((v, tm) :: cur_bindings) in let interp_qn (qn: qn) cur_bindings tm = match inspect tm with | Tv_UInst fv _ | Tv_FVar fv -> if fv_to_string fv = qn then return cur_bindings else raise (NameMismatch (qn, (fv_to_string fv))) | _ -> raise (SimpleMismatch (pat, tm)) in let interp_type cur_bindings tm = match inspect tm with | Tv_Type _ -> return cur_bindings | _ -> raise (SimpleMismatch (pat, tm)) in let interp_app (p_hd p_arg: (p:pattern{p &lt;&lt; pat})) cur_bindings tm = match inspect tm with | Tv_App hd (arg, _) -> let? with_hd = interp_pattern_aux p_hd cur_bindings hd in let? with_arg = interp_pattern_aux p_arg with_hd arg in return with_arg | _ -> raise (SimpleMismatch (pat, tm)) in match pat with | PVar var -> interp_var var cur_bindings tm | PQn qn -> interp_qn qn cur_bindings tm | PType -> interp_type cur_bindings tm | PApp p_hd p_arg -> interp_app p_hd p_arg cur_bindings tm (** Match a pattern `pat` against a term. Returns a result in the exception monad. **) let interp_pattern (pat: pattern) : term -> Tac (match_res bindings) = fun (tm: term) -> let? rev_bindings = interp_pattern_aux pat [] tm in return (List.Tot.Base.rev rev_bindings) (** Match a term `tm` against a pattern `pat`. Raises an exception if the match fails. This is mostly useful for debugging: use ``mgw`` to capture matches. **) let match_term pat (tm : term) : Tac bindings = match interp_pattern pat (norm_term [] tm) with | Success bb -> bb | Failure ex -> Tactics.fail (string_of_match_exception ex) /// Pattern-matching problems /// ========================= /// /// Generalizing past single-term single-pattern problems, we obtain the /// following notions of pattern-matching problems and solutions: let debug msg : Tac unit = () // print msg /// Definitions /// -----------</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">FStar.Tactics.PatternMatching.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 2, "initial_ifuel": 1, "max_fuel": 8, "max_ifuel": 2, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": false, "smtencoding_l_arith_repr": "boxwrap", "smtencoding_nl_arith_repr": "boxwrap", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": true, "z3cliopt": [], "z3refresh": false, "z3rlimit": 5, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val absvar : Type0</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">FStar.Tactics.PatternMatching.absvar</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "ulib/FStar.Tactics.PatternMatching.fst", "git_rev": "f4cbb7a38d67eeb13fbdb2f4fb8a44a65cbcdc1f", "git_url": "https://github.com/FStarLang/FStar.git", "project_name": "FStar" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Type0</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 20, "end_line": 349, "start_col": 13, "start_line": 349 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="23"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Prims.Tot</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto"></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": false, "full_module": "FStar.Tactics.V2", "short_module": null }, { "abbrev": false, "full_module": "FStar.Tactics", "short_module": null }, { "abbrev": false, "full_module": "FStar.Tactics", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let hyp_qn = `%hyp</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let hyp_qn =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">`%hyp</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "FStar.Tactics.PatternMatching.fst.checked", "dependencies": [ "prims.fst.checked", "FStar.Tactics.V2.fst.checked", "FStar.Tactics.fst.checked", "FStar.String.fsti.checked", "FStar.Squash.fsti.checked", "FStar.Pervasives.Native.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.List.Tot.Base.fst.checked", "FStar.List.Tot.fst.checked", "FStar.List.fst.checked" ], "interface_file": false, "source_file": "FStar.Tactics.PatternMatching.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "total" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">(* Copyright 2008-2018 Microsoft Research Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. *) /// ========================== /// Pattern-matching tactics /// ========================== /// /// :Author: Clément Pit-Claudel /// :Contact: clement.pitclaudel@live.com /// :Date: 2017-10-13 module FStar.Tactics.PatternMatching open FStar.Tactics.V2 /// Contents /// ======== /// /// 1 Contents /// 2 Motivation /// 3 Some utility functions /// 4 Pattern types /// 5 Pattern matching exceptions /// 5.1 Types of exceptions /// 5.2 The exception monad /// 5.3 Liftings /// 6 Pattern interpretation /// 7 Pattern-matching problems /// 7.1 Definitions /// 7.2 Resolution /// 8 A DSL for pattern-matching /// 8.1 Pattern notations /// 8.2 Problem notations /// 8.3 Continuations /// 9 Putting it all together /// 10 Examples /// 10.1 Simple examples /// 10.2 A real-life example /// 11 Possible extensions /// 12 Notes /// /// Motivation /// ========== /// /// Suppose you have a goal of the form ``squash (a == b)``. How do you capture /// `a` and `b` for further inspection? /// /// Here's a basic (but cumbersome!) implementation: let fetch_eq_side () : Tac (term * term) = let g = cur_goal () in match inspect g with | Tv_App squash (g, _) -> (match inspect squash with | Tv_UInst squash _ | Tv_FVar squash -> if fv_to_string squash = flatten_name squash_qn then (match inspect g with | Tv_App eq_type_x (y, _) -> (match inspect eq_type_x with | Tv_App eq_type (x, _) -> (match inspect eq_type with | Tv_App eq (typ, _) -> (match inspect eq with | Tv_UInst eq _ | Tv_FVar eq -> if fv_to_string eq = flatten_name eq2_qn then (x, y) else fail "not an equality" | _ -> fail "not an app2 of fvar: ") | _ -> fail "not an app3") | _ -> fail "not an app2") | _ -> fail "not an app under squash") else fail "not a squash" | _ -> fail "not an app of fvar at top level") | _ -> fail "not an app at top level" /// …and here's how you could use it: (* let _ = *) (* assert_by_tactic (1 + 1 == 2) *) (* (fun () -> let l, r = fetch_eq_side () in *) (* print (term_to_string l ^ " / " ^ term_to_string r)) *) /// This file defines pattern-matching primitives that let you write the same /// thing like this… /// /// .. code:: fstar /// /// let fetch_eq_side' #a () : Tac (term * term) = /// gpm (fun (left right: a) (g: pm_goal (squash (left == right))) -> /// (quote left, quote right) &lt;: Tac (term * term)) /// /// let _ = /// assert_by_tactic (1 + 1 == 2) /// (fun () -> let l, r = fetch_eq_side' #int () in /// print (term_to_string l ^ " / " ^ term_to_string r)) /// /// …or, more succinctly, like this: /// /// .. code:: fstar /// /// let _ = /// assert_by_tactic (1 + 1 == 2) /// (gpm (fun (left right: int) (g: pm_goal (squash (left == right))) -> /// let l, r = quote left, quote right in /// print (term_to_string l ^ " / " ^ term_to_string r) &lt;: Tac unit)) /// Some utility functions /// ====================== /// /// (Skip over this part on a quick read — these are just convenience functions) (** Ensure that tactic `t` fails. **) let mustfail #a (t: unit -> Tac a) (message: string) : Tac unit = match trytac t with | Some _ -> fail message | None -> () /// The following two tactics are needed because of issues with the ``Tac`` /// effect. let implies_intro' () : Tac unit = let _ = implies_intro () in () let repeat' #a (f: unit -> Tac a) : Tac unit = let _ = repeat f in () let and_elim' (h: binding) : Tac unit = and_elim (pack (Tv_Var h)); clear h (** Use a hypothesis at type a to satisfy a goal at type squash a *) let exact_hyp (a: Type0) (h: namedv) : Tac unit = let hd = quote (FStar.Squash.return_squash #a) in exact (mk_app hd [((pack (Tv_Var h)), Q_Explicit)]) (** Use a hypothesis h (of type a) to satisfy a goal at type a *) let exact_hyp' (h: namedv): Tac unit = exact (pack (Tv_Var h)) /// Pattern types /// ============= /// /// Patterns are defined using a simple inductive type, mirroring the structure /// of ``term_view``. type varname = string type qn = string type pattern = | PVar: name: varname -> pattern | PQn: qn: qn -> pattern | PType: pattern | PApp: hd: pattern -> arg: pattern -> pattern let desc_of_pattern = function | PVar _ -> "a variable" | PQn qn -> "a constant (" ^ qn ^ ")" | PType -> "Type" | PApp _ _ -> "a function application" let rec string_of_pattern = function | PVar x -> "?" ^ x | PQn qn -> qn | PType -> "Type" | PApp l r -> "(" ^ string_of_pattern l ^ " " ^ string_of_pattern r ^ ")" /// Pattern matching exceptions /// =========================== /// /// Pattern-matching is defined as a pure, monadic function (because of issues /// with combining DM4F effects, but also because it helps with debugging). /// This section defines the exception monad. /// /// Types of exceptions /// ------------------- noeq type match_exception = | NameMismatch of qn * qn | SimpleMismatch of pattern * term | NonLinearMismatch of varname * term * term | UnsupportedTermInPattern of term | IncorrectTypeInAbsPatBinder of typ let term_head t : Tac string = match inspect t with | Tv_Var bv -> "Tv_Var" | Tv_BVar fv -> "Tv_BVar" | Tv_FVar fv -> "Tv_FVar" | Tv_UInst _ _ -> "Tv_UInst" | Tv_App f x -> "Tv_App" | Tv_Abs x t -> "Tv_Abs" | Tv_Arrow x t -> "Tv_Arrow" | Tv_Type _ -> "Tv_Type" | Tv_Refine x t -> "Tv_Refine" | Tv_Const cst -> "Tv_Const" | Tv_Uvar i t -> "Tv_Uvar" | Tv_Let r attrs b t1 t2 -> "Tv_Let" | Tv_Match t _ branches -> "Tv_Match" | Tv_AscribedT _ _ _ _ -> "Tv_AscribedT" | Tv_AscribedC _ _ _ _ -> "Tv_AscribedC" | Tv_Unknown -> "Tv_Unknown" | Tv_Unsupp -> "Tv_Unsupp" let string_of_match_exception = function | NameMismatch (qn1, qn2) -> "Match failure (name mismatch): expecting " ^ qn1 ^ ", found " ^ qn2 | SimpleMismatch (pat, tm) -> "Match failure (sort mismatch): expecting " ^ desc_of_pattern pat ^ ", got " ^ term_to_string tm | NonLinearMismatch (nm, t1, t2) -> "Match failure (nonlinear mismatch): variable " ^ nm ^ " needs to match both " ^ (term_to_string t1) ^ " and " ^ (term_to_string t2) | UnsupportedTermInPattern tm -> "Match failure (unsupported term in pattern): " ^ term_to_string tm ^ " (" ^ term_head tm ^ ")" | IncorrectTypeInAbsPatBinder typ -> "Incorrect type in pattern-matching binder: " ^ term_to_string typ ^ " (use one of ``var``, ``hyp …``, or ``goal …``)" /// The exception monad /// ------------------- noeq type match_res a = | Success of a | Failure of match_exception let return #a (x: a) : match_res a = Success x let (let?) (#a #b: Type) (f: match_res a) (g: a -> Tac (match_res b)) : Tac (match_res b) = match f with | Success aa -> g aa | Failure ex -> Failure ex let raise #a (ex: match_exception) : match_res a = Failure ex /// Liftings /// -------- /// /// There's a natural lifting from the exception monad into the tactic effect: let lift_exn_tac #a #b (f: a -> match_res b) (aa: a) : Tac b = match f aa with | Success bb -> bb | Failure ex -> Tactics.fail (string_of_match_exception ex) let lift_exn_tactic #a #b (f: a -> match_res b) (aa: a) : Tac b = match f aa with | Success bb -> bb | Failure ex -> Tactics.fail (string_of_match_exception ex) /// Pattern interpretation /// ====================== /// /// This section implement pattern-matching. This is strictly a one term, one /// pattern implementation — handling cases in which mutliple hypotheses match /// the same pattern is done later. type bindings = list (varname * term) let string_of_bindings (bindings: bindings) = String.concat "\n" (map (fun (nm, tm) -> (">> " ^ nm ^ ": " ^ term_to_string tm)) bindings) (** Match a pattern against a term. `cur_bindings` is a list of bindings collected while matching previous parts of the pattern. Returns a result in the exception monad. **) let rec interp_pattern_aux (pat: pattern) (cur_bindings: bindings) (tm:term) : Tac (match_res bindings) = let interp_var (v: varname) cur_bindings tm = match List.Tot.Base.assoc v cur_bindings with | Some tm' -> if term_eq tm tm' then return cur_bindings else raise (NonLinearMismatch (v, tm, tm')) | None -> return ((v, tm) :: cur_bindings) in let interp_qn (qn: qn) cur_bindings tm = match inspect tm with | Tv_UInst fv _ | Tv_FVar fv -> if fv_to_string fv = qn then return cur_bindings else raise (NameMismatch (qn, (fv_to_string fv))) | _ -> raise (SimpleMismatch (pat, tm)) in let interp_type cur_bindings tm = match inspect tm with | Tv_Type _ -> return cur_bindings | _ -> raise (SimpleMismatch (pat, tm)) in let interp_app (p_hd p_arg: (p:pattern{p &lt;&lt; pat})) cur_bindings tm = match inspect tm with | Tv_App hd (arg, _) -> let? with_hd = interp_pattern_aux p_hd cur_bindings hd in let? with_arg = interp_pattern_aux p_arg with_hd arg in return with_arg | _ -> raise (SimpleMismatch (pat, tm)) in match pat with | PVar var -> interp_var var cur_bindings tm | PQn qn -> interp_qn qn cur_bindings tm | PType -> interp_type cur_bindings tm | PApp p_hd p_arg -> interp_app p_hd p_arg cur_bindings tm (** Match a pattern `pat` against a term. Returns a result in the exception monad. **) let interp_pattern (pat: pattern) : term -> Tac (match_res bindings) = fun (tm: term) -> let? rev_bindings = interp_pattern_aux pat [] tm in return (List.Tot.Base.rev rev_bindings) (** Match a term `tm` against a pattern `pat`. Raises an exception if the match fails. This is mostly useful for debugging: use ``mgw`` to capture matches. **) let match_term pat (tm : term) : Tac bindings = match interp_pattern pat (norm_term [] tm) with | Success bb -> bb | Failure ex -> Tactics.fail (string_of_match_exception ex) /// Pattern-matching problems /// ========================= /// /// Generalizing past single-term single-pattern problems, we obtain the /// following notions of pattern-matching problems and solutions: let debug msg : Tac unit = () // print msg /// Definitions /// ----------- let absvar = binding type hypothesis = binding /// A matching problem is composed of holes (``mp_vars``), hypothesis patterns /// (``mp_hyps``), and a goal pattern (``mp_goal``). noeq type matching_problem = { mp_vars: list varname; mp_hyps: list (varname * pattern); mp_goal: option pattern } let string_of_matching_problem mp = let vars = String.concat ", " mp.mp_vars in let hyps = String.concat "\n " (List.Tot.Base.map (fun (nm, pat) -> nm ^ ": " ^ (string_of_pattern pat)) mp.mp_hyps) in let goal = match mp.mp_goal with | None -> "_" | Some pat -> string_of_pattern pat in "\n{ vars: " ^ vars ^ "\n" ^ " hyps: " ^ hyps ^ "\n" ^ " goal: " ^ goal ^ " }" /// A solution is composed of terms captured to mach the holes, and binders /// captured to match hypothesis patterns. noeq type matching_solution = { ms_vars: list (varname * term); ms_hyps: list (varname * hypothesis) } let string_of_matching_solution ms = let vars = String.concat "\n " (map (fun (varname, tm) -> varname ^ ": " ^ (term_to_string tm)) ms.ms_vars) in let hyps = String.concat "\n " (map (fun (nm, binding) -> nm ^ ": " ^ (binding_to_string binding)) ms.ms_hyps) in "\n{ vars: " ^ vars ^ "\n" ^ " hyps: " ^ hyps ^ " }" (** Find a varname in an association list; fail if it can't be found. **) let assoc_varname_fail (#b: Type) (key: varname) (ls: list (varname * b)) : Tac b = match List.Tot.Base.assoc key ls with | None -> fail ("Not found: " ^ key) | Some x -> x let ms_locate_hyp (a: Type) (solution: matching_solution) (name: varname) : Tac hypothesis = assoc_varname_fail name solution.ms_hyps let ms_locate_var (a: Type) (solution: matching_solution) (name: varname) : Tac a = unquote #a (assoc_varname_fail name solution.ms_vars) let ms_locate_unit (a: Type) _solution _binder_name : Tac unit = () /// Resolution /// ---------- /// /// Solving a matching problem is a two-steps process: find an initial /// assignment for holes based on the goal pattern, then find a set of /// hypotheses matching hypothesis patterns. /// /// Note that the implementation takes a continuation of type /// ``matching_solution -> Tac a``. This continuation is needed because we want /// users to be able to provide extra criteria on matching solutions (most /// commonly, this criterion is that a particular tactic should run /// successfuly). /// /// This makes it easy to implement a simple for of search through the context, /// where one can find a hypothesis matching a particular predicate by /// constructing a trivial matching problem and passing the predicate as the /// continuation. (** Scan ``hypotheses`` for a match for ``pat`` that lets ``body`` succeed. ``name`` is used to refer to the hypothesis matched in the final solution. ``part_sol`` includes bindings gathered while matching previous solutions. **) let rec solve_mp_for_single_hyp #a (name: varname) (pat: pattern) (hypotheses: list hypothesis) (body: matching_solution -> Tac a) (part_sol: matching_solution) : Tac a = match hypotheses with | [] -> fail #a "No matching hypothesis" | h :: hs -> or_else // Must be in ``Tac`` here to run `body` (fun () -> match interp_pattern_aux pat part_sol.ms_vars (type_of_binding h) with | Failure ex -> fail ("Failed to match hyp: " ^ (string_of_match_exception ex)) | Success bindings -> let ms_hyps = (name, h) :: part_sol.ms_hyps in body ({ part_sol with ms_vars = bindings; ms_hyps = ms_hyps })) (fun () -> solve_mp_for_single_hyp name pat hs body part_sol) (** Scan ``hypotheses`` for matches for ``mp_hyps`` that lets ``body`` succeed. **) let rec solve_mp_for_hyps #a (mp_hyps: list (varname * pattern)) (hypotheses: list hypothesis) (body: matching_solution -> Tac a) (partial_solution: matching_solution) : Tac a = match mp_hyps with | [] -> body partial_solution | (name, pat) :: pats -> solve_mp_for_single_hyp name pat hypotheses (solve_mp_for_hyps pats hypotheses body) partial_solution (** Solve a matching problem. The solution returned is constructed to ensure that the continuation ``body`` succeeds: this implements the usual backtracking-match semantics. **) let solve_mp #a (problem: matching_problem) (hypotheses: list hypothesis) (goal: term) (body: matching_solution -> Tac a) : Tac a = let goal_ps = match problem.mp_goal with | None -> { ms_vars = []; ms_hyps = [] } | Some pat -> match interp_pattern pat goal with | Failure ex -> fail ("Failed to match goal: " ^ (string_of_match_exception ex)) | Success bindings -> { ms_vars = bindings; ms_hyps = [] } in solve_mp_for_hyps #a problem.mp_hyps hypotheses body goal_ps /// A DSL for pattern-matching /// ========================== /// /// Using pattern-matching problems as defined above is relatively cumbersome, /// so we now introduce a lightweight notation, in two steps: pattern notations, /// and matching-problem notations. /// /// Pattern notations /// ----------------- /// /// The first part of our pattern-matching syntax is pattern notations: we /// provide a reflective function which constructs a pattern from a term: /// variables are holes, free variables are constants, and applications are /// application patterns. (* FIXME: MOVE *) let name_of_namedv (x:namedv) : Tac string = unseal (inspect_namedv x).ppname (** Compile a term `tm` into a pattern. **) let rec pattern_of_term_ex tm : Tac (match_res pattern) = match inspect tm with | Tv_Var bv -> return (PVar (name_of_namedv bv)) | Tv_FVar fv | Tv_UInst fv _ -> let qn = fv_to_string fv in return (PQn qn) | Tv_Type _ -> return PType | Tv_App f (x, _) -> let? fpat = pattern_of_term_ex f in let? xpat = pattern_of_term_ex x in return (PApp fpat xpat) | _ -> raise (UnsupportedTermInPattern tm) (** β-reduce a term `tm`. This is useful to remove needles function applications introduced by F*, like ``(fun a b c -> a) 1 2 3``. **) let beta_reduce (tm: term) : Tac term = norm_term [] tm (** Compile a term `tm` into a pattern. **) let pattern_of_term tm : Tac pattern = match pattern_of_term_ex tm with | Success bb -> bb | Failure ex -> Tactics.fail (string_of_match_exception ex) /// Problem notations /// ----------------- /// /// We then introduce a DSL for matching problems, best explained on the /// following example:: /// /// (fun (a b c: ①) (h1 h2 h3: hyp ②) (g: pm_goal ③) → ④) /// /// This notation is intended to express a pattern-matching problems with three /// holes ``a``, ``b``, and ``c`` of type ①, matching hypotheses ``h1``, ``h2``, /// and ``h3`` against pattern ② and the goal against the pattern ③. The body /// of the notation (④) is then run with appropriate terms bound to ``a``, /// ``b``, and ``c``, appropriate binders bound to ``h1``, ``h2``, and ``h3``, /// and ``()`` bound to ``g``. /// /// We call these patterns ``abspat``s (abstraction patterns), and we provide /// facilities to parse them into matching problems, and to run their bodies /// against a particular matching solution. // We used to annotate variables with an explicit 'var' marker, but then that // var annotation leaked into the types of other hypotheses due to type // inference, requiring non-trivial normalization. // let var (a: Type) = a let hyp (a: Type) = binding let pm_goal (a: Type) = unit</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">FStar.Tactics.PatternMatching.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 2, "initial_ifuel": 1, "max_fuel": 8, "max_ifuel": 2, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": false, "smtencoding_l_arith_repr": "boxwrap", "smtencoding_nl_arith_repr": "boxwrap", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": true, "z3cliopt": [], "z3refresh": false, "z3rlimit": 5, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val hyp_qn : Prims.string</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">FStar.Tactics.PatternMatching.hyp_qn</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "ulib/FStar.Tactics.PatternMatching.fst", "git_rev": "f4cbb7a38d67eeb13fbdb2f4fb8a44a65cbcdc1f", "git_url": "https://github.com/FStarLang/FStar.git", "project_name": "FStar" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">Prims.string</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 19, "end_line": 562, "start_col": 16, "start_line": 562 }</div></div> </td> </tr><tr class="group cursor-pointer space-x-4 divide-x border-b outline-offset-[-2px] odd:bg-gray-50 hover:bg-gray-100 dark:odd:bg-gray-925 dark:hover:bg-gray-850 last:border-none" tabindex="0" data-row-idx="24"><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">FStar.Tactics.Effect.Tac</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val interp_pattern: pat: pattern -> term -> Tac (match_res bindings)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ { "abbrev": false, "full_module": "FStar.Tactics.V2", "short_module": null }, { "abbrev": false, "full_module": "FStar.Tactics", "short_module": null }, { "abbrev": false, "full_module": "FStar.Tactics", "short_module": null }, { "abbrev": false, "full_module": "FStar.Pervasives", "short_module": null }, { "abbrev": false, "full_module": "Prims", "short_module": null }, { "abbrev": false, "full_module": "FStar", "short_module": null } ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">let interp_pattern (pat: pattern) : term -> Tac (match_res bindings) = fun (tm: term) -> let? rev_bindings = interp_pattern_aux pat [] tm in return (List.Tot.Base.rev rev_bindings)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val interp_pattern: pat: pattern -> term -> Tac (match_res bindings) let interp_pattern (pat: pattern) : term -> Tac (match_res bindings) =</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">true</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">fun (tm: term) -> let? rev_bindings = interp_pattern_aux pat [] tm in return (List.Tot.Base.rev rev_bindings)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "checked_file": "FStar.Tactics.PatternMatching.fst.checked", "dependencies": [ "prims.fst.checked", "FStar.Tactics.V2.fst.checked", "FStar.Tactics.fst.checked", "FStar.String.fsti.checked", "FStar.Squash.fsti.checked", "FStar.Pervasives.Native.fst.checked", "FStar.Pervasives.fsti.checked", "FStar.List.Tot.Base.fst.checked", "FStar.List.Tot.fst.checked", "FStar.List.fst.checked" ], "interface_file": false, "source_file": "FStar.Tactics.PatternMatching.fst" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[ "FStar.Tactics.PatternMatching.pattern", "FStar.Tactics.NamedView.term", "FStar.Tactics.PatternMatching.op_let_Question", "FStar.Tactics.PatternMatching.bindings", "Prims.list", "FStar.Pervasives.Native.tuple2", "FStar.Tactics.PatternMatching.varname", "FStar.Tactics.PatternMatching.return", "FStar.List.Tot.Base.rev", "FStar.Tactics.PatternMatching.match_res", "FStar.Tactics.PatternMatching.interp_pattern_aux", "Prims.Nil" ]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">(* Copyright 2008-2018 Microsoft Research Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. *) /// ========================== /// Pattern-matching tactics /// ========================== /// /// :Author: Clément Pit-Claudel /// :Contact: clement.pitclaudel@live.com /// :Date: 2017-10-13 module FStar.Tactics.PatternMatching open FStar.Tactics.V2 /// Contents /// ======== /// /// 1 Contents /// 2 Motivation /// 3 Some utility functions /// 4 Pattern types /// 5 Pattern matching exceptions /// 5.1 Types of exceptions /// 5.2 The exception monad /// 5.3 Liftings /// 6 Pattern interpretation /// 7 Pattern-matching problems /// 7.1 Definitions /// 7.2 Resolution /// 8 A DSL for pattern-matching /// 8.1 Pattern notations /// 8.2 Problem notations /// 8.3 Continuations /// 9 Putting it all together /// 10 Examples /// 10.1 Simple examples /// 10.2 A real-life example /// 11 Possible extensions /// 12 Notes /// /// Motivation /// ========== /// /// Suppose you have a goal of the form ``squash (a == b)``. How do you capture /// `a` and `b` for further inspection? /// /// Here's a basic (but cumbersome!) implementation: let fetch_eq_side () : Tac (term * term) = let g = cur_goal () in match inspect g with | Tv_App squash (g, _) -> (match inspect squash with | Tv_UInst squash _ | Tv_FVar squash -> if fv_to_string squash = flatten_name squash_qn then (match inspect g with | Tv_App eq_type_x (y, _) -> (match inspect eq_type_x with | Tv_App eq_type (x, _) -> (match inspect eq_type with | Tv_App eq (typ, _) -> (match inspect eq with | Tv_UInst eq _ | Tv_FVar eq -> if fv_to_string eq = flatten_name eq2_qn then (x, y) else fail "not an equality" | _ -> fail "not an app2 of fvar: ") | _ -> fail "not an app3") | _ -> fail "not an app2") | _ -> fail "not an app under squash") else fail "not a squash" | _ -> fail "not an app of fvar at top level") | _ -> fail "not an app at top level" /// …and here's how you could use it: (* let _ = *) (* assert_by_tactic (1 + 1 == 2) *) (* (fun () -> let l, r = fetch_eq_side () in *) (* print (term_to_string l ^ " / " ^ term_to_string r)) *) /// This file defines pattern-matching primitives that let you write the same /// thing like this… /// /// .. code:: fstar /// /// let fetch_eq_side' #a () : Tac (term * term) = /// gpm (fun (left right: a) (g: pm_goal (squash (left == right))) -> /// (quote left, quote right) &lt;: Tac (term * term)) /// /// let _ = /// assert_by_tactic (1 + 1 == 2) /// (fun () -> let l, r = fetch_eq_side' #int () in /// print (term_to_string l ^ " / " ^ term_to_string r)) /// /// …or, more succinctly, like this: /// /// .. code:: fstar /// /// let _ = /// assert_by_tactic (1 + 1 == 2) /// (gpm (fun (left right: int) (g: pm_goal (squash (left == right))) -> /// let l, r = quote left, quote right in /// print (term_to_string l ^ " / " ^ term_to_string r) &lt;: Tac unit)) /// Some utility functions /// ====================== /// /// (Skip over this part on a quick read — these are just convenience functions) (** Ensure that tactic `t` fails. **) let mustfail #a (t: unit -> Tac a) (message: string) : Tac unit = match trytac t with | Some _ -> fail message | None -> () /// The following two tactics are needed because of issues with the ``Tac`` /// effect. let implies_intro' () : Tac unit = let _ = implies_intro () in () let repeat' #a (f: unit -> Tac a) : Tac unit = let _ = repeat f in () let and_elim' (h: binding) : Tac unit = and_elim (pack (Tv_Var h)); clear h (** Use a hypothesis at type a to satisfy a goal at type squash a *) let exact_hyp (a: Type0) (h: namedv) : Tac unit = let hd = quote (FStar.Squash.return_squash #a) in exact (mk_app hd [((pack (Tv_Var h)), Q_Explicit)]) (** Use a hypothesis h (of type a) to satisfy a goal at type a *) let exact_hyp' (h: namedv): Tac unit = exact (pack (Tv_Var h)) /// Pattern types /// ============= /// /// Patterns are defined using a simple inductive type, mirroring the structure /// of ``term_view``. type varname = string type qn = string type pattern = | PVar: name: varname -> pattern | PQn: qn: qn -> pattern | PType: pattern | PApp: hd: pattern -> arg: pattern -> pattern let desc_of_pattern = function | PVar _ -> "a variable" | PQn qn -> "a constant (" ^ qn ^ ")" | PType -> "Type" | PApp _ _ -> "a function application" let rec string_of_pattern = function | PVar x -> "?" ^ x | PQn qn -> qn | PType -> "Type" | PApp l r -> "(" ^ string_of_pattern l ^ " " ^ string_of_pattern r ^ ")" /// Pattern matching exceptions /// =========================== /// /// Pattern-matching is defined as a pure, monadic function (because of issues /// with combining DM4F effects, but also because it helps with debugging). /// This section defines the exception monad. /// /// Types of exceptions /// ------------------- noeq type match_exception = | NameMismatch of qn * qn | SimpleMismatch of pattern * term | NonLinearMismatch of varname * term * term | UnsupportedTermInPattern of term | IncorrectTypeInAbsPatBinder of typ let term_head t : Tac string = match inspect t with | Tv_Var bv -> "Tv_Var" | Tv_BVar fv -> "Tv_BVar" | Tv_FVar fv -> "Tv_FVar" | Tv_UInst _ _ -> "Tv_UInst" | Tv_App f x -> "Tv_App" | Tv_Abs x t -> "Tv_Abs" | Tv_Arrow x t -> "Tv_Arrow" | Tv_Type _ -> "Tv_Type" | Tv_Refine x t -> "Tv_Refine" | Tv_Const cst -> "Tv_Const" | Tv_Uvar i t -> "Tv_Uvar" | Tv_Let r attrs b t1 t2 -> "Tv_Let" | Tv_Match t _ branches -> "Tv_Match" | Tv_AscribedT _ _ _ _ -> "Tv_AscribedT" | Tv_AscribedC _ _ _ _ -> "Tv_AscribedC" | Tv_Unknown -> "Tv_Unknown" | Tv_Unsupp -> "Tv_Unsupp" let string_of_match_exception = function | NameMismatch (qn1, qn2) -> "Match failure (name mismatch): expecting " ^ qn1 ^ ", found " ^ qn2 | SimpleMismatch (pat, tm) -> "Match failure (sort mismatch): expecting " ^ desc_of_pattern pat ^ ", got " ^ term_to_string tm | NonLinearMismatch (nm, t1, t2) -> "Match failure (nonlinear mismatch): variable " ^ nm ^ " needs to match both " ^ (term_to_string t1) ^ " and " ^ (term_to_string t2) | UnsupportedTermInPattern tm -> "Match failure (unsupported term in pattern): " ^ term_to_string tm ^ " (" ^ term_head tm ^ ")" | IncorrectTypeInAbsPatBinder typ -> "Incorrect type in pattern-matching binder: " ^ term_to_string typ ^ " (use one of ``var``, ``hyp …``, or ``goal …``)" /// The exception monad /// ------------------- noeq type match_res a = | Success of a | Failure of match_exception let return #a (x: a) : match_res a = Success x let (let?) (#a #b: Type) (f: match_res a) (g: a -> Tac (match_res b)) : Tac (match_res b) = match f with | Success aa -> g aa | Failure ex -> Failure ex let raise #a (ex: match_exception) : match_res a = Failure ex /// Liftings /// -------- /// /// There's a natural lifting from the exception monad into the tactic effect: let lift_exn_tac #a #b (f: a -> match_res b) (aa: a) : Tac b = match f aa with | Success bb -> bb | Failure ex -> Tactics.fail (string_of_match_exception ex) let lift_exn_tactic #a #b (f: a -> match_res b) (aa: a) : Tac b = match f aa with | Success bb -> bb | Failure ex -> Tactics.fail (string_of_match_exception ex) /// Pattern interpretation /// ====================== /// /// This section implement pattern-matching. This is strictly a one term, one /// pattern implementation — handling cases in which mutliple hypotheses match /// the same pattern is done later. type bindings = list (varname * term) let string_of_bindings (bindings: bindings) = String.concat "\n" (map (fun (nm, tm) -> (">> " ^ nm ^ ": " ^ term_to_string tm)) bindings) (** Match a pattern against a term. `cur_bindings` is a list of bindings collected while matching previous parts of the pattern. Returns a result in the exception monad. **) let rec interp_pattern_aux (pat: pattern) (cur_bindings: bindings) (tm:term) : Tac (match_res bindings) = let interp_var (v: varname) cur_bindings tm = match List.Tot.Base.assoc v cur_bindings with | Some tm' -> if term_eq tm tm' then return cur_bindings else raise (NonLinearMismatch (v, tm, tm')) | None -> return ((v, tm) :: cur_bindings) in let interp_qn (qn: qn) cur_bindings tm = match inspect tm with | Tv_UInst fv _ | Tv_FVar fv -> if fv_to_string fv = qn then return cur_bindings else raise (NameMismatch (qn, (fv_to_string fv))) | _ -> raise (SimpleMismatch (pat, tm)) in let interp_type cur_bindings tm = match inspect tm with | Tv_Type _ -> return cur_bindings | _ -> raise (SimpleMismatch (pat, tm)) in let interp_app (p_hd p_arg: (p:pattern{p &lt;&lt; pat})) cur_bindings tm = match inspect tm with | Tv_App hd (arg, _) -> let? with_hd = interp_pattern_aux p_hd cur_bindings hd in let? with_arg = interp_pattern_aux p_arg with_hd arg in return with_arg | _ -> raise (SimpleMismatch (pat, tm)) in match pat with | PVar var -> interp_var var cur_bindings tm | PQn qn -> interp_qn qn cur_bindings tm | PType -> interp_type cur_bindings tm | PApp p_hd p_arg -> interp_app p_hd p_arg cur_bindings tm (** Match a pattern `pat` against a term. Returns a result in the exception monad. **)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto">false</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">FStar.Tactics.PatternMatching.fst</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "detail_errors": false, "detail_hint_replay": false, "initial_fuel": 2, "initial_ifuel": 1, "max_fuel": 8, "max_ifuel": 2, "no_plugins": false, "no_smt": false, "no_tactics": false, "quake_hi": 1, "quake_keep": false, "quake_lo": 1, "retry": false, "reuse_hint_for": null, "smtencoding_elim_box": false, "smtencoding_l_arith_repr": "boxwrap", "smtencoding_nl_arith_repr": "boxwrap", "smtencoding_valid_elim": false, "smtencoding_valid_intro": true, "tcnorm": true, "trivial_pre_for_unannotated_effectful_fns": true, "z3cliopt": [], "z3refresh": false, "z3rlimit": 5, "z3rlimit_factor": 1, "z3seed": 0, "z3smtopt": [], "z3version": "4.8.5" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-right" dir="auto"><div class="text-right text-gray-400">null</div></div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">val interp_pattern: pat: pattern -> term -> Tac (match_res bindings)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">[]</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">FStar.Tactics.PatternMatching.interp_pattern</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "file_name": "ulib/FStar.Tactics.PatternMatching.fst", "git_rev": "f4cbb7a38d67eeb13fbdb2f4fb8a44a65cbcdc1f", "git_url": "https://github.com/FStarLang/FStar.git", "project_name": "FStar" }</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="" dir="auto">pat: FStar.Tactics.PatternMatching.pattern -> _: FStar.Tactics.NamedView.term -> FStar.Tactics.Effect.Tac (FStar.Tactics.PatternMatching.match_res FStar.Tactics.PatternMatching.bindings)</div></div> </td><td class="min-w-fit max-w-sm break-words p-2 "><div class="line-clamp-2 "><div class="text-left" dir="auto">{ "end_col": 43, "end_line": 328, "start_col": 2, "start_line": 326 }</div></div> </td> </tr></tbody></table> <div class="sticky left-0 border-t border-dashed border-gray-300 bg-gradient-to-b from-gray-100 to-white py-3 text-center font-mono text-xs dark:border-gray-700 dark:from-gray-950 dark:to-gray-900">End of preview. <a href="/datasets/microsoft/FStarDataSet/viewer/default/train" class="group"><span class="underline decoration-gray-300 group-hover:decoration-gray-400 dark:decoration-gray-500 dark:group-hover:decoration-gray-300">Expand</span> in <svg class="text-xs mr-0.5 inline -translate-y-px text-red-500" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path class="uim-primary" d="M21 22H3a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1h18a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1zM4 20h16V4H4z" fill="currentColor"></path><path class="uim-primary" d="M9 22a1 1 0 0 1-1-1V3a1 1 0 0 1 2 0v18a1 1 0 0 1-1 1zm6 0a1 1 0 0 1-1-1V3a1 1 0 0 1 2 0v18a1 1 0 0 1-1 1z" fill="currentColor"></path><path class="uim-primary" d="M21 10H3a1 1 0 0 1 0-2h18a1 1 0 0 1 0 2zm0 6H3a1 1 0 0 1 0-2h18a1 1 0 0 1 0 2z" fill="currentColor"></path></svg>Dataset Viewer. </a></div></div> <div class="bg-gradient-to-b from-gray-100 to-white dark:from-gray-950 dark:to-gray-900"><hr class="flex-none -translate-y-px border-t border-dashed border-gray-300 bg-white dark:border-gray-700 dark:bg-gray-950"> <nav><ul class="flex select-none items-center justify-between space-x-2 text-gray-700 sm:justify-center py-1 text-center font-mono text-xs rounded-b-lg"><li><a class="flex items-center rounded-lg px-2.5 py-1 hover:bg-gray-50 dark:hover:bg-gray-800 pointer-events-none cursor-default text-gray-400 hover:text-gray-700" href=""><svg class="mr-1.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M10 16L20 6l1.4 1.4l-8.6 8.6l8.6 8.6L20 26z" fill="currentColor"></path></svg> Previous</a></li> <li class="hidden sm:block"><a class="rounded-lg px-2.5 py-1 bg-gray-50 font-semibold ring-1 ring-inset ring-gray-200 dark:bg-gray-900 dark:text-yellow-500 dark:ring-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800" href="/datasets/microsoft/FStarDataSet/viewer/default/train?p=0">1</a> </li><li class="hidden sm:block"><a class="rounded-lg px-2.5 py-1 hover:bg-gray-50 dark:hover:bg-gray-800" href="/datasets/microsoft/FStarDataSet/viewer/default/train?p=1">2</a> </li><li class="hidden sm:block"><a class="rounded-lg px-2.5 py-1 hover:bg-gray-50 dark:hover:bg-gray-800" href="/datasets/microsoft/FStarDataSet/viewer/default/train?p=2">3</a> </li><li class="hidden sm:block"><a class="rounded-lg px-2.5 py-1 pointer-events-none cursor-default" href="#">...</a> </li><li class="hidden sm:block"><a class="rounded-lg px-2.5 py-1 hover:bg-gray-50 dark:hover:bg-gray-800" href="/datasets/microsoft/FStarDataSet/viewer/default/train?p=227">228</a> </li> <li><a class="flex items-center rounded-lg px-2.5 py-1 hover:bg-gray-50 dark:hover:bg-gray-800 " href="/datasets/microsoft/FStarDataSet/viewer/default/train?p=1">Next <svg class="ml-1.5 transform rotate-180" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M10 16L20 6l1.4 1.4l-8.6 8.6l8.6 8.6L20 26z" fill="currentColor"></path></svg></a></li></ul></nav></div></div> </div></div> <div class="SVELTE_HYDRATER contents" data-target="RepoCodeCopy" data-props="{}"><div></div></div> <div class="SVELTE_HYDRATER contents" data-target="SideNavigation" data-props="{&quot;titleTree&quot;:[{&quot;id&quot;:&quot;primary-objective&quot;,&quot;label&quot;:&quot;Primary-Objective&quot;,&quot;children&quot;:[],&quot;isValid&quot;:true,&quot;title&quot;:&quot;Primary-Objective&quot;},{&quot;id&quot;:&quot;data-format&quot;,&quot;label&quot;:&quot;Data Format&quot;,&quot;children&quot;:[],&quot;isValid&quot;:true,&quot;title&quot;:&quot;Data Format&quot;},{&quot;id&quot;:&quot;input&quot;,&quot;label&quot;:&quot;Input&quot;,&quot;children&quot;:[],&quot;isValid&quot;:true,&quot;title&quot;:&quot;Input&quot;},{&quot;id&quot;:&quot;output&quot;,&quot;label&quot;:&quot;Output&quot;,&quot;children&quot;:[],&quot;isValid&quot;:true,&quot;title&quot;:&quot;Output&quot;},{&quot;id&quot;:&quot;troubleshooting&quot;,&quot;label&quot;:&quot;Troubleshooting&quot;,&quot;children&quot;:[],&quot;isValid&quot;:true,&quot;title&quot;:&quot;Troubleshooting&quot;}],&quot;classNames&quot;:&quot;top-6&quot;}"> <div class="absolute -left-12 bottom-0 top-0 z-10 top-6"><div class="sticky top-4 flex"><div class="h-7 pt-[0.175rem]"> <span class="peer" tabindex="0"><button class="select-none hover:cursor-pointer"><svg width="1em" height="1em" viewBox="0 0 10 10" class="text-lg opacity-80 hover:opacity-100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" preserveAspectRatio="xMidYMid meet" fill="currentColor"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.65039 2.9999C1.65039 2.8066 1.80709 2.6499 2.00039 2.6499H8.00039C8.19369 2.6499 8.35039 2.8066 8.35039 2.9999C8.35039 3.1932 8.19369 3.3499 8.00039 3.3499H2.00039C1.80709 3.3499 1.65039 3.1932 1.65039 2.9999ZM1.65039 4.9999C1.65039 4.8066 1.80709 4.6499 2.00039 4.6499H8.00039C8.19369 4.6499 8.35039 4.8066 8.35039 4.9999C8.35039 5.1932 8.19369 5.3499 8.00039 5.3499H2.00039C1.80709 5.3499 1.65039 5.1932 1.65039 4.9999ZM2.00039 6.6499C1.80709 6.6499 1.65039 6.8066 1.65039 6.9999C1.65039 7.1932 1.80709 7.3499 2.00039 7.3499H8.00039C8.19369 7.3499 8.35039 7.1932 8.35039 6.9999C8.35039 6.8066 8.19369 6.6499 8.00039 6.6499H2.00039Z"></path></svg></button></span> <div class="invisible w-0 -translate-x-24 -translate-y-6 overflow-hidden rounded-xl border bg-white transition-transform hover:visible hover:w-52 hover:translate-x-0 peer-focus-within:visible peer-focus-within:w-52 peer-focus-within:translate-x-0"><nav aria-label="Secondary" class="max-h-[550px] overflow-y-auto p-3"><ul><li class="mb-3 text-sm last:mb-0"><a class="mb-1 block break-words font-semibold text-gray-700 hover:underline active:text-gray-900 dark:active:text-gray-200 [&>*]:break-words" href="#primary-objective" title="Primary-Objective"><!-- HTML_TAG_START -->Primary-Objective<!-- HTML_TAG_END --></a> <ul class="pl-1"></ul> </li><li class="mb-3 text-sm last:mb-0"><a class="mb-1 block break-words font-semibold text-gray-700 hover:underline active:text-gray-900 dark:active:text-gray-200 [&>*]:break-words" href="#data-format" title="Data Format"><!-- HTML_TAG_START -->Data Format<!-- HTML_TAG_END --></a> <ul class="pl-1"></ul> </li><li class="mb-3 text-sm last:mb-0"><a class="mb-1 block break-words font-semibold text-gray-700 hover:underline active:text-gray-900 dark:active:text-gray-200 [&>*]:break-words" href="#input" title="Input"><!-- HTML_TAG_START -->Input<!-- HTML_TAG_END --></a> <ul class="pl-1"></ul> </li><li class="mb-3 text-sm last:mb-0"><a class="mb-1 block break-words font-semibold text-gray-700 hover:underline active:text-gray-900 dark:active:text-gray-200 [&>*]:break-words" href="#output" title="Output"><!-- HTML_TAG_START -->Output<!-- HTML_TAG_END --></a> <ul class="pl-1"></ul> </li><li class="mb-3 text-sm last:mb-0"><a class="mb-1 block break-words font-semibold text-gray-700 hover:underline active:text-gray-900 dark:active:text-gray-200 [&>*]:break-words" href="#troubleshooting" title="Troubleshooting"><!-- HTML_TAG_START -->Troubleshooting<!-- HTML_TAG_END --></a> <ul class="pl-1"></ul> </li></ul></nav></div></div></div></div></div> <div class="2xl:pr-6"><div class="prose pl-6 -ml-6 hf-sanitized hf-sanitized-vxl2IrQWmPjGaRCypHLdq"> <!-- HTML_TAG_START --><h1 class="relative group flex items-center"> <a rel="nofollow" href="#proof-oriented-programming-with-ai-popai---fstardataset" class="block pr-1.5 text-lg md:absolute md:p-1.5 md:opacity-0 md:group-hover:opacity-100 md:right-full" id="proof-oriented-programming-with-ai-popai---fstardataset"> <span class="header-link"><svg viewBox="0 0 256 256" preserveAspectRatio="xMidYMid meet" height="1em" width="1em" role="img" aria-hidden="true" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" class="text-gray-500 hover:text-black dark:hover:text-gray-200 w-4"><path fill="currentColor" d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z"></path></svg></span> </a> <span> Proof Oriented Programming with AI (PoPAI) - FStarDataSet </span> </h1> <p>This dataset contains programs and proofs in <a rel="nofollow" href="https://fstar-lang.org/">F* proof-oriented programming language</a>. The data, proposed in <a rel="nofollow" href="https://arxiv.org/pdf/2405.01787">Towards Neural Synthesis for SMT-Assisted Proof-Oriented Programming</a>, is an archive of source code, build artifacts, and metadata assembled from eight different F⋆-based open source projects on GitHub.</p> <h2 class="relative group flex items-center"> <a rel="nofollow" href="#primary-objective" class="block pr-1.5 text-lg md:absolute md:p-1.5 md:opacity-0 md:group-hover:opacity-100 md:right-full" id="primary-objective"> <span class="header-link"><svg viewBox="0 0 256 256" preserveAspectRatio="xMidYMid meet" height="1em" width="1em" role="img" aria-hidden="true" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" class="text-gray-500 hover:text-black dark:hover:text-gray-200 w-4"><path fill="currentColor" d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z"></path></svg></span> </a> <span> Primary-Objective </span> </h2> <p>This dataset's primary objective is to train and evaluate Proof-oriented Programming with AI (PoPAI, in short). Given a specification of a program and proof in F*, the objective of a AI model is to synthesize the implemantation (see <a rel="nofollow" href="#usage">below</a> for details about the usage of this dataset, including the input and output). </p> <h2 class="relative group flex items-center"> <a rel="nofollow" href="#data-format" class="block pr-1.5 text-lg md:absolute md:p-1.5 md:opacity-0 md:group-hover:opacity-100 md:right-full" id="data-format"> <span class="header-link"><svg viewBox="0 0 256 256" preserveAspectRatio="xMidYMid meet" height="1em" width="1em" role="img" aria-hidden="true" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" class="text-gray-500 hover:text-black dark:hover:text-gray-200 w-4"><path fill="currentColor" d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z"></path></svg></span> </a> <span> Data Format </span> </h2> <p>Each of the examples in this dataset are organized as dictionaries with the following schema</p> <pre><code class="language-json"><span class="hljs-punctuation">{</span> <span class="hljs-attr">"file_name"</span><span class="hljs-punctuation">:</span> &lt;str<span class="hljs-punctuation">:</span> Name of the file&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"name"</span><span class="hljs-punctuation">:</span> &lt;str<span class="hljs-punctuation">:</span> name of the example<span class="hljs-punctuation">,</span> can be used to uniquely identify the example&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"original_source_type"</span><span class="hljs-punctuation">:</span> &lt;str<span class="hljs-punctuation">:</span> actual source type<span class="hljs-punctuation">,</span> to be used for type checking&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"source_type"</span><span class="hljs-punctuation">:</span> &lt;str<span class="hljs-punctuation">:</span> modified source type<span class="hljs-punctuation">,</span> to be used to formulate prompt&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"source_definition"</span><span class="hljs-punctuation">:</span> &lt;str<span class="hljs-punctuation">:</span> target definition&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"source"</span><span class="hljs-punctuation">:</span> &lt;dict<span class="hljs-punctuation">:</span> contains metadata about the source of this example<span class="hljs-punctuation">,</span> including project_name<span class="hljs-punctuation">,</span> git url<span class="hljs-punctuation">,</span> git sha<span class="hljs-punctuation">,</span> etc.&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"source_range"</span><span class="hljs-punctuation">:</span> &lt;dict<span class="hljs-punctuation">:</span> metadata containing start and end lines and columns of this definition in the source file&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"file_context"</span><span class="hljs-punctuation">:</span> &lt;str<span class="hljs-punctuation">:</span> extracted file context upto the point of current definition&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"dependencies"</span><span class="hljs-punctuation">:</span> &lt;dict<span class="hljs-punctuation">:</span> build dependencies for this file&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"opens_and_abbrevs"</span><span class="hljs-punctuation">:</span> &lt;list<span class="hljs-punctuation">[</span>dict<span class="hljs-punctuation">]</span><span class="hljs-punctuation">:</span> List of opened modules and abbreviated modules in the file<span class="hljs-punctuation">,</span> necessary for evaluation.&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"vconfig"</span><span class="hljs-punctuation">:</span> &lt;dict<span class="hljs-punctuation">:</span> SMT solver flags for this definition&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"interleaved"</span><span class="hljs-punctuation">:</span> &lt;bool<span class="hljs-punctuation">:</span> whether this definition is interleaved from the interface file&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"verbose_type"</span><span class="hljs-punctuation">:</span> &lt;str<span class="hljs-punctuation">:</span> the verbose type of this definition as resolved by the type checker&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"effect"</span><span class="hljs-punctuation">:</span> &lt;str<span class="hljs-punctuation">:</span> effect&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"effect_flags"</span><span class="hljs-punctuation">:</span> &lt;list<span class="hljs-punctuation">[</span>str<span class="hljs-punctuation">]</span><span class="hljs-punctuation">:</span> any effect flags&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"mutual_with"</span><span class="hljs-punctuation">:</span> &lt;list<span class="hljs-punctuation">:</span> if this definition is mutually recursive with another<span class="hljs-punctuation">,</span> list of those names&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"ideal_premises"</span><span class="hljs-punctuation">:</span> &lt;list<span class="hljs-punctuation">[</span>str<span class="hljs-punctuation">]</span><span class="hljs-punctuation">:</span> Other definitions that are used in the ground truth definition&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"proof_features"</span><span class="hljs-punctuation">:</span> &lt;list<span class="hljs-punctuation">[</span>str<span class="hljs-punctuation">]</span>&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"is_simple_lemma"</span><span class="hljs-punctuation">:</span> &lt;bool/<span class="hljs-literal"><span class="hljs-keyword">null</span></span>&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"is_div"</span><span class="hljs-punctuation">:</span> &lt;bool<span class="hljs-punctuation">:</span> if this definition has the divergent effect&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"is_proof"</span><span class="hljs-punctuation">:</span> &lt;bool&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"is_simply_typed"</span><span class="hljs-punctuation">:</span> &lt;bool&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"is_type"</span><span class="hljs-punctuation">:</span> &lt;bool/<span class="hljs-literal"><span class="hljs-keyword">null</span></span>&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"partial_definition"</span><span class="hljs-punctuation">:</span> &lt;str&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"completed_definiton"</span><span class="hljs-punctuation">:</span> &lt;str&gt;<span class="hljs-punctuation">,</span> <span class="hljs-attr">"isa_cross_project_example"</span><span class="hljs-punctuation">:</span> &lt;bool<span class="hljs-punctuation">:</span> if this example belongs to the cross-project evaluation set&gt; <span class="hljs-punctuation">}</span> </code></pre> <h1 class="relative group flex items-center"> <a rel="nofollow" href="#usage" class="block pr-1.5 text-lg md:absolute md:p-1.5 md:opacity-0 md:group-hover:opacity-100 md:right-full" id="usage"> <span class="header-link"><svg viewBox="0 0 256 256" preserveAspectRatio="xMidYMid meet" height="1em" width="1em" role="img" aria-hidden="true" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" class="text-gray-500 hover:text-black dark:hover:text-gray-200 w-4"><path fill="currentColor" d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z"></path></svg></span> </a> <span> Usage </span> </h1> <p>To use this dataset with <a rel="nofollow" href="https://pypi.org/project/datasets/"><code>datasets</code></a>, </p> <pre><code class="language-python"><span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset data = load_dataset(<span class="hljs-string">"microsoft/FStarDataSet"</span>) train_data = data[<span class="hljs-string">"train"</span>] eval_data = data[<span class="hljs-string">"validation"</span>] test_data = data[<span class="hljs-string">"test"</span>] intra_project_test = test_data.<span class="hljs-built_in">filter</span>(<span class="hljs-keyword">lambda</span> x: x[<span class="hljs-string">"isa_cross_project_example"</span>] == <span class="hljs-literal">False</span>) cross_project_test = test_data.<span class="hljs-built_in">filter</span>(<span class="hljs-keyword">lambda</span> x: x[<span class="hljs-string">"isa_cross_project_example"</span>] == <span class="hljs-literal">True</span>) </code></pre> <h2 class="relative group flex items-center"> <a rel="nofollow" href="#input" class="block pr-1.5 text-lg md:absolute md:p-1.5 md:opacity-0 md:group-hover:opacity-100 md:right-full" id="input"> <span class="header-link"><svg viewBox="0 0 256 256" preserveAspectRatio="xMidYMid meet" height="1em" width="1em" role="img" aria-hidden="true" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" class="text-gray-500 hover:text-black dark:hover:text-gray-200 w-4"><path fill="currentColor" d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z"></path></svg></span> </a> <span> Input </span> </h2> <p>The primary input for generating F* definition is <strong><code>source_type</code></strong>. All other information in an example may be used directly or to derive an input except <strong><code>source_definition</code></strong>, <strong><code>ideal_premises</code></strong>, and <strong><code>completed_definiton</code></strong>.</p> <h2 class="relative group flex items-center"> <a rel="nofollow" href="#output" class="block pr-1.5 text-lg md:absolute md:p-1.5 md:opacity-0 md:group-hover:opacity-100 md:right-full" id="output"> <span class="header-link"><svg viewBox="0 0 256 256" preserveAspectRatio="xMidYMid meet" height="1em" width="1em" role="img" aria-hidden="true" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" class="text-gray-500 hover:text-black dark:hover:text-gray-200 w-4"><path fill="currentColor" d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z"></path></svg></span> </a> <span> Output </span> </h2> <p>The primary output is <strong><code>source_definition</code></strong>, which is the ground truth definition, that can be evaluated with the <a rel="nofollow" href="#evaluation-on-this-dataset">proof checker</a>. The <strong><code>completed_definiton</code></strong> may be used as ground truth when a model is used as a text completion setting (though the evaluator does not support evaluation in this setting). In addition, <strong><code>ideal_premises</code></strong> may be used for evaluating premise selection models. </p> <h1 class="relative group flex items-center"> <a rel="nofollow" href="#evaluation-on-this-dataset" class="block pr-1.5 text-lg md:absolute md:p-1.5 md:opacity-0 md:group-hover:opacity-100 md:right-full" id="evaluation-on-this-dataset"> <span class="header-link"><svg viewBox="0 0 256 256" preserveAspectRatio="xMidYMid meet" height="1em" width="1em" role="img" aria-hidden="true" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" class="text-gray-500 hover:text-black dark:hover:text-gray-200 w-4"><path fill="currentColor" d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z"></path></svg></span> </a> <span> Evaluation on this dataset </span> </h1> <p>Generated F* definitions should be evaluated the proof checker tool from <a rel="nofollow" href="https://github.com/FStarLang/fstar_dataset/releases/tag/eval-v1.0">https://github.com/FStarLang/fstar_dataset/releases/tag/eval-v1.0</a>. Download the source code and the <code>helpers.zip</code> file from the release. </p> <h2 class="relative group flex items-center"> <a rel="nofollow" href="#troubleshooting" class="block pr-1.5 text-lg md:absolute md:p-1.5 md:opacity-0 md:group-hover:opacity-100 md:right-full" id="troubleshooting"> <span class="header-link"><svg viewBox="0 0 256 256" preserveAspectRatio="xMidYMid meet" height="1em" width="1em" role="img" aria-hidden="true" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" class="text-gray-500 hover:text-black dark:hover:text-gray-200 w-4"><path fill="currentColor" d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z"></path></svg></span> </a> <span> Troubleshooting </span> </h2> <p>The attached binaries in the evaluator (i.e., <code>fstar.exe</code> and <code>z3</code>) are built on <strong><code>Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-189-generic x86_64)</code></strong>, <strong><code>gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2)</code></strong>, <strong><code>OCaml 4.12.0</code></strong>. If any of the binaries do not work properly, build F* from <a rel="nofollow" href="https://github.com/FStarLang/FStar/commit/f3b4db2ebce90020acbbbe1b4ea0d05d3e69ad6c">commit: f3b4db2ebce90020acbbbe1b4ea0d05d3e69ad6c</a> from the <a rel="nofollow" href="https://github.com/FStarLang/FStar">F* repository</a>, using the <a rel="nofollow" href="https://github.com/FStarLang/FStar/blob/master/INSTALL.md">installation guide</a>.</p> <h1 class="relative group flex items-center"> <a rel="nofollow" href="#data-source" class="block pr-1.5 text-lg md:absolute md:p-1.5 md:opacity-0 md:group-hover:opacity-100 md:right-full" id="data-source"> <span class="header-link"><svg viewBox="0 0 256 256" preserveAspectRatio="xMidYMid meet" height="1em" width="1em" role="img" aria-hidden="true" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" class="text-gray-500 hover:text-black dark:hover:text-gray-200 w-4"><path fill="currentColor" d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z"></path></svg></span> </a> <span> Data Source </span> </h1> <p>The raw data in this project are collected from eight open-source F* repositories on GitHib </p> <ol> <li><a rel="nofollow" href="https://github.com/FStarLang/FStar">FStar</a>: The F⋆ compiler itself, including its standard library and examples.</li> <li><a rel="nofollow" href="https://github.com/FStarLang/karamel">Karamel</a>: A transpiler from a subset of F⋆ called Low* to C, including libraries to work with a model of C types and control structures, e.g., for- and while-loops.</li> <li><a rel="nofollow" href="https://github.com/project-everest/everparse">EverParse</a>: A parser generator for binary formats, used in various large scale systems, e.g., the Windows kernel.</li> <li><a rel="nofollow" href="https://github.com/hacl-star/hacl-star">HACL*</a>: A library of verified cryptographic algorithms, including ValeCrypt, a library of verified assembly code, as well as EverCrypt, a cryptographic provider, including code deployed in Linux, Firefox, and Python.</li> <li><a rel="nofollow" href="https://github.com/hacl-star/merkle-tree">Merkle-tree</a>: A verified, incremental Merkle tree, designed for use in Azure CCF, a confidential computing system.</li> <li><a rel="nofollow" href="https://github.com/FStarLang/steel">Steel</a>: A concurrent separation logic library, with proofs of data structures and concurrency primitives.</li> <li><a rel="nofollow" href="https://github.com/project-everest/mitls-fstar">miTLS-F*</a>: A partially verified reference implementation of the TLS protocol.</li> <li><a rel="nofollow" href="https://github.com/project-everest/everquic-crypto">EverQuic-Crypto</a>: A verified implementation of header and packet protection for the QUIC protocol.</li> </ol> <h1 class="relative group flex items-center"> <a rel="nofollow" href="#limitations" class="block pr-1.5 text-lg md:absolute md:p-1.5 md:opacity-0 md:group-hover:opacity-100 md:right-full" id="limitations"> <span class="header-link"><svg viewBox="0 0 256 256" preserveAspectRatio="xMidYMid meet" height="1em" width="1em" role="img" aria-hidden="true" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" class="text-gray-500 hover:text-black dark:hover:text-gray-200 w-4"><path fill="currentColor" d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z"></path></svg></span> </a> <span> Limitations </span> </h1> <p><strong>TDB</strong></p> <h1 class="relative group flex items-center"> <a rel="nofollow" href="#citation" class="block pr-1.5 text-lg md:absolute md:p-1.5 md:opacity-0 md:group-hover:opacity-100 md:right-full" id="citation"> <span class="header-link"><svg viewBox="0 0 256 256" preserveAspectRatio="xMidYMid meet" height="1em" width="1em" role="img" aria-hidden="true" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" class="text-gray-500 hover:text-black dark:hover:text-gray-200 w-4"><path fill="currentColor" d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z"></path></svg></span> </a> <span> Citation </span> </h1> <pre><code>@inproceedings{chakraborty2024towards, title={Towards Neural Synthesis for SMT-Assisted Proof-Oriented Programming}, author={Chakraborty, Saikat and Ebner, Gabriel and Bhat, Siddharth and Fakhoury, Sarah and Fatima, Sakina and Lahiri, Shuvendu and Swamy, Nikhil}, booktitle={Proceedings of the IEEE/ACM 47th International Conference on Software Engineering (To Appear)}, pages={1--12}, year={2025} } </code></pre> <!-- HTML_TAG_END --></div> </div></section> <section class="pt-6 border-gray-100 md:pb-24 md:pl-6 md:w-64 lg:w-80 xl:w-96 flex-none order-first md:order-none md:border-l !pt-3 md:!pt-6"><dl class="flex items-baseline justify-between"><dt class="text-sm text-gray-500">Downloads last month</dt><div class="mx-4 flex-1 border-b border-dotted"></div><dd class="font-semibold">131</dd></dl> <div class="divider-column-vertical"></div> <div class="grid grid-cols-2 gap-x-2 md:flex md:flex-row md:flex-wrap"><div class="SVELTE_HYDRATER contents" data-target="DatasetAndModelActionsDropdown" data-props="{&quot;classNames&quot;:&quot;order-last&quot;,&quot;discussionsDisabled&quot;:false,&quot;repo&quot;:{&quot;type&quot;:&quot;dataset&quot;,&quot;name&quot;:&quot;microsoft/FStarDataSet&quot;},&quot;canWrite&quot;:false,&quot;canDisable&quot;:false,&quot;repoIsPrivate&quot;:false,&quot;repoIsGated&quot;:false,&quot;repoIsDisabled&quot;:false,&quot;repoIsAdminFlaggedNFAA&quot;:false,&quot;repoHasBlockedOids&quot;:false}"><div class="order-last"><div class="relative "> <button class="btn px-1.5 py-1.5 " type="button"> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="p-0.5" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><circle cx="16" cy="7" r="3" fill="currentColor"></circle><circle cx="16" cy="16" r="3" fill="currentColor"></circle><circle cx="16" cy="25" r="3" fill="currentColor"></circle></svg> </button> </div></div> </div> <div class="SVELTE_HYDRATER contents" data-target="DatasetLibrary" data-props="{&quot;classNames&quot;:&quot;md:w-full xl:w-auto xl:flex-none&quot;,&quot;libraries&quot;:[{&quot;language&quot;:&quot;python&quot;,&quot;library&quot;:&quot;datasets&quot;,&quot;function&quot;:&quot;load_dataset&quot;,&quot;loading_codes&quot;:[{&quot;config_name&quot;:&quot;default&quot;,&quot;arguments&quot;:{},&quot;code&quot;:&quot;from datasets import load_dataset\n\nds = load_dataset(\&quot;microsoft/FStarDataSet\&quot;)&quot;}]},{&quot;language&quot;:&quot;python&quot;,&quot;library&quot;:&quot;dask&quot;,&quot;function&quot;:&quot;dd.read_json&quot;,&quot;loading_codes&quot;:[{&quot;config_name&quot;:&quot;default&quot;,&quot;arguments&quot;:{&quot;splits&quot;:{&quot;train&quot;:&quot;train.json&quot;,&quot;validation&quot;:&quot;valid.json&quot;,&quot;test&quot;:&quot;**/test_*.json&quot;}},&quot;code&quot;:&quot;import dask.dataframe as dd\n\nsplits = {'train': 'train.json', 'validation': 'valid.json', 'test': '**/test_*.json'}\ndf = dd.read_json(\&quot;hf://datasets/microsoft/FStarDataSet/\&quot; + splits[\&quot;train\&quot;])&quot;}]},{&quot;language&quot;:&quot;python&quot;,&quot;library&quot;:&quot;mlcroissant&quot;,&quot;function&quot;:&quot;Dataset&quot;,&quot;loading_codes&quot;:[{&quot;config_name&quot;:&quot;default&quot;,&quot;arguments&quot;:{&quot;record_set&quot;:&quot;default&quot;,&quot;partial&quot;:false},&quot;code&quot;:&quot;from mlcroissant import Dataset\n\nds = Dataset(jsonld=\&quot;https://huggingface.co/api/datasets/microsoft/FStarDataSet/croissant\&quot;)\nrecords = ds.records(\&quot;default\&quot;)&quot;}]},{&quot;language&quot;:&quot;python&quot;,&quot;library&quot;:&quot;polars&quot;,&quot;function&quot;:&quot;pl.read_json&quot;,&quot;loading_codes&quot;:[{&quot;config_name&quot;:&quot;default&quot;,&quot;arguments&quot;:{&quot;splits&quot;:{&quot;train&quot;:&quot;train.json&quot;,&quot;validation&quot;:&quot;valid.json&quot;,&quot;test&quot;:&quot;**/test_*.json&quot;}},&quot;code&quot;:&quot;import polars as pl\n\nsplits = {'train': 'train.json', 'validation': 'valid.json', 'test': '**/test_*.json'}\ndf = pl.read_json('hf://datasets/microsoft/FStarDataSet/' + splits['train'])\n&quot;}]}]}"><div class="relative md:w-full xl:w-auto xl:flex-none"> <button class="!from-gray-800 !to-black !text-white !gap-1 !border-gray-800 dark:!border-gray-900 btn w-full cursor-pointer text-sm" type="button"> <svg class="mr-1.5 !mr-0.5 " xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32" style="transform: rotate(360deg);"><path d="M31 16l-7 7l-1.41-1.41L28.17 16l-5.58-5.59L24 9l7 7z" fill="currentColor"></path><path d="M1 16l7-7l1.41 1.41L3.83 16l5.58 5.59L8 23l-7-7z" fill="currentColor"></path><path d="M12.419 25.484L17.639 6l1.932.518L14.35 26z" fill="currentColor"></path></svg> Use this dataset <svg class="-mr-1 text-gray-500" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path d="M16.293 9.293L12 13.586L7.707 9.293l-1.414 1.414L12 16.414l5.707-5.707z" fill="currentColor"></path></svg></button> </div> </div> <a class="btn mb-2 text-sm md:w-full xl:w-auto xl:flex-none" href="/datasets/microsoft/FStarDataSet/edit/main/README.md"><svg class="mr-1.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M2 26h28v2H2z" fill="currentColor"></path><path d="M25.4 9c.8-.8.8-2 0-2.8l-3.6-3.6c-.8-.8-2-.8-2.8 0l-15 15V24h6.4l15-15zm-5-5L24 7.6l-3 3L17.4 7l3-3zM6 22v-3.6l10-10l3.6 3.6l-10 10H6z" fill="currentColor"></path></svg> Edit dataset card </a> </div> <div class="divider-column-vertical"></div> <div class="flex flex-col flex-wrap xl:flex-row"><a class="group mb-1.5 flex max-w-full flex-col overflow-hidden rounded-lg border border-gray-100 bg-gradient-to-r from-white via-white to-white px-2 py-1 hover:from-gray-50 dark:from-gray-900 dark:to-gray-925 dark:hover:to-gray-900 md:mr-1.5 pointer-events-none" rel="nofollow" target="_blank"><div class="truncate text-xs text-gray-400">Size of downloaded dataset files:</div> <div class="truncate text-sm "> <!-- HTML_TAG_START -->759 MB<!-- HTML_TAG_END --></div></a><a class="group mb-1.5 flex max-w-full flex-col overflow-hidden rounded-lg border border-gray-100 bg-gradient-to-r from-white via-white to-white px-2 py-1 hover:from-gray-50 dark:from-gray-900 dark:to-gray-925 dark:hover:to-gray-900 md:mr-1.5 " href="/datasets/microsoft/FStarDataSet/tree/refs%2Fconvert%2Fparquet/" rel="nofollow" target="_blank"><div class="truncate text-xs text-gray-400">Size of the auto-converted Parquet files:</div> <div class="truncate text-sm group-hover:underline"> <!-- HTML_TAG_START -->106 MB<!-- HTML_TAG_END --></div></a><a class="group mb-1.5 flex max-w-full flex-col overflow-hidden rounded-lg border border-gray-100 bg-gradient-to-r from-white via-white to-white px-2 py-1 hover:from-gray-50 dark:from-gray-900 dark:to-gray-925 dark:hover:to-gray-900 md:mr-1.5 pointer-events-none" rel="nofollow" target="_blank"><div class="truncate text-xs text-gray-400">Number of rows:</div> <div class="truncate text-sm "> <!-- HTML_TAG_START -->32,054<!-- HTML_TAG_END --></div></a></div> <div class="divider-column-vertical md:hidden"></div></section></div></main> <footer class="b-12 mb-2 flex border-t border-gray-100 md:h-14"><nav class="container flex flex-col justify-between space-y-2 py-6 text-gray-500 md:flex-row md:items-center md:space-y-0 md:py-0 md:text-sm"><div class="font-semibold text-black md:hidden">Company</div> <div class="order-last pt-6 text-gray-400 md:order-none md:pt-0" href="Terms">© Hugging Face</div> <a class="hover:underline" href="/terms-of-service">TOS</a> <a class="hover:underline" href="/privacy">Privacy</a> <a class="hover:underline" href="/huggingface">About</a> <a class="hover:underline" href="https://apply.workable.com/huggingface/">Jobs</a> <a href="/" class="group order-first flex-none pb-6 md:order-none md:pb-0"><svg class="h-7 w-7 transition-transform group-hover:-translate-y-px" viewBox="0 0 95 88" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M47.2119 76.5C66.4037 76.5 81.9619 60.9419 81.9619 41.75C81.9619 22.5581 66.4037 7 47.2119 7C28.02 7 12.4619 22.5581 12.4619 41.75C12.4619 60.9419 28.02 76.5 47.2119 76.5Z" fill="#FFD21E"></path><path d="M81.9619 41.75C81.9619 22.5581 66.4037 7 47.2119 7C28.02 7 12.4619 22.5581 12.4619 41.75C12.4619 60.9419 28.02 76.5 47.2119 76.5C66.4037 76.5 81.9619 60.9419 81.9619 41.75ZM8.46185 41.75C8.46185 20.349 25.8108 3 47.2119 3C68.6129 3 85.9619 20.349 85.9619 41.75C85.9619 63.151 68.6129 80.5 47.2119 80.5C25.8108 80.5 8.46185 63.151 8.46185 41.75Z" fill="#FF9D0B"></path><path d="M58.5024 32.2915C59.7768 32.7415 60.2839 35.3615 61.5713 34.6769C64.0095 33.3805 64.9351 30.353 63.6387 27.9148C62.3423 25.4767 59.3148 24.5511 56.8766 25.8475C54.4384 27.1439 53.5128 30.1714 54.8092 32.6096C55.4211 33.7604 57.3632 31.8892 58.5024 32.2915Z" fill="#3A3B45"></path><path d="M34.9454 32.2915C33.671 32.7415 33.164 35.3615 31.8766 34.6769C29.4384 33.3805 28.5128 30.353 29.8092 27.9148C31.1056 25.4767 34.1331 24.5511 36.5713 25.8475C39.0095 27.1439 39.9351 30.1714 38.6387 32.6096C38.0268 33.7604 36.0846 31.8892 34.9454 32.2915Z" fill="#3A3B45"></path><path d="M46.9619 56.289C56.7903 56.289 59.9619 47.5261 59.9619 43.0262C59.9619 40.6875 58.3898 41.4236 55.8718 42.6702C53.5449 43.8222 50.4102 45.4101 46.9619 45.4101C39.7822 45.4101 33.9619 38.5263 33.9619 43.0262C33.9619 47.5261 37.1334 56.289 46.9619 56.289Z" fill="#3A3B45"></path><mask id="mask0" mask-type="alpha" maskUnits="userSpaceOnUse" x="33" y="41" width="27" height="16"><path d="M46.9619 56.289C56.7903 56.289 59.9619 47.5261 59.9619 43.0262C59.9619 40.6875 58.3898 41.4236 55.8718 42.6702C53.5449 43.8222 50.4102 45.4101 46.9619 45.4101C39.7822 45.4101 33.9619 38.5263 33.9619 43.0262C33.9619 47.5261 37.1334 56.289 46.9619 56.289Z" fill="white"></path></mask><g mask="url(#mask0)"><path d="M47.2119 66.5C52.0018 66.5 55.8848 62.617 55.8848 57.8271C55.8848 54.0962 53.5291 50.9156 50.224 49.6915C50.1023 49.6464 49.9794 49.604 49.8553 49.5643C49.0219 49.2979 48.1337 52.1623 47.2119 52.1623C46.3506 52.1623 45.5186 49.2797 44.7332 49.5135C41.151 50.5799 38.5389 53.8984 38.5389 57.8271C38.5389 62.617 42.4219 66.5 47.2119 66.5Z" fill="#F94040"></path></g><path d="M70.7119 37C72.5068 37 73.9619 35.5449 73.9619 33.75C73.9619 31.9551 72.5068 30.5 70.7119 30.5C68.9169 30.5 67.4619 31.9551 67.4619 33.75C67.4619 35.5449 68.9169 37 70.7119 37Z" fill="#FF9D0B"></path><path d="M24.2119 37C26.0068 37 27.4619 35.5449 27.4619 33.75C27.4619 31.9551 26.0068 30.5 24.2119 30.5C22.4169 30.5 20.9619 31.9551 20.9619 33.75C20.9619 35.5449 22.4169 37 24.2119 37Z" fill="#FF9D0B"></path><path class="origin-bottom-right transition-transform group-hover:-rotate-6" d="M17.5238 48C15.9048 48 14.4578 48.665 13.4488 49.871C12.8248 50.618 12.1728 51.822 12.1198 53.625C11.4408 53.43 10.7878 53.321 10.1778 53.321C8.6278 53.321 7.2278 53.915 6.2378 54.994C4.9658 56.379 4.4008 58.081 4.6468 59.784C4.7638 60.595 5.0348 61.322 5.4398 61.995C4.5858 62.686 3.9568 63.648 3.6528 64.805C3.4148 65.712 3.1708 67.601 4.4448 69.547C4.3638 69.674 4.2878 69.806 4.2168 69.941C3.4508 71.395 3.4018 73.038 4.0778 74.568C5.1028 76.887 7.6498 78.714 12.5958 80.675C15.6728 81.895 18.4878 82.675 18.5128 82.682C22.5808 83.737 26.2598 84.273 29.4448 84.273C35.2988 84.273 39.4898 82.48 41.9018 78.944C45.7838 73.25 45.2288 68.042 40.2058 63.022C37.4258 60.244 35.5778 56.148 35.1928 55.249C34.4168 52.587 32.3648 49.628 28.9538 49.628H28.9528C28.6658 49.628 28.3758 49.651 28.0898 49.696C26.5958 49.931 25.2898 50.791 24.3568 52.085C23.3498 50.833 22.3718 49.837 21.4868 49.275C20.1528 48.429 18.8198 48 17.5238 48ZM17.5238 52C18.0338 52 18.6568 52.217 19.3438 52.653C21.4768 54.006 25.5928 61.081 27.0998 63.833C27.6048 64.755 28.4678 65.145 29.2448 65.145C30.7868 65.145 31.9908 63.612 29.3858 61.664C25.4688 58.733 26.8428 53.942 28.7128 53.647C28.7948 53.634 28.8758 53.628 28.9538 53.628C30.6538 53.628 31.4038 56.558 31.4038 56.558C31.4038 56.558 33.6018 62.078 37.3778 65.851C41.1538 69.625 41.3488 72.654 38.5968 76.69C36.7198 79.442 33.1268 80.273 29.4448 80.273C25.6258 80.273 21.7108 79.379 19.5168 78.81C19.4088 78.782 6.0658 75.013 7.7558 71.805C8.0398 71.266 8.5078 71.05 9.0968 71.05C11.4768 71.05 15.8058 74.592 17.6668 74.592C18.0828 74.592 18.3758 74.415 18.4958 73.983C19.2888 71.138 6.4388 69.942 7.5218 65.821C7.7128 65.092 8.2308 64.796 8.9588 64.797C12.1038 64.797 19.1598 70.328 20.6388 70.328C20.7518 70.328 20.8328 70.295 20.8768 70.225C21.6178 69.029 21.2118 68.194 15.9888 65.033C10.7658 61.871 7.0998 59.969 9.1848 57.699C9.4248 57.437 9.7648 57.321 10.1778 57.321C13.3488 57.322 20.8408 64.14 20.8408 64.14C20.8408 64.14 22.8628 66.243 24.0858 66.243C24.3668 66.243 24.6058 66.132 24.7678 65.858C25.6348 64.396 16.7148 57.636 16.2118 54.847C15.8708 52.957 16.4508 52 17.5238 52Z" fill="#FF9D0B"></path><path class="origin-bottom-right transition-transform group-hover:-rotate-6" d="M38.5967 76.6898C41.3487 72.6538 41.1537 69.6248 37.3777 65.8508C33.6017 62.0778 31.4037 56.5578 31.4037 56.5578C31.4037 56.5578 30.5827 53.3518 28.7127 53.6468C26.8427 53.9418 25.4697 58.7328 29.3867 61.6638C33.3037 64.5938 28.6067 66.5848 27.0997 63.8328C25.5927 61.0808 21.4777 54.0058 19.3437 52.6528C17.2107 51.2998 15.7087 52.0578 16.2117 54.8468C16.7147 57.6358 25.6357 64.3958 24.7677 65.8588C23.8997 67.3208 20.8407 64.1398 20.8407 64.1398C20.8407 64.1398 11.2687 55.4288 9.18465 57.6988C7.10065 59.9688 10.7657 61.8708 15.9887 65.0328C21.2127 68.1938 21.6177 69.0288 20.8767 70.2248C20.1347 71.4208 8.60465 61.6998 7.52165 65.8208C6.43965 69.9418 19.2887 71.1378 18.4957 73.9828C17.7027 76.8288 9.44465 68.5978 7.75565 71.8048C6.06565 75.0128 19.4087 78.7818 19.5167 78.8098C23.8267 79.9278 34.7727 82.2968 38.5967 76.6898Z" fill="#FFD21E"></path><path class="origin-bottom-left transition-transform group-hover:rotate-6" d="M77.3999 48C79.0189 48 80.4659 48.665 81.4749 49.871C82.0989 50.618 82.7509 51.822 82.8039 53.625C83.4829 53.43 84.1359 53.321 84.7459 53.321C86.2959 53.321 87.6959 53.915 88.6859 54.994C89.9579 56.379 90.5229 58.081 90.2769 59.784C90.1599 60.595 89.8889 61.322 89.4839 61.995C90.3379 62.686 90.9669 63.648 91.2709 64.805C91.5089 65.712 91.7529 67.601 90.4789 69.547C90.5599 69.674 90.6359 69.806 90.7069 69.941C91.4729 71.395 91.5219 73.038 90.8459 74.568C89.8209 76.887 87.2739 78.714 82.3279 80.675C79.2509 81.895 76.4359 82.675 76.4109 82.682C72.3429 83.737 68.6639 84.273 65.4789 84.273C59.6249 84.273 55.4339 82.48 53.0219 78.944C49.1399 73.25 49.6949 68.042 54.7179 63.022C57.4979 60.244 59.3459 56.148 59.7309 55.249C60.5069 52.587 62.5589 49.628 65.9699 49.628H65.9709C66.2579 49.628 66.5479 49.651 66.8339 49.696C68.3279 49.931 69.6339 50.791 70.5669 52.085C71.5739 50.833 72.5519 49.837 73.4369 49.275C74.7709 48.429 76.1039 48 77.3999 48ZM77.3999 52C76.8899 52 76.2669 52.217 75.5799 52.653C73.4469 54.006 69.3309 61.081 67.8239 63.833C67.3189 64.755 66.4559 65.145 65.6789 65.145C64.1369 65.145 62.9329 63.612 65.5379 61.664C69.4549 58.733 68.0809 53.942 66.2109 53.647C66.1289 53.634 66.0479 53.628 65.9699 53.628C64.2699 53.628 63.5199 56.558 63.5199 56.558C63.5199 56.558 61.3219 62.078 57.5459 65.851C53.7699 69.625 53.5749 72.654 56.3269 76.69C58.2039 79.442 61.7969 80.273 65.4789 80.273C69.2979 80.273 73.2129 79.379 75.4069 78.81C75.5149 78.782 88.8579 75.013 87.1679 71.805C86.8839 71.266 86.4159 71.05 85.8269 71.05C83.4469 71.05 79.1179 74.592 77.2569 74.592C76.8409 74.592 76.5479 74.415 76.4279 73.983C75.6349 71.138 88.4849 69.942 87.4019 65.821C87.2109 65.092 86.6929 64.796 85.9649 64.797C82.8199 64.797 75.7639 70.328 74.2849 70.328C74.1719 70.328 74.0909 70.295 74.0469 70.225C73.3059 69.029 73.7119 68.194 78.9349 65.033C84.1579 61.871 87.8239 59.969 85.7389 57.699C85.4989 57.437 85.1589 57.321 84.7459 57.321C81.5749 57.322 74.0829 64.14 74.0829 64.14C74.0829 64.14 72.0609 66.243 70.8379 66.243C70.5569 66.243 70.3179 66.132 70.1559 65.858C69.2889 64.396 78.2089 57.636 78.7119 54.847C79.0529 52.957 78.4729 52 77.3999 52Z" fill="#FF9D0B"></path><path class="origin-bottom-left transition-transform group-hover:rotate-6" d="M56.3271 76.6898C53.5751 72.6538 53.7701 69.6248 57.5461 65.8508C61.3221 62.0778 63.5201 56.5578 63.5201 56.5578C63.5201 56.5578 64.3411 53.3518 66.2111 53.6468C68.0811 53.9418 69.4541 58.7328 65.5371 61.6638C61.6201 64.5938 66.3171 66.5848 67.8241 63.8328C69.3311 61.0808 73.4461 54.0058 75.5801 52.6528C77.7131 51.2998 79.2151 52.0578 78.7121 54.8468C78.2091 57.6358 69.2881 64.3958 70.1561 65.8588C71.0241 67.3208 74.0831 64.1398 74.0831 64.1398C74.0831 64.1398 83.6551 55.4288 85.7391 57.6988C87.8231 59.9688 84.1581 61.8708 78.9351 65.0328C73.7111 68.1938 73.3061 69.0288 74.0471 70.2248C74.7891 71.4208 86.3191 61.6998 87.4021 65.8208C88.4841 69.9418 75.6351 71.1378 76.4281 73.9828C77.2211 76.8288 85.4791 68.5978 87.1681 71.8048C88.8581 75.0128 75.5151 78.7818 75.4071 78.8098C71.0971 79.9278 60.1511 82.2968 56.3271 76.6898Z" fill="#FFD21E"></path></svg></a> <div class="pt-6 font-semibold text-black md:hidden md:pt-0">Website</div> <a class="hover:underline" href="/models">Models</a> <a class="hover:underline" href="/datasets">Datasets</a> <a class="hover:underline" href="/spaces">Spaces</a> <a class="hover:underline" href="/pricing">Pricing</a> <a class="hover:underline" href="/docs">Docs</a></nav></footer></div> <script> import("\/front\/build\/kube-8645c4d\/index.js"); window.moonSha = "kube-8645c4d\/"; window.__hf_deferred = {}; </script> <!-- Stripe --> <script> if (["hf.co", "huggingface.co"].includes(window.location.hostname)) { const script = document.createElement("script"); script.src = "https://js.stripe.com/v3/"; script.async = true; document.head.appendChild(script); } </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10