aboutsummaryrefslogtreecommitdiffstats
path: root/docs/proof/AssocMap.html
diff options
context:
space:
mode:
authorYann Herklotz <git@yannherklotz.com>2020-11-26 01:00:41 +0000
committerYann Herklotz <git@yannherklotz.com>2020-11-26 01:00:41 +0000
commitfa4b252945a870100305c159d20e264be18973ce (patch)
tree435cbd07a2af45f3f08dc8ac892fa48044047eeb /docs/proof/AssocMap.html
parent29bee524cccfe08c680f655b1969a4c421e0a969 (diff)
downloadvericert-kvx-fa4b252945a870100305c159d20e264be18973ce.tar.gz
vericert-kvx-fa4b252945a870100305c159d20e264be18973ce.zip
Add proof documentation
Diffstat (limited to 'docs/proof/AssocMap.html')
-rw-r--r--docs/proof/AssocMap.html735
1 files changed, 735 insertions, 0 deletions
diff --git a/docs/proof/AssocMap.html b/docs/proof/AssocMap.html
new file mode 100644
index 0000000..2bc4b2e
--- /dev/null
+++ b/docs/proof/AssocMap.html
@@ -0,0 +1,735 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" class="alectryon-standalone" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<title>AssocMap.v</title>
+<link rel="stylesheet" href="alectryon.css" type="text/css" />
+<link rel="stylesheet" href="docutils_basic.css" type="text/css" />
+<link rel="stylesheet" href="tango_subtle.css" type="text/css" />
+<link rel="stylesheet" href="tango_subtle.min.css" type="text/css" />
+<script type="text/javascript" src="alectryon.js"></script>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/IBM-type/0.5.4/css/ibm-type.min.css" integrity="sha512-sky5cf9Ts6FY1kstGOBHSybfKqdHR41M0Ldb0BjNiv3ifltoQIsg0zIaQ+wwdwgQ0w9vKFW7Js50lxH9vqNSSw==" crossorigin="anonymous" />
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/firacode/5.2.0/fira_code.min.css" integrity="sha512-MbysAYimH1hH2xYzkkMHB6MqxBqfP0megxsCLknbYqHVwXTCg9IqHbk+ZP/vnhO8UEW6PaXAkKe2vQ+SWACxxA==" crossorigin="anonymous" />
+</head>
+<body>
+<div class="alectryon-root alectryon-floating"><div class="document">
+
+
+<pre class="alectryon-io"><!-- Generator: Alectryon v1.0 --><span class="coq-wsp"><span class="highlight"><span class="c">(*</span>
+<span class="c"> * Vericert: Verified high-level synthesis.</span>
+<span class="c"> * Copyright (C) 2020 Yann Herklotz &lt;yann@yannherklotz.com&gt;</span>
+<span class="c"> *</span>
+<span class="c"> * This program is free software: you can redistribute it and/or modify</span>
+<span class="c"> * it under the terms of the GNU General Public License as published by</span>
+<span class="c"> * the Free Software Foundation, either version 3 of the License, or</span>
+<span class="c"> * (at your option) any later version.</span>
+<span class="c"> *</span>
+<span class="c"> * This program is distributed in the hope that it will be useful,</span>
+<span class="c"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
+<span class="c"> * GNU General Public License for more details.</span>
+<span class="c"> *</span>
+<span class="c"> * You should have received a copy of the GNU General Public License</span>
+<span class="c"> * along with this program. If not, see &lt;https://www.gnu.org/licenses/&gt;.</span>
+<span class="c"> *)</span>
+
+</span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">From</span> vericert <span class="kn">Require Import</span> Vericertlib ValueInt.</span></span><span class="coq-wsp">
+</span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">From</span> compcert <span class="kn">Require Import</span> Maps.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Definition</span> <span class="nf">reg</span> := positive.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Module</span> <span class="nf">AssocMap</span> := Maps.PTree.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Module</span> <span class="nf">AssocMapExt</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Import</span> AssocMap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Hint Resolve</span> elements_correct elements_complete
+ elements_keys_norepet : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Hint Resolve</span> gso gss : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Section</span> <span class="nf">Operations</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Variable</span> <span class="nv">A</span> : <span class="kt">Type</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Definition</span> <span class="nf">get_default</span> (<span class="nv">a</span> : A) (<span class="nv">k</span> : reg) (<span class="nv">m</span> : t A) : A :=
+ <span class="kr">match</span> get k m <span class="kr">with</span>
+ | None =&gt; a
+ | Some v =&gt; v
+ <span class="kr">end</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Fixpoint</span> <span class="nf">merge</span> (<span class="nv">m1</span> <span class="nv">m2</span> : t A) : t A :=
+ <span class="kr">match</span> m1, m2 <span class="kr">with</span>
+ | Node l1 (Some a) r1, Node l2 _ r2 =&gt; Node (merge l1 l2) (Some a) (merge r1 r2)
+ | Node l1 None r1, Node l2 o r2 =&gt; Node (merge l1 l2) o (merge r1 r2)
+ | Leaf, _ =&gt; m2
+ | _, _ =&gt; m1
+ <span class="kr">end</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk0" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk0"><span class="highlight"><span class="kn">Lemma</span> <span class="nf">merge_base_1</span> :
+ <span class="kr">forall</span> <span class="nv">am</span>,
+ merge (empty A) am = am.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> <span class="nv">am</span> : t A, merge (empty A) am = am</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk1" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk1"><span class="highlight"><span class="kn">Proof</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> <span class="nv">am</span> : t A, merge (empty A) am = am</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="nb">auto</span>.</span></span><span class="coq-wsp"> </span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Qed</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Hint Resolve</span> merge_base_1 : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk2" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk2"><span class="highlight"><span class="kn">Lemma</span> <span class="nf">merge_base_2</span> :
+ <span class="kr">forall</span> <span class="nv">am</span>,
+ merge am (empty A) = am.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> <span class="nv">am</span> : t A, merge am (empty A) = am</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk3" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk3"><span class="highlight"><span class="kn">Proof</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> <span class="nv">am</span> : t A, merge am (empty A) = am</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk4" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk4"><span class="highlight"><span class="nb">unfold</span> merge.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> <span class="nv">am</span> : t A,
+(<span class="kr">fix</span> merge (m1 m2 : t A) {<span class="kr">struct</span> m1} : t A :=
+ <span class="kr">match</span> m1 <span class="kr">with</span>
+ | Leaf =&gt; m2
+ | Node l1 (Some a) r1 =&gt;
+ <span class="kr">match</span> m2 <span class="kr">with</span>
+ | Leaf =&gt; m1
+ | Node l2 _ r2 =&gt;
+ Node (merge l1 l2) (Some a) (merge r1 r2)
+ <span class="kr">end</span>
+ | Node l1 None r1 =&gt;
+ <span class="kr">match</span> m2 <span class="kr">with</span>
+ | Leaf =&gt; m1
+ | Node l2 o r2 =&gt;
+ Node (merge l1 l2) o (merge r1 r2)
+ <span class="kr">end</span>
+ <span class="kr">end</span>) am (empty A) = am</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk5" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk5"><span class="highlight"><span class="nb">destruct</span> am; <span class="nb">trivial</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">tree A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">o</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">option A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am2</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">tree A</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">match</span> o <span class="kr">with</span>
+| Some a =&gt;
+ <span class="kr">match</span> empty A <span class="kr">with</span>
+ | Leaf =&gt; Node am1 o am2
+ | Node l2 _ r2 =&gt;
+ Node
+ ((<span class="kr">fix</span> merge (m1 m2 : t A) {<span class="kr">struct</span> m1} :
+ t A :=
+ <span class="kr">match</span> m1 <span class="kr">with</span>
+ | Leaf =&gt; m2
+ | Node l1 (Some a0) r1 =&gt;
+ <span class="kr">match</span> m2 <span class="kr">with</span>
+ | Leaf =&gt; m1
+ | Node l3 _ r3 =&gt;
+ Node (merge l1 l3) (Some a0)
+ (merge r1 r3)
+ <span class="kr">end</span>
+ | Node l1 None r1 =&gt;
+ <span class="kr">match</span> m2 <span class="kr">with</span>
+ | Leaf =&gt; m1
+ | Node l3 o1 r3 =&gt;
+ Node (merge l1 l3) o1
+ (merge r1 r3)
+ <span class="kr">end</span>
+ <span class="kr">end</span>) am1 l2) (Some a)
+ ((<span class="kr">fix</span> merge (m1 m2 : t A) {<span class="kr">struct</span> m1} :
+ t A :=
+ <span class="kr">match</span> m1 <span class="kr">with</span>
+ | Leaf =&gt; m2
+ | Node l1 (Some a0) r1 =&gt;
+ <span class="kr">match</span> m2 <span class="kr">with</span>
+ | Leaf =&gt; m1
+ | Node l3 _ r3 =&gt;
+ Node (merge l1 l3) (Some a0)
+ (merge r1 r3)
+ <span class="kr">end</span>
+ | Node l1 None r1 =&gt;
+ <span class="kr">match</span> m2 <span class="kr">with</span>
+ | Leaf =&gt; m1
+ | Node l3 o1 r3 =&gt;
+ Node (merge l1 l3) o1
+ (merge r1 r3)
+ <span class="kr">end</span>
+ <span class="kr">end</span>) am2 r2)
+ <span class="kr">end</span>
+| None =&gt;
+ <span class="kr">match</span> empty A <span class="kr">with</span>
+ | Leaf =&gt; Node am1 o am2
+ | Node l2 o r2 =&gt;
+ Node
+ ((<span class="kr">fix</span> merge (m1 m2 : t A) {<span class="kr">struct</span> m1} :
+ t A :=
+ <span class="kr">match</span> m1 <span class="kr">with</span>
+ | Leaf =&gt; m2
+ | Node l1 (Some a) r1 =&gt;
+ <span class="kr">match</span> m2 <span class="kr">with</span>
+ | Leaf =&gt; m1
+ | Node l3 _ r3 =&gt;
+ Node (merge l1 l3) (Some a)
+ (merge r1 r3)
+ <span class="kr">end</span>
+ | Node l1 None r1 =&gt;
+ <span class="kr">match</span> m2 <span class="kr">with</span>
+ | Leaf =&gt; m1
+ | Node l3 o1 r3 =&gt;
+ Node (merge l1 l3) o1
+ (merge r1 r3)
+ <span class="kr">end</span>
+ <span class="kr">end</span>) am1 l2) o
+ ((<span class="kr">fix</span> merge (m1 m2 : t A) {<span class="kr">struct</span> m1} :
+ t A :=
+ <span class="kr">match</span> m1 <span class="kr">with</span>
+ | Leaf =&gt; m2
+ | Node l1 (Some a) r1 =&gt;
+ <span class="kr">match</span> m2 <span class="kr">with</span>
+ | Leaf =&gt; m1
+ | Node l3 _ r3 =&gt;
+ Node (merge l1 l3) (Some a)
+ (merge r1 r3)
+ <span class="kr">end</span>
+ | Node l1 None r1 =&gt;
+ <span class="kr">match</span> m2 <span class="kr">with</span>
+ | Leaf =&gt; m1
+ | Node l3 o1 r3 =&gt;
+ Node (merge l1 l3) o1
+ (merge r1 r3)
+ <span class="kr">end</span>
+ <span class="kr">end</span>) am2 r2)
+ <span class="kr">end</span>
+<span class="kr">end</span> = Node am1 o am2</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="nb">destruct</span> o; <span class="nb">trivial</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Qed</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Hint Resolve</span> merge_base_2 : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk6" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk6"><span class="highlight"><span class="kn">Lemma</span> <span class="nf">merge_add_assoc</span> :
+ <span class="kr">forall</span> <span class="nv">r</span> <span class="nv">am</span> <span class="nv">am&#39;</span> <span class="nv">v</span>,
+ merge (<span class="nb">set</span> r v am) am&#39; = <span class="nb">set</span> r v (merge am am&#39;).</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">r</span> : positive) (<span class="nv">am</span> <span class="nv">am&#39;</span> : t A) (<span class="nv">v</span> : A),
+merge (<span class="nb">set</span> r v am) am&#39; = <span class="nb">set</span> r v (merge am am&#39;)</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk7" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk7"><span class="highlight"><span class="kn">Proof</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">r</span> : positive) (<span class="nv">am</span> <span class="nv">am&#39;</span> : t A) (<span class="nv">v</span> : A),
+merge (<span class="nb">set</span> r v am) am&#39; = <span class="nb">set</span> r v (merge am am&#39;)</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="nb">induction</span> r; <span class="nb">intros</span>; <span class="nb">destruct</span> am; <span class="nb">destruct</span> am&#39;; <span class="kp">try</span> (<span class="nb">destruct</span> o); <span class="nb">simpl</span>;
+ <span class="kp">try</span> <span class="nb">rewrite</span> IHr; <span class="kp">try</span> <span class="bp">reflexivity</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Qed</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Hint Resolve</span> merge_add_assoc : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk8" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk8"><span class="highlight"><span class="kn">Lemma</span> <span class="nf">merge_correct_1</span> :
+ <span class="kr">forall</span> <span class="nv">am</span> <span class="nv">bm</span> <span class="nv">k</span> <span class="nv">v</span>,
+ get k am = Some v -&gt;
+ get k (merge am bm) = Some v.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">am</span> <span class="nv">bm</span> : t A) (<span class="nv">k</span> : positive) (<span class="nv">v</span> : A),
+am ! k = Some v -&gt; (merge am bm) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk9" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk9"><span class="highlight"><span class="kn">Proof</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">am</span> <span class="nv">bm</span> : t A) (<span class="nv">k</span> : positive) (<span class="nv">v</span> : A),
+am ! k = Some v -&gt; (merge am bm) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="nb">induction</span> am; <span class="nb">intros</span>; <span class="nb">destruct</span> k; <span class="nb">destruct</span> bm; <span class="kp">try</span> (<span class="nb">destruct</span> o); <span class="nb">simpl</span>;
+ <span class="kp">try</span> <span class="nb">rewrite</span> gempty <span class="kr">in</span> H; <span class="kp">try</span> <span class="bp">discriminate</span>; <span class="kp">try</span> <span class="bp">assumption</span>; <span class="nb">auto</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Qed</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Hint Resolve</span> merge_correct_1 : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chka" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chka"><span class="highlight"><span class="kn">Lemma</span> <span class="nf">merge_correct_2</span> :
+ <span class="kr">forall</span> <span class="nv">am</span> <span class="nv">bm</span> <span class="nv">k</span> <span class="nv">v</span>,
+ get k am = None -&gt;
+ get k bm = Some v -&gt;
+ get k (merge am bm) = Some v.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">am</span> <span class="nv">bm</span> : t A) (<span class="nv">k</span> : positive) (<span class="nv">v</span> : A),
+am ! k = None -&gt;
+bm ! k = Some v -&gt; (merge am bm) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chkb" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chkb"><span class="highlight"><span class="kn">Proof</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">am</span> <span class="nv">bm</span> : t A) (<span class="nv">k</span> : positive) (<span class="nv">v</span> : A),
+am ! k = None -&gt;
+bm ! k = Some v -&gt; (merge am bm) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="nb">induction</span> am; <span class="nb">intros</span>; <span class="nb">destruct</span> k; <span class="nb">destruct</span> bm; <span class="kp">try</span> (<span class="nb">destruct</span> o); <span class="nb">simpl</span>;
+ <span class="kp">try</span> <span class="nb">rewrite</span> gempty <span class="kr">in</span> H; <span class="kp">try</span> <span class="bp">discriminate</span>; <span class="kp">try</span> <span class="bp">assumption</span>; <span class="nb">auto</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Qed</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Hint Resolve</span> merge_correct_2 : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Definition</span> <span class="nf">merge_fold</span> (<span class="nv">am</span> <span class="nv">bm</span> : t A) : t A :=
+ fold_right (<span class="kr">fun</span> <span class="nv">p</span> <span class="nv">a</span> =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm (elements am).</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chkc" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chkc"><span class="highlight"><span class="kn">Lemma</span> <span class="nf">add_assoc</span> :
+ <span class="kr">forall</span> (<span class="nv">k</span> : elt) (<span class="nv">v</span> : A) <span class="nv">l</span> <span class="nv">bm</span>,
+ List.In (k, v) l -&gt;
+ list_norepet (List.map fst l) -&gt;
+ @get A k (fold_right (<span class="kr">fun</span> <span class="nv">p</span> <span class="nv">a</span> =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l) = Some v.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">k</span> : elt) (<span class="nv">v</span> : A) (<span class="nv">l</span> : list (elt * A))
+ (<span class="nv">bm</span> : t A),
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm l) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chkd" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chkd"><span class="highlight"><span class="kn">Proof</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">k</span> : elt) (<span class="nv">v</span> : A) (<span class="nv">l</span> : list (elt * A))
+ (<span class="nv">bm</span> : t A),
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm l) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chke" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chke"><span class="highlight"><span class="nb">induction</span> l; <span class="nb">intros</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) nil</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst nil)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm nil) ! k = Some v</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chkf" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">a</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(elt * A)%type</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) (a :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst (a :: l))</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chkf"><hr></label><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm (a :: l)) ! k = Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk10" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk10"><span class="highlight">-</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) nil</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst nil)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm nil) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="bp">contradiction</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk11" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk11"><span class="highlight">-</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">a</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(elt * A)%type</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) (a :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst (a :: l))</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm (a :: l)) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk12" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk12"><span class="highlight"><span class="nb">destruct</span> a <span class="kr">as</span> [k&#39; v&#39;].</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk13" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk13"><span class="highlight"><span class="nb">destruct</span> (peq k k&#39;).</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">e</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k = k&#39;</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk14" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk14"><hr></label><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk15" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk15"><span class="highlight">+</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">e</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k = k&#39;</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk16" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk16"><span class="highlight"><span class="nb">inversion</span> H.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">e</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k = k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(k&#39;, v&#39;) = (k, v)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk17" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">e</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k = k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk17"><hr></label><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk18" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk18"><span class="highlight"><span class="nb">inversion</span> H1.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">e</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k = k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(k&#39;, v&#39;) = (k, v)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H3</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k&#39; = k</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H4</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">v&#39; = v</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k, v) :: l)) ! k =
+Some v</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk19" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">e</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k = k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk19"><hr></label><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk1a" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk1a"><span class="highlight"><span class="nb">inversion</span> H0.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">e</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k = k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(k&#39;, v&#39;) = (k, v)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H3</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k&#39; = k</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H4</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">v&#39; = v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">hd</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">tl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H6</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k&#39; (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H7</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H2</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">hd = k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H5</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">tl = List.map fst l</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k, v) :: l)) ! k =
+Some v</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk1b" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">e</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k = k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk1b"><hr></label><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk1c" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk1c"><span class="highlight"><span class="nb">subst</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k&#39;, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k&#39; = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k&#39;, v) ((k&#39;, v) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H3</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k&#39; = k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(k&#39;, v) = (k&#39;, v)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H6</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k&#39; (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H7</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst l)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v) :: l)) ! k&#39; =
+Some v</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk1d" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">e</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k = k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk1d"><hr></label><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk1e" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk1e"><span class="highlight"><span class="nb">simpl</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k&#39;, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k&#39; = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k&#39;, v) ((k&#39;, v) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H3</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k&#39; = k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(k&#39;, v) = (k&#39;, v)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H6</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k&#39; (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H7</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst l)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(<span class="nb">set</span> k&#39; v
+ (fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm l)) ! k&#39; = Some v</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk1f" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">e</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k = k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk1f"><hr></label><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk20" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk20"><span class="highlight"><span class="nb">auto with</span> assocmap.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">e</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k = k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk21" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk21"><span class="highlight"><span class="nb">inversion</span> H0; <span class="nb">subst</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k&#39;, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k&#39; = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k&#39;, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k&#39;, v) l</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H4</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k&#39; (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H5</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst l)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k&#39; =
+Some v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk22" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk22"><span class="highlight"><span class="nb">apply</span> in_map <span class="kr">with</span> (f:=fst) <span class="kr">in</span> H1.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k&#39;, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k&#39; = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k&#39;, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (fst (k&#39;, v)) (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H4</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k&#39; (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H5</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst l)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k&#39; =
+Some v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="bp">contradiction</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk23" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk23"><span class="highlight">+</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk24" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk24"><span class="highlight"><span class="nb">inversion</span> H.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(k&#39;, v&#39;) = (k, v)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk25" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk25"><hr></label><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk26" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk26"><span class="highlight"><span class="nb">inversion</span> H1.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(k&#39;, v&#39;) = (k, v)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H3</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k&#39; = k</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H4</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">v&#39; = v</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k, v) :: l)) ! k =
+Some v</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk27" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk27"><hr></label><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk28" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk28"><span class="highlight"><span class="nb">inversion</span> H0.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(k&#39;, v&#39;) = (k, v)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H3</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k&#39; = k</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H4</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">v&#39; = v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">hd</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">tl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H6</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k&#39; (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H7</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H2</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">hd = k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H5</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">tl = List.map fst l</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k, v) :: l)) ! k =
+Some v</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk29" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk29"><hr></label><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk2a" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk2a"><span class="highlight"><span class="nb">subst</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(k, v) = (k, v)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k, v) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k, v) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H6</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H7</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst l)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k, v) :: l)) ! k =
+Some v</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk2b" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk2b"><hr></label><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk2c" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk2c"><span class="highlight"><span class="nb">simpl</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(k, v) = (k, v)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k, v) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k, v) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H6</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H7</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst l)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(<span class="nb">set</span> k v
+ (fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm l)) ! k = Some v</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk2d" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk2d"><hr></label><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk2e" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk2e"><span class="highlight"><span class="nb">rewrite</span> gso; <span class="kp">try</span> <span class="bp">assumption</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(k, v) = (k, v)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k, v) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k, v) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H6</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H7</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst l)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm l) ! k = Some v</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk2f" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk2f"><hr></label><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk30" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk30"><span class="highlight"><span class="nb">apply</span> IHl.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(k, v) = (k, v)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k, v) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k, v) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H6</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H7</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst l)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">In (k, v) l</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk31" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(k, v) = (k, v)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k, v) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k, v) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H6</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H7</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst l)</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk31"><hr></label><div class="goal-conclusion"><span class="highlight">list_norepet (List.map fst l)</span></div></blockquote><input class="coq-extra-goal-toggle" id="assocmap-v-chk32" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk32"><hr></label><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk33" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk33"><span class="highlight"><span class="bp">contradiction</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(k, v) = (k, v)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k, v) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k, v) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H6</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H7</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst l)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">list_norepet (List.map fst l)</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk34" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk34"><hr></label><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk35" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk35"><span class="highlight"><span class="bp">contradiction</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk36" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk36"><span class="highlight"><span class="nb">simpl</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(<span class="nb">set</span> k&#39; v&#39;
+ (fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm l)) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk37" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk37"><span class="highlight"><span class="nb">rewrite</span> gso; <span class="kp">try</span> <span class="bp">assumption</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm l) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk38" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk38"><span class="highlight"><span class="nb">apply</span> IHl.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">In (k, v) l</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk39" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk39"><hr></label><div class="goal-conclusion"><span class="highlight">list_norepet (List.map fst l)</span></div></blockquote></div></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk3a" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk3a"><span class="highlight"><span class="bp">assumption</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">list_norepet (List.map fst l)</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk3b" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk3b"><span class="highlight"><span class="nb">inversion</span> H0.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">hd</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">tl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H4</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k&#39; (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H5</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H2</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">hd = k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H3</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">tl = List.map fst l</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">list_norepet (List.map fst l)</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk3c" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk3c"><span class="highlight"><span class="nb">subst</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+In (k, v) l -&gt;
+list_norepet (List.map fst l) -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) ((k&#39;, v&#39;) :: l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, v) l</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H4</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k&#39; (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H5</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list_norepet (List.map fst l)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">list_norepet (List.map fst l)</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="bp">assumption</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Qed</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Hint Resolve</span> add_assoc : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk3d" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk3d"><span class="highlight"><span class="kn">Lemma</span> <span class="nf">not_in_assoc</span> :
+ <span class="kr">forall</span> <span class="nv">k</span> <span class="nv">v</span> <span class="nv">l</span> <span class="nv">bm</span>,
+ ~ List.In k (List.map (@fst elt A) l) -&gt;
+ @get A k bm = Some v -&gt;
+ get k (fold_right (<span class="kr">fun</span> <span class="nv">p</span> <span class="nv">a</span> =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l) = Some v.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">k</span> : elt) (<span class="nv">v</span> : A) (<span class="nv">l</span> : list (elt * A))
+ (<span class="nv">bm</span> : t A),
+~ In k (List.map fst l) -&gt;
+bm ! k = Some v -&gt;
+(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm l) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk3e" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk3e"><span class="highlight"><span class="kn">Proof</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">k</span> : elt) (<span class="nv">v</span> : A) (<span class="nv">l</span> : list (elt * A))
+ (<span class="nv">bm</span> : t A),
+~ In k (List.map fst l) -&gt;
+bm ! k = Some v -&gt;
+(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm l) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk3f" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk3f"><span class="highlight"><span class="nb">induction</span> l; <span class="nb">intros</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k (List.map fst nil)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">bm ! k = Some v</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm nil) ! k = Some v</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk40" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">a</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(elt * A)%type</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+~ In k (List.map fst l) -&gt;
+bm ! k = Some v -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k (List.map fst (a :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">bm ! k = Some v</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk40"><hr></label><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm (a :: l)) ! k = Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk41" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk41"><span class="highlight">-</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k (List.map fst nil)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">bm ! k = Some v</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm nil) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="bp">assumption</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk42" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk42"><span class="highlight">-</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">a</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(elt * A)%type</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+~ In k (List.map fst l) -&gt;
+bm ! k = Some v -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k (List.map fst (a :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">bm ! k = Some v</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm (a :: l)) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk43" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk43"><span class="highlight"><span class="nb">destruct</span> a <span class="kr">as</span> [k&#39; v&#39;].</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+~ In k (List.map fst l) -&gt;
+bm ! k = Some v -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k (List.map fst ((k&#39;, v&#39;) :: l))</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">bm ! k = Some v</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm ((k&#39;, v&#39;) :: l)) ! k =
+Some v</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk44" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk44"><span class="highlight"><span class="nb">destruct</span> (peq k k&#39;); <span class="nb">subst</span>;
+ <span class="nb">simpl</span> <span class="kr">in</span> *; <span class="nb">apply</span> Decidable.not_or <span class="kr">in</span> H; <span class="nb">destruct</span> H.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+~ In k&#39; (List.map fst l) -&gt;
+bm ! k&#39; = Some v -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k&#39; = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">bm ! k&#39; = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k&#39; &lt;&gt; k&#39;</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k&#39; (List.map fst l)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(<span class="nb">set</span> k&#39; v&#39;
+ (fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm l)) ! k&#39; = Some v</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk45" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+~ In k (List.map fst l) -&gt;
+bm ! k = Some v -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k&#39; &lt;&gt; k</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">bm ! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk45"><hr></label><div class="goal-conclusion"><span class="highlight">(<span class="nb">set</span> k&#39; v&#39;
+ (fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm l)) ! k = Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk46" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk46"><span class="highlight"><span class="bp">contradiction</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">elt</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v'</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">l</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">list (elt * A)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">IHl</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">forall</span> <span class="nv">bm</span> : t A,
+~ In k (List.map fst l) -&gt;
+bm ! k = Some v -&gt;
+(fold_right (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt; <span class="nb">set</span> (fst p) (snd p) a) bm l)
+! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k&#39; &lt;&gt; k</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H1</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">~ In k (List.map fst l)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">bm ! k = Some v</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">n</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k &lt;&gt; k&#39;</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(<span class="nb">set</span> k&#39; v&#39;
+ (fold_right
+ (<span class="kr">fun</span> (<span class="nv">p</span> : positive * A) (<span class="nv">a</span> : t A) =&gt;
+ <span class="nb">set</span> (fst p) (snd p) a) bm l)) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="nb">rewrite</span> AssocMap.gso; <span class="nb">auto</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Qed</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Hint Resolve</span> not_in_assoc : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk47" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk47"><span class="highlight"><span class="kn">Lemma</span> <span class="nf">elements_iff</span> :
+ <span class="kr">forall</span> <span class="nv">am</span> <span class="nv">k</span>,
+ (<span class="kr">exists</span> <span class="nv">v</span>, get k am = Some v) &lt;-&gt;
+ List.In k (List.map (@fst _ A) (elements am)).</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">am</span> : t A) (<span class="nv">k</span> : positive),
+(<span class="kr">exists</span> <span class="nv">v</span> : A, am ! k = Some v) &lt;-&gt;
+In k (List.map fst (elements am))</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk48" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk48"><span class="highlight"><span class="kn">Proof</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">am</span> : t A) (<span class="nv">k</span> : positive),
+(<span class="kr">exists</span> <span class="nv">v</span> : A, am ! k = Some v) &lt;-&gt;
+In k (List.map fst (elements am))</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk49" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk49"><span class="highlight"><span class="nb">split</span>; <span class="nb">intros</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">exists</span> <span class="nv">v</span> : A, am ! k = Some v</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">In k (List.map fst (elements am))</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk4a" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In k (List.map fst (elements am))</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk4a"><hr></label><div class="goal-conclusion"><span class="highlight"><span class="kr">exists</span> <span class="nv">v</span> : A, am ! k = Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk4b" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk4b"><span class="highlight"><span class="nb">destruct</span> H.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">x</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">am ! k = Some x</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">In k (List.map fst (elements am))</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk4c" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In k (List.map fst (elements am))</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk4c"><hr></label><div class="goal-conclusion"><span class="highlight"><span class="kr">exists</span> <span class="nv">v</span> : A, am ! k = Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk4d" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk4d"><span class="highlight"><span class="nb">apply</span> elements_correct <span class="kr">in</span> H.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">x</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (k, x) (elements am)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">In k (List.map fst (elements am))</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk4e" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In k (List.map fst (elements am))</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk4e"><hr></label><div class="goal-conclusion"><span class="highlight"><span class="kr">exists</span> <span class="nv">v</span> : A, am ! k = Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk4f" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk4f"><span class="highlight"><span class="nb">apply</span> in_map <span class="kr">with</span> (f := fst) <span class="kr">in</span> H.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">x</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In (fst (k, x)) (List.map fst (elements am))</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">In k (List.map fst (elements am))</span></div></blockquote><div class="coq-extra-goals"><input class="coq-extra-goal-toggle" id="assocmap-v-chk50" style="display: none" type="checkbox"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In k (List.map fst (elements am))</span></span></span></span></div></div><label class="goal-separator coq-extra-goal-label" for="assocmap-v-chk50"><hr></label><div class="goal-conclusion"><span class="highlight"><span class="kr">exists</span> <span class="nv">v</span> : A, am ! k = Some v</span></div></blockquote></div></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk51" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk51"><span class="highlight"><span class="nb">apply</span> H.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In k (List.map fst (elements am))</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">exists</span> <span class="nv">v</span> : A, am ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk52" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk52"><span class="highlight"><span class="nb">apply</span> list_in_map_inv <span class="kr">in</span> H.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">exists</span> <span class="nv">x</span> : positive * A,
+ k = fst x /\ In x (elements am)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">exists</span> <span class="nv">v</span> : A, am ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk53" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk53"><span class="highlight"><span class="nb">destruct</span> H.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">x</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(positive * A)%type</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k = fst x /\ In x (elements am)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">exists</span> <span class="nv">v</span> : A, am ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk54" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk54"><span class="highlight"><span class="nb">destruct</span> H.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">x</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(positive * A)%type</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">k = fst x</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In x (elements am)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">exists</span> <span class="nv">v</span> : A, am ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk55" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk55"><span class="highlight"><span class="nb">subst</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">x</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(positive * A)%type</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In x (elements am)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">exists</span> <span class="nv">v</span> : A, am ! (fst x) = Some v</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk56" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk56"><span class="highlight"><span class="kr">exists</span> (<span class="nv">snd</span> <span class="nv">x</span>).</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">x</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(positive * A)%type</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In x (elements am)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">am ! (fst x) = Some (snd x)</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk57" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk57"><span class="highlight"><span class="nb">apply</span> elements_complete.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">x</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(positive * A)%type</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In x (elements am)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">In (fst x, snd x) (elements am)</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk58" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk58"><span class="highlight"><span class="nb">assert</span> (x = (fst x, snd x)) <span class="bp">by</span> <span class="nb">apply</span> surjective_pairing.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">x</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">(positive * A)%type</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">In x (elements am)</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">x = (fst x, snd x)</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">In (fst x, snd x) (elements am)</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="nb">rewrite</span> H <span class="kr">in</span> H0; <span class="bp">assumption</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Qed</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Hint Resolve</span> elements_iff : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk59" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk59"><span class="highlight"><span class="kn">Lemma</span> <span class="nf">elements_correct&#39;</span> :
+ <span class="kr">forall</span> <span class="nv">am</span> <span class="nv">k</span>,
+ ~ (<span class="kr">exists</span> <span class="nv">v</span>, get k am = Some v) &lt;-&gt;
+ ~ List.In k (List.map (@fst _ A) (elements am)).</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">am</span> : t A) (<span class="nv">k</span> : positive),
+~ (<span class="kr">exists</span> <span class="nv">v</span> : A, am ! k = Some v) &lt;-&gt;
+~ In k (List.map fst (elements am))</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk5a" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk5a"><span class="highlight"><span class="kn">Proof</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">am</span> : t A) (<span class="nv">k</span> : positive),
+~ (<span class="kr">exists</span> <span class="nv">v</span> : A, am ! k = Some v) &lt;-&gt;
+~ In k (List.map fst (elements am))</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="nb">auto using</span> not_iff_compat <span class="kr">with</span> assocmap.</span></span><span class="coq-wsp"> </span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Qed</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Hint Resolve</span> elements_correct&#39; : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk5b" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk5b"><span class="highlight"><span class="kn">Lemma</span> <span class="nf">elements_correct_none</span> :
+ <span class="kr">forall</span> <span class="nv">am</span> <span class="nv">k</span>,
+ get k am = None -&gt;
+ ~ List.In k (List.map (@fst _ A) (elements am)).</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">am</span> : t A) (<span class="nv">k</span> : positive),
+am ! k = None -&gt; ~ In k (List.map fst (elements am))</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk5c" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk5c"><span class="highlight"><span class="kn">Proof</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">am</span> : t A) (<span class="nv">k</span> : positive),
+am ! k = None -&gt; ~ In k (List.map fst (elements am))</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk5d" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk5d"><span class="highlight"><span class="nb">intros</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">am ! k = None</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">~ In k (List.map fst (elements am))</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk5e" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk5e"><span class="highlight"><span class="nb">apply</span> elements_correct&#39;.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">am ! k = None</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">~ (<span class="kr">exists</span> <span class="nv">v</span> : A, am ! k = Some v)</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk5f" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk5f"><span class="highlight"><span class="nb">unfold</span> not.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">am ! k = None</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(<span class="kr">exists</span> <span class="nv">v</span> : A, am ! k = Some v) -&gt; <span class="kt">False</span></span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk60" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk60"><span class="highlight"><span class="nb">intros</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">am ! k = None</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kr">exists</span> <span class="nv">v</span> : A, am ! k = Some v</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kt">False</span></span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk61" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk61"><span class="highlight"><span class="nb">destruct</span> H0.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">am ! k = None</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">x</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">am ! k = Some x</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kt">False</span></span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk62" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk62"><span class="highlight"><span class="nb">rewrite</span> H <span class="kr">in</span> H0.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">am ! k = None</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">x</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">None = Some x</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kt">False</span></span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="bp">discriminate</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Qed</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Hint Resolve</span> elements_correct_none : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk63" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk63"><span class="highlight"><span class="kn">Lemma</span> <span class="nf">merge_fold_add</span> :
+ <span class="kr">forall</span> <span class="nv">k</span> <span class="nv">v</span> <span class="nv">am</span> <span class="nv">bm</span>,
+ am ! k = Some v -&gt;
+ (merge_fold am bm) ! k = Some v.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">k</span> : positive) (<span class="nv">v</span> : A) (<span class="nv">am</span> : PTree.t A)
+ (<span class="nv">bm</span> : t A),
+am ! k = Some v -&gt; (merge_fold am bm) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk64" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk64"><span class="highlight"><span class="kn">Proof</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">k</span> : positive) (<span class="nv">v</span> : A) (<span class="nv">am</span> : PTree.t A)
+ (<span class="nv">bm</span> : t A),
+am ! k = Some v -&gt; (merge_fold am bm) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="nb">unfold</span> merge_fold; <span class="nb">auto with</span> assocmap.</span></span><span class="coq-wsp"> </span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Qed</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Hint Resolve</span> merge_fold_add : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk65" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk65"><span class="highlight"><span class="kn">Lemma</span> <span class="nf">merge_fold_not_in</span> :
+ <span class="kr">forall</span> <span class="nv">k</span> <span class="nv">v</span> <span class="nv">am</span> <span class="nv">bm</span>,
+ get k am = None -&gt;
+ get k bm = Some v -&gt;
+ get k (merge_fold am bm) = Some v.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">k</span> : positive) (<span class="nv">v</span> : A) (<span class="nv">am</span> <span class="nv">bm</span> : t A),
+am ! k = None -&gt;
+bm ! k = Some v -&gt; (merge_fold am bm) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk66" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk66"><span class="highlight"><span class="kn">Proof</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">k</span> : positive) (<span class="nv">v</span> : A) (<span class="nv">am</span> <span class="nv">bm</span> : t A),
+am ! k = None -&gt;
+bm ! k = Some v -&gt; (merge_fold am bm) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk67" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk67"><span class="highlight"><span class="nb">intros</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">k</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">am, bm</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">t A</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">am ! k = None</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H0</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">bm ! k = Some v</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">(merge_fold am bm) ! k = Some v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="nb">apply</span> not_in_assoc; <span class="nb">auto with</span> assocmap.</span></span><span class="coq-wsp"> </span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Qed</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Hint Resolve</span> merge_fold_not_in : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk68" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk68"><span class="highlight"><span class="kn">Lemma</span> <span class="nf">merge_fold_base</span> :
+ <span class="kr">forall</span> <span class="nv">am</span>,
+ merge_fold (empty A) am = am.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> <span class="nv">am</span> : t A, merge_fold (empty A) am = am</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk69" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk69"><span class="highlight"><span class="kn">Proof</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">A</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight"><span class="kt">Type</span></span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> <span class="nv">am</span> : t A, merge_fold (empty A) am = am</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="nb">auto</span>.</span></span><span class="coq-wsp"> </span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Qed</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Hint Resolve</span> merge_fold_base : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-wsp"> </span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">End</span> <span class="nf">Operations</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">End</span> <span class="nf">AssocMapExt</span>.</span></span><span class="coq-wsp">
+</span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Import</span> AssocMapExt.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Definition</span> <span class="nf">assocmap</span> := AssocMap.t value.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Definition</span> <span class="nf">find_assocmap</span> (<span class="nv">n</span> : nat) : reg -&gt; assocmap -&gt; value :=
+ get_default value (ZToValue <span class="mi">0</span>).</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Definition</span> <span class="nf">empty_assocmap</span> : assocmap := AssocMap.empty value.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Definition</span> <span class="nf">merge_assocmap</span> : assocmap -&gt; assocmap -&gt; assocmap := merge value.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Ltac</span> <span class="nf">unfold_merge</span> :=
+ <span class="nb">unfold</span> merge_assocmap; <span class="kp">try</span> (<span class="kp">repeat</span> (<span class="nb">rewrite</span> merge_add_assoc));
+ <span class="nb">rewrite</span> AssocMapExt.merge_base_1.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Declare Scope</span> assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Notation</span> <span class="s2">&quot;a ! b&quot;</span> := (AssocMap.get b a) (<span class="kn">at level</span> <span class="mi">1</span>) : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Notation</span> <span class="s2">&quot;a # ( b , c )&quot;</span> := (find_assocmap c b a) (<span class="kn">at level</span> <span class="mi">1</span>) : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Notation</span> <span class="s2">&quot;a # b&quot;</span> := (find_assocmap <span class="mi">32</span> b a) (<span class="kn">at level</span> <span class="mi">1</span>) : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Notation</span> <span class="s2">&quot;a ## b&quot;</span> := (List.map (<span class="kr">fun</span> <span class="nv">c</span> =&gt; find_assocmap <span class="mi">32</span> c a) b) (<span class="kn">at level</span> <span class="mi">1</span>) : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Notation</span> <span class="s2">&quot;a # b &#39;&lt;-&#39; c&quot;</span> := (AssocMap.<span class="nb">set</span> b c a) (<span class="kn">at level</span> <span class="mi">1</span>, b <span class="kn">at next level</span>) : assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-wsp"><span class="highlight">
+</span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Local Open Scope</span> assocmap.</span></span><span class="coq-wsp">
+</span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk6a" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk6a"><span class="highlight"><span class="kn">Lemma</span> <span class="nf">find_get_assocmap</span> :
+ <span class="kr">forall</span> <span class="nv">assoc</span> <span class="nv">r</span> <span class="nv">v</span>,
+ assoc ! r = Some v -&gt;
+ assoc # r = v.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">assoc</span> : AssocMap.t value) (<span class="nv">r</span> : positive)
+ (<span class="nv">v</span> : value), assoc ! r = Some v -&gt; assoc # r = v</span></div></blockquote></div></div></small><span class="coq-wsp">
+</span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk6b" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk6b"><span class="highlight"><span class="kn">Proof</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">forall</span> (<span class="nv">assoc</span> : AssocMap.t value) (<span class="nv">r</span> : positive)
+ (<span class="nv">v</span> : value), assoc ! r = Some v -&gt; assoc # r = v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk6c" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk6c"><span class="highlight"><span class="nb">intros</span>.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">assoc</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">AssocMap.t value</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">r</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">value</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">assoc ! r = Some v</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">assoc # r = v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk6d" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk6d"><span class="highlight"><span class="nb">unfold</span> find_assocmap, AssocMapExt.get_default.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">assoc</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">AssocMap.t value</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">r</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">value</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">assoc ! r = Some v</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight"><span class="kr">match</span> assoc ! r <span class="kr">with</span>
+| Some v =&gt; v
+| None =&gt; ZToValue <span class="mi">0</span>
+<span class="kr">end</span> = v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><input class="coq-toggle" id="assocmap-v-chk6e" style="display: none" type="checkbox"><label class="coq-input" for="assocmap-v-chk6e"><span class="highlight"><span class="nb">rewrite</span> H.</span></label><small class="coq-output"><div class="coq-output-sticky-wrapper"><div class="coq-goals"><blockquote class="coq-goal"><div class="goal-hyps"><div class="goal-hyp"><span class="hyp-names">assoc</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">AssocMap.t value</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">r</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">positive</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">v</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">value</span></span></span></span></div><div class="goal-hyp"><span class="hyp-names">H</span><span><span class="hyp-type-block"><span class="hyp-punct">:</span><span class="hyp-type"><span class="highlight">assoc ! r = Some v</span></span></span></span></div></div><span class="goal-separator"><hr></span><div class="goal-conclusion"><span class="highlight">v = v</span></div></blockquote></div></div></small><span class="coq-wsp"> </span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="nb">trivial</span>.</span></span><span class="coq-wsp"> </span></span><span class="coq-sentence"><span class="coq-input"><span class="highlight"><span class="kn">Qed</span>.</span></span></span></pre>
+</div>
+</div></body>
+</html>