From 73e1afb4a3a11433e464d2671f4da5536228fff3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 15 Mar 2024 09:44:39 +0000 Subject: [PATCH] Deploy to GitHub pages --- .nojekyll | 0 docs/coqdoc/ABS.abs_defs.html | 267 ++++ docs/coqdoc/ABS.abs_examples.html | 89 ++ .../coqdoc/ABS.abs_functional_metatheory.html | 825 ++++++++++++ docs/coqdoc/ABS.utils.html | 775 ++++++++++++ docs/coqdoc/config.js | 79 ++ docs/coqdoc/coqdoc.css | 197 +++ docs/coqdoc/coqdocjs.css | 239 ++++ docs/coqdoc/coqdocjs.js | 197 +++ docs/coqdoc/indexpage.html | 1101 +++++++++++++++++ docs/coqdoc/toc.html | 48 + docs/report/main.pdf | Bin 0 -> 167718 bytes index.html | 42 + 13 files changed, 3859 insertions(+) create mode 100644 .nojekyll create mode 100644 docs/coqdoc/ABS.abs_defs.html create mode 100644 docs/coqdoc/ABS.abs_examples.html create mode 100644 docs/coqdoc/ABS.abs_functional_metatheory.html create mode 100644 docs/coqdoc/ABS.utils.html create mode 100644 docs/coqdoc/config.js create mode 100644 docs/coqdoc/coqdoc.css create mode 100644 docs/coqdoc/coqdocjs.css create mode 100644 docs/coqdoc/coqdocjs.js create mode 100644 docs/coqdoc/indexpage.html create mode 100644 docs/coqdoc/toc.html create mode 100644 docs/report/main.pdf create mode 100644 index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/coqdoc/ABS.abs_defs.html b/docs/coqdoc/ABS.abs_defs.html new file mode 100644 index 0000000..621715f --- /dev/null +++ b/docs/coqdoc/ABS.abs_defs.html @@ -0,0 +1,267 @@ + + + + + + + + + + + + + +
+
+
+(* generated by Ott 0.33 from: src/abs.ott *)
+ +
+Require Import Arith.
+Require Import Bool.
+Require Import List.
+Require Import Ott.ott_list_core.
+ +
+Require Export Ascii.
+Require Export String.
+Require Export ZArith.
+Require Import Lia.
+From Equations Require Import Equations.
+ +
+Require Import FMapList OrderedTypeEx.
+Module Map <: FMapInterface.S := FMapList.Make String_as_OT.
+ +
+#[export] Hint Resolve bool_dec : ott_coq_equality.
+#[export] Hint Resolve ascii_dec : ott_coq_equality.
+#[export] Hint Resolve Pos.eq_dec : ott_coq_equality.
+ +
+
+ +
+

ABS Definitions

+ +
+
+ +
+Definition i : Set := nat. (*r index variables (subscripts) *)
+Lemma eq_i: forall (x y : i), {x = y} + {x <> y}.
+Proof.
+  decide equality; auto with ott_coq_equality arith.
+Defined.
+Hint Resolve eq_i : ott_coq_equality.
+Definition fn : Set := string. (*r function name *)
+Lemma eq_fn: forall (x y : fn), {x = y} + {x <> y}.
+Proof.
+  decide equality; auto with ott_coq_equality arith.
+Defined.
+Hint Resolve eq_fn : ott_coq_equality.
+Definition x : Set := string. (*r variable *)
+Lemma eq_x: forall (x' y : x), {x' = y} + {x' <> y}.
+Proof.
+  decide equality; auto with ott_coq_equality arith.
+Defined.
+Hint Resolve eq_x : ott_coq_equality.
+Definition b : Set := bool. (*r boolean *)
+Lemma eq_b: forall (x y : b), {x = y} + {x <> y}.
+Proof.
+  decide equality; auto with ott_coq_equality arith.
+Defined.
+Hint Resolve eq_b : ott_coq_equality.
+Definition z : Set := Z. (*r integer *)
+Lemma eq_z: forall (x y : z), {x = y} + {x <> y}.
+Proof.
+  decide equality; auto with ott_coq_equality arith.
+Defined.
+Hint Resolve eq_z : ott_coq_equality.
+ +
+Inductive T : Set := (*r ground type *)
+ | T_bool : T
+ | T_int : T.
+ +
+Inductive t : Set := (*r ground term *)
+ | t_b (b5:b) (*r boolean *)
+ | t_int (z5:z) (*r integer *).
+ +
+Inductive sig : Set :=
+ | sig_sig (_:list T) (T_5:T).
+ +
+Inductive e : Set := (*r expression *)
+ | e_t (t5:t) (*r term *)
+ | e_var (x5:x) (*r variable *)
+ | e_fn_call (fn5:fn) (_:list e) (*r function call *).
+ +
+Inductive ctxv : Set :=
+ | ctxv_T (T5:T)
+ | ctxv_sig (sig5:sig).
+ +
+Inductive F : Set := (*r function definition *)
+ | F_fn (T_5:T) (fn5:fn) (_:list (T*x)) (e5:e).
+ +
+Definition s : Type := Map.t t.
+ +
+Definition G : Type := Map.t ctxv.
+
+ +
+induction principles +
+
+Section e_rect.
+ +
+Variables
+  (P_e : e -> Prop)
+  (P_list_e : list e -> Prop).
+ +
+Hypothesis
+  (H_e_t : forall (t5:t), P_e (e_t t5))
+  (H_e_var : forall (x5:x), P_e (e_var x5))
+  (H_e_fn_call : forall (e_list:list e), P_list_e e_list -> forall (fn5:fn), P_e (e_fn_call fn5 e_list))
+  (H_list_e_nil : P_list_e nil)
+  (H_list_e_cons : forall (e0:e), P_e e0 -> forall (e_l:list e), P_list_e e_l -> P_list_e (cons e0 e_l)).
+ +
+Fixpoint e_ott_ind (n:e) : P_e n :=
+  match n as x return P_e x with
+  | (e_t t5) => H_e_t t5
+  | (e_var x5) => H_e_var x5
+  | (e_fn_call fn5 e_list) => H_e_fn_call e_list (((fix e_list_ott_ind (e_l:list e) : P_list_e e_l := match e_l as x return P_list_e x with nil => H_list_e_nil | cons e1 xl => H_list_e_cons e1(e_ott_ind e1)xl (e_list_ott_ind xl) end)) e_list) fn5
+end.
+ +
+End e_rect.
+ +
+Definition disjoint {A:Type} (l1 l2: list A): Prop :=
forall a, In a l1 -> ~ In a l2.
+ +
+Equations e_var_subst_one (e5:e) (x_ y_: x) : e := {
e_var_subst_one (e_t t) _ _ := e_t t;
e_var_subst_one (e_var x0) x_ y_ := if (eq_x x0 x_) then (e_var y_) else (e_var x0);
e_var_subst_one (e_fn_call fn0 arg_list) x_ y_ := e_fn_call fn0 (e_list_subst_one arg_list x_ y_) }
+where e_list_subst_one (es:list e) (x_ y_: x) : list e := {
e_list_subst_one nil _ _ := nil;
e_list_subst_one (e0::es) x_ y_ := e_var_subst_one e0 x_ y_ :: e_list_subst_one es x_ y_
+}.
+ +
+Definition e_var_subst (e5:e) (l:list (x*x)) : e := fold_right (fun '(x', y') e' => e_var_subst_one e' x' y') e5 l.
+ +
+Equations fresh_vars_e (l : list x) (e0 : e) : Prop := {
fresh_vars_e _ (e_t _) := True;
fresh_vars_e l (e_var x) := ~ In x l;
fresh_vars_e l (e_fn_call fn el) := fresh_vars_el l el }
+where fresh_vars_el (l : list x) (el0 : list e) : Prop := {
fresh_vars_el l nil := True;
fresh_vars_el l (e1::el0) := fresh_vars_e l e1 /\ fresh_vars_el l el0 }.
+ +
+Fixpoint fresh_vars_s (l : list x) (s0 : s): Prop :=
+  match l with
+  | nil => True
+  | (y::ys) => ~ Map.In y s0 /\ fresh_vars_s ys s0
+  end.
+ +
+Definition fresh_vars (l : list x) (e0: e) (s0: s) : Prop :=
+  fresh_vars_s l s0 /\ fresh_vars_e l e0.
+ +
+Definition well_formed (e0: e) (s0: s) (l:list x) : Prop := fresh_vars l e0 s0 /\ NoDup l.
+ +
+
+ +
+definitions +
+
+ +
+(* defns expression_well_typing *)
+Inductive typ_e : G -> e -> T -> Prop := (* defn e *)
+ | typ_bool : forall (G5:G) (b5:b),
+     typ_e G5 (e_t (t_b b5)) T_bool
+ | typ_int : forall (G5:G) (z5:z),
+     typ_e G5 (e_t (t_int z5)) T_int
+ | typ_var : forall (G5:G) (x5:x) (T5:T),
+      (Map.find x5 G5 = Some (ctxv_T T5 )) ->
+     typ_e G5 (e_var x5) T5
+ | typ_func_expr : forall (e_T_list:list (e*T)) (G5:G) (fn5:fn) (T_5:T),
+     (forall e_ T_, In (e_,T_) (map (fun (pat_: (e*T)) => match pat_ with (e_,T_) => (e_,T_) end) e_T_list) -> (typ_e G5 e_ T_)) ->
+      (Map.find fn5 G5 = Some (ctxv_sig (sig_sig (map (fun (pat_:(e*T)) => match pat_ with (e_,T_) => T_ end ) e_T_list) T_5) )) ->
+     typ_e G5 (e_fn_call fn5 (map (fun (pat_:(e*T)) => match pat_ with (e_,T_) => e_ end ) e_T_list)) T_5.
+
+ +
+definitions +
+
+ +
+(* defns function_well_typing *)
+Inductive typ_F : G -> F -> Prop := (* defn F *)
+ | typ_func_decl : forall (T_x_list:list (T*x)) (G5:G) (T_5:T) (fn5:fn) (e5:e),
+      (Map.find fn5 G5 = Some (ctxv_sig (sig_sig (map (fun (pat_:(T*x)) => match pat_ with (T_,x_) => T_ end ) T_x_list) T_5) )) ->
+     typ_e (fold_right (fun (ax : x * T) (G5 : G) => Map.add (fst ax) (ctxv_T (snd ax)) G5) G5 (map (fun (pat_:(T*x)) => match pat_ with (T_,x_) => (x_,T_) end ) T_x_list) ) e5 T_5 ->
+      (NoDup (map (fun (pat_:(T*x)) => match pat_ with (T_,x_) => x_ end ) T_x_list) ) ->
+     typ_F G5 (F_fn T_5 fn5 T_x_list e5).
+
+ +
+definitions +
+
+ +
+(* defns evaluation_reduction *)
+Inductive red_e : list F -> s -> e -> s -> e -> Prop := (* defn e *)
+ | red_var : forall (F_list:list F) (s5:s) (x5:x) (t5:t),
+      (Map.find x5 s5 = Some ( t5 )) ->
+     red_e F_list s5 (e_var x5) s5 (e_t t5)
+ | red_fun_exp : forall (e'_list e_list:list e) (F_list:list F) (s5:s) (fn5:fn) (e_5:e) (s':s) (e':e),
+     red_e F_list s5 e_5 s' e' ->
+     red_e F_list s5 (e_fn_call fn5 ((app e_list (app (cons e_5 nil) (app e'_list nil))))) s' (e_fn_call fn5 ((app e_list (app (cons e' nil) (app e'_list nil)))))
+ | red_fun_ground : forall (T_x_t_y_list:list (T*x*t*x)) (F'_list F_list:list F) (T_5:T) (fn5:fn) (e5:e) (s5:s),
+      (well_formed e5 s5 (map (fun (pat_:(T*x*t*x)) => match pat_ with (T_,x_,t_,y_) => y_ end ) T_x_t_y_list) ) ->
+      (disjoint (map (fun (pat_:(T*x*t*x)) => match pat_ with (T_,x_,t_,y_) => y_ end ) T_x_t_y_list) (map (fun (pat_:(T*x*t*x)) => match pat_ with (T_,x_,t_,y_) => x_ end ) T_x_t_y_list) ) ->
+     red_e ((app F_list (app (cons (F_fn T_5 fn5 (map (fun (pat_:(T*x*t*x)) => match pat_ with (T_,x_,t_,y_) => (T_,x_) end ) T_x_t_y_list) e5) nil) (app F'_list nil)))) s5 (e_fn_call fn5 (map (fun (pat_:(T*x*t*x)) => match pat_ with (T_,x_,t_,y_) => (e_t t_) end ) T_x_t_y_list)) (fold_right (fun (xt : x * t) (s5 : s) => Map.add (fst xt) (snd xt) s5) s5 (map (fun (pat_:(T*x*t*x)) => match pat_ with (T_,x_,t_,y_) => (y_,t_) end ) T_x_t_y_list) ) (e_var_subst e5 (map (fun (pat_:(T*x*t*x)) => match pat_ with (T_,x_,t_,y_) => (x_,y_) end ) T_x_t_y_list) ) .
+ +
+
+
+ +
+ + + diff --git a/docs/coqdoc/ABS.abs_examples.html b/docs/coqdoc/ABS.abs_examples.html new file mode 100644 index 0000000..9a433f3 --- /dev/null +++ b/docs/coqdoc/ABS.abs_examples.html @@ -0,0 +1,89 @@ + + + + + + + + + + + + + +
+
+
+From ABS Require Import abs_defs.
+From stdpp Require Import prelude base.
+ +
+
+ +
+

ABS Examples

+ +
+
+ +
+Definition e_const_5 : e :=
+  e_t (t_int 5%Z).
+ +
+Definition func_const_5 : F :=
+  F_fn T_int "const_5"%string [] e_const_5.
+ +
+Definition e_call_const_5 : e :=
+  e_fn_call "const_5"%string [].
+ +
+Definition Ctx : G :=
+  Map.add ("const_5"%string) (ctxv_sig (sig_sig [] T_int)) (Map.empty ctxv).
+ +
+Lemma e_const_5_T_int :
typ_e Ctx e_const_5 T_int.
+Proof. by apply typ_int. Qed.
+ +
+Lemma e_call_const_typ_F :
typ_F Ctx func_const_5.
+Proof.
+  apply typ_func_decl.
+  - easy.
+  - apply e_const_5_T_int.
+  - simpl; constructor.
+Qed.
+ +
+Lemma e_call_const_5_T_int :
typ_e Ctx e_call_const_5 T_int.
+Proof.
+  unfold e_call_const_5.
+  replace [] with (map (fun (pat_:(e*T)) => match pat_ with (e_,T_) => e_ end ) [])
+    by auto.
+  by apply typ_func_expr.
+Qed.
+
+
+ +
+ + + diff --git a/docs/coqdoc/ABS.abs_functional_metatheory.html b/docs/coqdoc/ABS.abs_functional_metatheory.html new file mode 100644 index 0000000..5d94fff --- /dev/null +++ b/docs/coqdoc/ABS.abs_functional_metatheory.html @@ -0,0 +1,825 @@ + + + + + + + + + + + + + +
+
+
+From ABS Require Import abs_defs
+  utils.
+ +
+From Coq Require Import List
+  FSets.FMapFacts
+  Lia.
+ +
+From Equations Require Import Equations.
+ +
+Require Import FMapList.
+Module MapFacts := FSets.FMapFacts.Facts Map.
+Import ListNotations.
+ +
+
+ +
+

ABS Functional Metatheory

+ +
+
+ +
+Section FunctionalMetatheory.
+ +
+Hypothesis (vars_fs_distinct: forall (x_:x) (fn_:fn), x_ <> fn_).
+Hypothesis (vars_well_typed: forall (x_:x) (G0: G) T0,
+             Map.find x_ G0 = Some T0 ->
+             exists T_, T0 = ctxv_T T_).
+ +
+Definition subG (G1 G2 : G) : Prop :=
+  forall (key : string) (elt : ctxv),
+    Map.find key G1 = Some elt ->
+    Map.find key G2 = Some elt.
+ +
+Notation "G ⊢ e : T" := (typ_e G e T) (at level 5).
+Notation "G F⊢ F" := (typ_F G F) (at level 5).
+Notation "G1 ⊆ G2" := (subG G1 G2) (at level 5).
+ +
+Lemma subG_refl: forall G0,
+  subG G0 G0.
+Proof. easy. Qed.
+ +
+Lemma subG_add: forall G0 G1 y T_,
+  subG G0 G1 ->
+  ~ Map.In y G0 ->
+  subG G0 (Map.add y T_ G1).
+Proof.
+  intros.
+  intros ?x_ ?T_ ?.
+ +
+  destruct (eq_x y x_); subst.
+  - exfalso.
+    apply H0.
+    apply MapFacts.in_find_iff.
+    intro.
+    rewrite H1 in H2.
+    discriminate.
+  - apply Map.find_1.
+    apply MapFacts.add_neq_mapsto_iff; auto.
+    pose proof H x_ T_0 H1.
+    apply Map.find_2.
+    assumption.
+Qed.
+ +
+Lemma subG_add_2: forall G0 G1 y T_,
+  subG G0 G1 ->
+  Map.find y G0 = Some T_ ->
+  subG G0 (Map.add y T_ G1).
+Proof.
+  intros.
+  intros ?x_ ?T_ ?.
+ +
+  destruct (eq_x y x_); subst.
+  - rewrite H0 in H1.
+    inv H1.
+    apply Map.find_1.
+    now apply Map.add_1.
+  - apply Map.find_1.
+    apply MapFacts.add_neq_mapsto_iff; auto.
+    pose proof H x_ T_0 H1.
+    apply Map.find_2.
+    assumption.
+Qed.
+ +
+(* this is stricter than the ABS paper *)
+(* we require that any variables in the typing context also exist in the state *)
+Definition G_vdash_s (G5 : G) (s5 : s) :=
forall (x5 : x) (T5 : T),
+  Map.find x5 G5 = Some (ctxv_T T5) ->
+  exists t5,
+  Map.find x5 s5 = Some t5 /\ typ_e G5 (e_t t5) T5.
+ +
+Notation "G1 G⊢ s1" := (G_vdash_s G1 s1) (at level 5).
+ +
+Lemma fresh_subG: forall G0 s0 (sub_list: list (T*x*t*x)),
+  G_vdash_s G0 s0 ->
+  fresh_vars_s (map (fun '(_,_,_,y)=>y) sub_list) s0 ->
+  NoDup (map (fun '(_,_,_,y)=>y) sub_list) ->
+  subG G0 (fold_right (fun '(T_,_,_,y_) G0 => Map.add y_ (ctxv_T T_) G0) G0 sub_list).
+Proof.
+  intros.
+  induction sub_list.
+  - easy.
+  - destruct a as (((?T_, ?x_), ?t_), y).
+    inv H1.
+    inv H0.
+    pose proof IHsub_list H2 H5.
+    cbn.
+    apply subG_add; auto.
+    intro.
+ +
+    apply MapFacts.in_find_iff in H3.
+    apply MapFacts.not_find_in_iff in H1.
+    pose proof map_neq_none_is_some _ _ H3 as (?T_, ?).
+    pose proof vars_well_typed _ _ _ H6 as (?T_, ->).
+    pose proof H _ _ H6 as (?t_, (?, _)).
+    rewrite H1 in H7.
+    discriminate.
+Qed.
+ +
+Lemma fresh_consistent: forall G0 s0 (sub_list: list (T*x*t*x)),
+  G_vdash_s G0 s0 ->
+  (forall T_ t_, In (T_, t_) (map (fun '(T_, _, t_, _) => (T_, t_)) sub_list) ->
+            typ_e G0 (e_t t_) T_) ->
+  fresh_vars_s (map (fun '(_,_,_,y)=>y) sub_list) s0 ->
+  NoDup (map (fun '(_,_,_,y)=>y) sub_list) ->
+  G_vdash_s (fold_right (fun '(T_,_,_,y_) G0 => Map.add y_ (ctxv_T T_) G0) G0 sub_list)
+    (fold_right (fun '(_,_,t_,y_) s0 => Map.add y_ t_ s0) s0 sub_list).
+Proof.
+  intros.
+  induction sub_list.
+  * easy.
+  * destruct a as (((?T_, ?x_), ?t_), y).
+    inv H1.
+    inv H2.
+ +
+    cbn.
+    intros ?y ?T_ ?.
+    destruct (eq_x y y0); subst.
+  - exists t_.
+    split...
+    + apply Map.find_1.
+      now apply Map.add_1.
+    + assert (T_ = T_0).
+      {
+        apply Map.find_2 in H1.
+        apply MapFacts.add_mapsto_iff in H1.
+        destruct H1 as [(_, ?) | (?, ?)].
+        + now inv H1.
+        + exfalso.
+          now apply H1.
+      }
+      assert (In (T_0, t_) (map (fun '(T_, _, t_, _) => (T_, t_)) ((T_, x_, t_, y0) :: sub_list)))
+        by (left; now rewrite H2).
+      specialize (H0 _ _ H5).
+      inv H0; constructor.
+  - apply Map.find_2 in H1.
+    apply Map.add_3 in H1; auto.
+    apply Map.find_1 in H1.
+    assert (forall (T_ : T) (t_ : t),
+             In (T_, t_) (map (fun '(T_0, _, t_0, _) => (T_0, t_0)) sub_list) ->
+             typ_e G0 (e_t t_) T_).
+    {
+      intros.
+      apply H0.
+      right.
+      assumption.
+    }
+    pose proof IHsub_list H2 H4 H7 _ _ H1 as (?t_, (?, ?)).
+    exists t_0.
+    split...
+    + apply Map.find_1.
+      apply Map.add_2; auto.
+      apply Map.find_2; assumption.
+    + inv H8; constructor.
+Qed.
+ +
+Lemma subG_consistent: forall G1 G2 s0,
+  subG G1 G2 -> G_vdash_s G2 s0 -> G_vdash_s G1 s0.
+Proof.
+  intros.
+  intros x_ t_ ?.
+ +
+  pose proof H _ _ H1.
+  pose proof H0 _ _ H2 as (?t, (?, ?)).
+  exists t.
+  split; auto.
+  inv H4;constructor.
+Qed.
+ +
+Lemma subG_type: forall G1 G2 e0 T0,
+  subG G1 G2 -> typ_e G1 e0 T0 -> typ_e G2 e0 T0.
+Proof.
+  intros.
+  induction H0.
+  - constructor.
+  - constructor.
+  - apply H in H0.
+    constructor.
+    apply H0.
+  - constructor.
+    + intros.
+      apply H1; auto.
+    + apply H in H2.
+      apply H2.
+Qed.
+ +
+(* this is 9.3.8 from Types and Programming Languages *)
+(* it has not yet proven useful *)
+Lemma subst_lemma_one_alt: forall (x0 x1:x) G0 e0 T0 T1,
+  typ_e (Map.add x0 (ctxv_T T1) G0) e0 T0 ->
+  typ_e G0 (e_var x1) T1 ->
+  typ_e G0 (e_var_subst_one e0 x0 x1) T0.
+Proof.
+  intros.
+  generalize dependent T0.
+  generalize dependent T1.
+  generalize dependent G0.
+  eapply e_ott_ind with
+      (n:=e0)
+      (P_list_e:= fun e_list => forall e0,
+                    In e0 e_list ->
+                    forall G0 T0 T1,
+                    typ_e (Map.add x0 (ctxv_T T1) G0) e0 T0 ->
+                    typ_e G0 (e_var x1) T1 ->
+                    typ_e G0 (e_var_subst e0 [(x0, x1)]) T0)
+  ;cbn; intros.
+  - inv H; simp e_var_subst_one; constructor.
+  - inv H.
+    simp e_var_subst_one.
+    destruct (eq_x x5 x0); subst.
+    + apply Map.find_2 in H3.
+      apply MapFacts.add_mapsto_iff in H3.
+      destruct H3 as [(?&?) | (?&?)]; subst.
+      * inv H1.
+        assumption.
+      * contradiction.
+    + constructor.
+      apply Map.find_1.
+      eapply Map.add_3.
+      * apply not_eq_sym.
+        apply n.
+      * apply Map.find_2 in H3.
+        apply H3.
+  - inv H1.
+    simp e_var_subst_one.
+    rewrite <- subst_fst_commute.
+    replace (map (fun x : e * T => let (e_, _) := let '(e_, T_) := x in (e_var_subst_one e_ x0 x1, T_) in e_) e_T_list)
+      with
+        (map (fun pat_ : e * T => let (e_, _) := pat_ in e_)
+           (map (fun '(e_, T_) => (e_var_subst_one e_ x0 x1, T_)) e_T_list))
+    by apply map_map.
+    constructor.
+    + rewrite map_map.
+      intros.
+      apply in_map_iff in H1.
+      destruct H1 as ((?e_&?T_) & ? & ?).
+      inv H1.
+      eapply H.
+      * apply in_map_iff.
+        exists (e_0, T_).
+        split; eauto.
+      * apply H5.
+        apply in_map_iff.
+        exists (e_0, T_).
+        split; auto.
+      * apply H0.
+    + apply Map.find_1.
+      apply Map.find_2 in H7.
+      rewrite subst_snd_commutes.
+      eapply Map.add_3; eauto.
+  - inv H.
+  - inv H1.
+    + eapply H; eauto.
+    + eapply H0; eauto.
+Qed.
+ +
+Lemma same_type_sub: forall (sub_list: list (x*x)) G0 e0 T0,
+    typ_e G0 e0 T0 ->
+    (forall x0 y0 T0,
+      In (x0, y0) sub_list ->
+      Map.find x0 G0 = Some T0 ->
+      Map.find y0 G0 = Some T0) ->
+    typ_e G0 (e_var_subst e0 sub_list) T0.
+Proof.
+  {
+  intros.
+  generalize dependent T0.
+  eapply e_ott_ind with
+      (n:= e0)
+      (P_list_e:= fun e_list => forall e0 T0,
+                    In e0 e_list ->
+                    typ_e G0 e0 T0 ->
+                    typ_e G0 (e_var_subst e0 sub_list) T0)
+  ; intros.
+  - rewrite subst_term.
+    simp e_var_subst_one.
+  - rewrite subst_var.
+    constructor.
+    induction sub_list.
+    + inv H.
+      now simpl.
+    + destruct a.
+      simpl.
+      destruct (eq_x (replace_var x5 sub_list) x); subst.
+      * eapply H0; eauto.
+        -- now left.
+        -- apply IHsub_list; eauto.
+           intros.
+           eapply H0; eauto.
+           now right.
+      * eapply IHsub_list; eauto.
+        intros.
+        eapply H0; eauto.
+        now right.
+  - inv H1.
+    rewrite subst_fn.
+    rewrite map_map.
+    replace (map (fun x : e * T => e_var_subst (let (e_, _) := x in e_) sub_list) e_T_list)
+      with (map (fun pat_:e*T => let (e, _) := pat_ in e) (map (fun '(e, T) => (e_var_subst e sub_list, T)) e_T_list))
+      by (rewrite map_map; apply map_ext; now intros (?, ?)).
+    constructor.
+    + intros.
+      apply in_map_iff in H1.
+      destruct H1 as ((?e, ?T), (?, ?)).
+      inv H1.
+      apply in_map_iff in H2.
+      destruct H2 as ((?e_, ?T_), (?, ?)).
+      inv H1.
+      apply H.
+      * apply in_map_iff.
+        exists (e_0, T_).
+        split; eauto.
+      * apply H5.
+        apply in_map_iff.
+        exists (e_0, T_).
+        split; eauto.
+    + now replace (map (fun pat_ : e * T => let (_, T_) := pat_ in T_) (map (fun '(e, T) => (e_var_subst e sub_list, T)) e_T_list))
+        with(map (fun pat_ : e * T => let (_, T_) := pat_ in T_) e_T_list)
+      by (rewrite map_map; apply map_ext; now intros (?, ?)).
+  - inv H.
+  - inv H2.
+    + now apply H.
+    + now apply H1.
+  }
+
+Qed.
+ +
+Lemma subst_lemma_one: forall G0 x0 y0 e0 Ai A,
+  typ_e (Map.add x0 Ai G0) e0 A ->
+  fresh_vars_e [y0] e0 ->
+  typ_e (Map.add y0 Ai G0) (e_var_subst_one e0 x0 y0) A.
+Proof.
+  {
+    intros.
+    generalize dependent A.
+    revert H0.
+    apply e_ott_ind with
+        (n:=e0)
+        (P_list_e:= fun e_list =>
+                      forall e0 A,
+                      In e0 e_list ->
+                      fresh_vars_e [y0] e0 ->
+                      typ_e (Map.add x0 Ai G0) e0 A ->
+                      typ_e (Map.add y0 Ai G0) (e_var_subst_one e0 x0 y0) A);
+      intros.
+    - simp e_var_subst_one.
+      inv H; constructor.
+    - simp e_var_subst_one.
+      inv H.
+      apply Map.find_2 in H3.
+      apply MapFacts.add_mapsto_iff in H3.
+      destruct H3 as [(?,?)|(?,?)]; subst.
+      + destruct (eq_x x5 x5); subst.
+        * constructor.
+          apply Map.find_1.
+          now apply Map.add_1.
+        * contradiction.
+ +
+      + destruct (eq_x x5 x0); subst.
+        * contradiction.
+        * destruct (eq_x x5 y0); subst.
+          -- simp fresh_vars_e in H0.
+             exfalso.
+             apply H0.
+             now left.
+          -- constructor.
+             apply Map.find_1.
+             apply Map.add_2; eauto.
+    - simp e_var_subst_one.
+      inv H1.
+      replace (e_list_subst_one (map (fun pat_ : e * T => let (e_, _) := pat_ in e_) e_T_list) x0 y0)
+        with (map (fun pat_:e*T => let (e, _) := pat_ in e) (map (fun '(e, T) => (e_var_subst_one e x0 y0, T)) e_T_list))
+        by (rewrite e_list_subst_map;
+            rewrite 2 map_map;
+            apply map_ext;
+            now intros (?,?)).
+      constructor.
+      + intros.
+        apply in_map_iff in H1.
+        destruct H1 as ((?e, ?T), (?, ?)).
+        inv H1.
+        apply in_map_iff in H2.
+        destruct H2 as ((?e_, ?T_), (?, ?)).
+        inv H1.
+        apply H.
+        * apply in_map_iff.
+          exists (e_0, T_).
+          split; eauto.
+        * simp fresh_vars_e in H0.
+          eapply e_list_fresh.
+          apply H0.
+          apply in_map_iff.
+          eexists (e_0, T_).
+          split; auto.
+        * apply H5.
+          apply in_map_iff.
+          exists (e_0, T_).
+          split; eauto.
+      + replace (map (fun pat_ : e * T => let (_, T_) := pat_ in T_) (map (fun '(e, T) => (e_var_subst_one e x0 y0, T)) e_T_list))
+          with(map (fun pat_ : e * T => let (_, T_) := pat_ in T_) e_T_list)
+          by (rewrite map_map; apply map_ext; now intros (?, ?)).
+ +
+        apply Map.find_2 in H7.
+        apply MapFacts.add_mapsto_iff in H7.
+        destruct H7 as [(?,?)|(?,?)].
+        * exfalso.
+          apply (vars_fs_distinct _ _ H1).
+        * apply Map.find_1.
+          apply Map.add_2; eauto.
+    - inv H.
+    - destruct H1; subst.
+      + apply H; eauto.
+      + apply H0; eauto.
+  }
+Qed.
+ +
+Lemma typ_e_G_Equal_equiv_imp :
forall G1 G2 e T, Map.Equal G1 G2 -> typ_e G1 e T -> typ_e G2 e T.
+Proof.
+intros G1 G2 e0 T0 Heq.
+intros Ht.
+induction Ht.
+- apply typ_bool.
+- apply typ_int.
+- apply typ_var.
+  symmetry in Heq.
+  rewrite <- H.
+  apply Heq.
+- apply typ_func_expr.
+  * intros.
+    apply H0; auto.
+  * rewrite <- H1.
+    symmetry in Heq.
+    apply Heq.
+Qed.
+ +
+Lemma typ_e_G_Equal_equiv :
forall G1 G2 e T, Map.Equal G1 G2 -> (typ_e G1 e T <-> typ_e G2 e T).
+Proof.
+intros G1 G2 e0 T0 Heq; split; apply typ_e_G_Equal_equiv_imp; auto.
+symmetry; assumption.
+Qed.
+ +
+Lemma fold_map4 {A X Y Z W: Type}: forall (f : _ -> _ -> A -> A) (l: list (X*Y*Z*W)) a0,
+    fold_right (fun '(z, w, _, _) a => f z w a) a0 l =
+      fold_right (fun '(z, w) a => f z w a) a0
+        (map (fun '(z, w, _, _) => (z, w)) l).
+Proof.
+  induction l; intros; eauto.
+  destruct a as [[[? ?] ?] ?].
+  simpl.
+  now rewrite IHl.
+Qed.
+ +
+Lemma fold_map5 {A X Y Z W: Type}: forall (f : _ -> _ -> A -> A) (l: list (X*Y*Z*W)) a0,
+    fold_right (fun '(z, _, _, w) a => f z w a) a0 l =
+      fold_right (fun '(z, w) a => f z w a) a0
+        (map (fun '(z, _, _, w) => (z, w)) l).
+Proof.
+  induction l; intros; eauto.
+  destruct a as [[[? ?] ?] ?].
+  simpl.
+  now rewrite IHl.
+Qed.
+ +
+Lemma subst_lemma: forall (T_x_t_y_list:list (T*x*t*x)) G0 e0 A,
+  typ_e (fold_right (fun '(Ai, x_, _, _) (G0 : G) => Map.add x_ (ctxv_T Ai) G0) G0 T_x_t_y_list) e0 A ->
+  NoDup (map (fun '(_, _, _, y) => y) T_x_t_y_list) ->
+  NoDup (map (fun '(_, x, _, _) => x) T_x_t_y_list) ->
+  fresh_vars_e (map (fun '(_, _, _, y) => y) T_x_t_y_list) e0 ->
+  disjoint (map (fun '(_, _, _, y) => y) T_x_t_y_list) (map (fun '(_, x, _, _) => x) T_x_t_y_list) ->
+  typ_e (fold_right (fun '(Ai, _, _, y) (G0 : G) => Map.add y (ctxv_T Ai) G0) G0 T_x_t_y_list)
+    (e_var_subst e0 (map (fun '(_, x_, _, y_) => (x_, y_)) T_x_t_y_list)) A.
+Proof.
+  intros.
+  generalize dependent G0.
+  generalize dependent e0.
+  induction T_x_t_y_list; intros.
+  - easy.
+  - destruct a as (((?T_,?x_),?t_),?y).
+    unfold e_var_subst.
+    simpl in *.
+    inv H0.
+    inv H1.
+    pose proof fresh_first_e _ _ _ H2.
+    pose proof fresh_monotone_e _ _ _ H2.
+    epose proof disjoint_monotone _ _ _ _ H3.
+    assert (~ In x_ (map (fun '(_, y) => y) (map (fun '(Ai, _, _, y1) => (Ai, y1)) T_x_t_y_list))).
+    { intro.
+      apply (H3 x_).
+      - right.
+        rewrite map_map in H9.
+        replace (map (fun '(_, _, _, y1) => y1) T_x_t_y_list)
+          with
+            (map (fun x0 : T * x * t * x => let '(_, y) := let '(Ai, _, _, y1) := x0 in (Ai, y1) in y) T_x_t_y_list).
+        apply H9.
+        apply map_eq.
+        now intros (((?, ?), ?), ?).
+      - now left.
+    }
+    assert (~ In x_ (map (fun '(_, y) => y) (map (fun '(Ai, x1, _, _) => (Ai, x1)) T_x_t_y_list))) as Hinx.
+    {
+      intro.
+      apply H5.
+      rewrite map_map in H10.
+      revert H10.
+      clear.
+      induction T_x_t_y_list; auto.
+      simpl.
+      intros Hx.
+      destruct Hx.
+      - destruct a, p, p.
+        subst.
+        left; reflexivity.
+      - right.
+        apply IHT_x_t_y_list.
+        assumption.
+    }
+    assert (Map.Equal
+     (Map.add x_ (ctxv_T T_) (fold_right (fun '(Ai, x_0, _, _) (G0 : G) => Map.add x_0 (ctxv_T Ai) G0) G0 T_x_t_y_list))
+     (fold_right (fun '(Ai, x_, _, _) (G0 : G) => Map.add x_ (ctxv_T Ai) G0) (Map.add x_ (ctxv_T T_) G0) T_x_t_y_list))
+      as HMEqualx.
+    {
+      epose proof fold_add_comm G0 x_ T_ (map (fun '(Ai, x1, _, _) => (Ai, x1)) T_x_t_y_list) Hinx.
+      rewrite 2 fold_map4.
+      assumption.
+    }
+    assert (Map.Equal
+     (fold_right (fun '(Ai, _, _, y) (G0 : G) => Map.add y (ctxv_T Ai) G0) (Map.add x_ (ctxv_T T_) G0) T_x_t_y_list)
+     (Map.add x_ (ctxv_T T_) (fold_right (fun '(Ai, _, _, y) (G0 : G) => Map.add y (ctxv_T Ai) G0) G0 T_x_t_y_list)))
+      as HMEqualy.
+    {
+      epose proof fold_add_comm G0 x_ T_ (map (fun '(Ai, _, _, y1) => (Ai, y1)) T_x_t_y_list) H9.
+      rewrite fold_map5.
+      set (fd := fold_right _ _ _).
+      rewrite fold_map5.
+      unfold fd; clear fd.
+      symmetry.
+      assumption.
+    }
+    apply (typ_e_G_Equal_equiv _ _ _ _ HMEqualx) in H.
+    pose proof IHT_x_t_y_list H7 H8 H4 _ H1 _ H as IH.
+    apply (typ_e_G_Equal_equiv _ _ _ _ HMEqualy) in IH.
+    assert (fresh_vars_e [y] (e_var_subst e0 (map (fun '(_, x_, _, y_) => (x_, y_)) T_x_t_y_list))).
+    {
+      assert (map snd (map (fun '(_, x_0, _, y_) => (x_0, y_)) T_x_t_y_list) = map (fun '(_, _, _, y) => y) T_x_t_y_list).
+      {
+        rewrite map_map.
+        apply map_eq.
+        now intros (((?, ?), ?), ?).
+      }
+      apply fresh_var_subst; try rewrite H10; auto.
+    }
+    now apply (subst_lemma_one _ _ _ _ _ _ IH H10).
+Qed.
+ +
+Lemma type_preservation : forall (Flist : list F) (G5 : G) (s5 : s),
+  G_vdash_s G5 s5 ->
+  Forall (typ_F G5) Flist ->
+  forall (e5 : e) (T5 : T) (s' : s) (e' : e),
+    typ_e G5 e5 T5 ->
+    red_e Flist s5 e5 s' e' ->
+    exists G', subG G5 G' /\ G_vdash_s G' s' /\ typ_e G' e' T5.
+Proof.
+  intros Fs G5 s0 s_well_typed F_well_typed.
+  intros e0 T0 s' e' e0_type reduction.
+  generalize dependent T0.
+  generalize dependent G5.
+  induction reduction.
+  - intros.
+    exists G5; splits.
+    1,2: easy.
+    inv e0_type.
+    destruct (s_well_typed x5 T0 H2) as (?, (?, ?)).
+    rewrite H in H0.
+    inv H0.
+    assumption.
+ +
+  - (* RED_FUN_EXPR *)
+    intros.
+    inv e0_type.
+    rewrite app_nil_r in H0.
+    pose proof split_corresponding_list e_T_list e_list e_5 e'_list H0
+      as (T_list & T_5 & T'_list & ? & ? & ?).
+    assert (In (e_5, T_5) (map (fun pat_ : e * T => let (e_0, T_0) := pat_ in (e_0, T_0)) e_T_list)). {
+      rewrite H3.
+      apply in_map_iff.
+      exists (e_5, T_5).
+      split; auto.
+      apply in_combine_split with (2:=eq_refl); auto.
+    }
+    pose proof H2 e_5 T_5 H5.
+    destruct (IHreduction G5 s_well_typed F_well_typed _ H6) as (G' & G'extends & G'consistent & ?).
+    exists G'.
+    splits.
+    1,2: easy.
+    replace (e_list ++ [e'] ++ e'_list ++ []) with
+        (map (fun (pat_:(e*T)) => match pat_ with (e_,T_) => e_ end )
+           (combine (e_list ++ [e'] ++ e'_list ++[]) (map (fun pat_ : e * T => let (_, T_) := pat_ in T_) e_T_list))).
+    apply typ_func_expr.
+      * intros.
+        rewrite pat2_id in H8.
+        rewrite H3 in H8.
+        rewrite combine_snd in H8.
+        rewrite combine_app in H8...
+        apply in_app_iff in H8.
+        destruct H8.
+        -- apply subG_type with (G1:=G5); auto.
+           apply H2.
+           apply in_map_iff.
+           exists (e_, T_).
+           split; auto.
+           rewrite H3.
+           rewrite combine_app; auto.
+           {
+             eapply in_app_iff.
+             now left.
+           }
+           rewrite 2 app_length.
+           simpl.
+           rewrite H1.
+           reflexivity.
+        -- rewrite combine_app in H8; auto.
+           apply in_app_iff in H8.
+           destruct H8.
+           ++ inv H8;[|contradiction].
+              inv H9.
+              apply H7.
+           ++ apply subG_type with (G1:=G5); auto.
+              apply H2.
+              apply in_map_iff.
+              exists (e_, T_).
+              split; auto.
+              rewrite H3.
+              rewrite combine_app; auto.
+              {
+                eapply in_app_iff.
+                right.
+                right.
+                rewrite app_nil_r in H8.
+                apply H8.
+              }
+           rewrite 2 app_length.
+           simpl.
+           rewrite H1.
+           reflexivity.
+           ++ rewrite app_nil_r.
+              apply H1.
+        -- auto.
+        -- rewrite app_nil_r.
+           simpl.
+           rewrite H1.
+           reflexivity.
+        -- rewrite 4 app_length.
+           simpl.
+           lia.
+      * rewrite combine_snd.
+        ++ apply G'extends.
+           apply H4.
+        ++ rewrite map_length.
+           rewrite H3.
+           rewrite 2 combine_app; auto.
+           ** repeat (rewrite app_length).
+              rewrite 3 combine_length.
+              simpl.
+              rewrite H, H1.
+              lia.
+           ** rewrite 2 app_length.
+              simpl.
+              rewrite H1.
+              reflexivity.
+      * rewrite app_nil_r.
+        rewrite combine_fst; auto.
+        rewrite map_length.
+        rewrite H3.
+        rewrite combine_length.
+        repeat (rewrite app_length).
+        rewrite H, H1.
+        simpl.
+        lia.
+ +
+  - (* RED_FUN_GROUND *)
+    intros.
+    set (fn_def:=(F_fn T_5 fn5 (map (fun '(T_, x_, _, _) => (T_, x_)) T_x_t_y_list) e5)).
+    pose proof utils.in_split F_list F'_list fn_def .
+    rewrite app_nil_r in *.
+    pose proof Forall_forall (typ_F G5) (F_list ++ [fn_def] ++ F'_list) as (? & _).
+    pose proof H2 F_well_typed fn_def H1 as fn_typed.
+    inv fn_typed.
+    inv e0_type.
+    destruct H as ((?, ?), ?).
+    assert (e_T_list = map (fun '(T_, _, t_, _) => (e_t t_, T_)) T_x_t_y_list).
+    {
+      (* inv H11. *)
+      eapply map_split'.
+      - replace (map fst e_T_list) with (map (fun pat_ : e * T => let (e_, _) := pat_ in e_) e_T_list) by easy.
+        rewrite H4.
+        apply map_ext.
+        easy.
+      - replace (map snd e_T_list) with (map (fun pat_ : e * T => let (_, T_) := pat_ in T_) e_T_list) by easy.
+        rewrite H7 in H11.
+        inv H11.
+        rewrite map_map.
+        apply map_ext.
+        intros.
+        now destruct a as (((?, ?), ?), ?).
+    }
+    exists (fold_right (fun '(T_, _, _, y) G0 => Map.add y (ctxv_T T_) G0) G5 T_x_t_y_list).
+    splits.
+    + eapply fresh_subG; eauto.
+    + rewrite <- fold_map.
+      apply fresh_consistent; eauto.
+      intros.
+      apply in_map_iff in H12.
+      destruct H12 as (Txty, (?, ?)).
+      apply H6.
+      inv H12.
+      rewrite map_map.
+      apply in_map_iff.
+      exists Txty.
+      split; auto.
+      destruct Txty as (((?, ?), ?), ?).
+      now inv H15.
+ +
+    + rewrite H7 in H11.
+      inv H11.
+      apply subst_lemma; auto.
+      * rewrite <- fold_map_reshuffle; eauto.
+      * rewrite map_xs in H10.
+        apply H10.
+Qed.
+End FunctionalMetatheory.
+
+
+ +
+ + + diff --git a/docs/coqdoc/ABS.utils.html b/docs/coqdoc/ABS.utils.html new file mode 100644 index 0000000..39bad59 --- /dev/null +++ b/docs/coqdoc/ABS.utils.html @@ -0,0 +1,775 @@ + + + + + + + + + + + + + +
+
+
+From Coq Require Import List
+  FSets.FMapFacts
+  Lia.
+ +
+Import ListNotations.
+ +
+Ltac splits := repeat split.
+Ltac inv H :=inversion H ; subst; clear H.
+Tactic Notation "intros*" := repeat intro.
+ +
+Ltac forward H :=
+  match type of H with
+  | ?x -> _ =>
+      let name := fresh in assert x as name; [| specialize (H name); clear name]
+  end.
+Tactic Notation "forward" ident(H) :=
+  forward H.
+ +
+Section ListLemmas.
+  Context {X Y: Type}.
+ +
+  Lemma map_eq: forall (l: list X) (f g: X -> Y),
+      (forall x, f x = g x) ->
+      map f l = map g l.
+  Proof.
+    induction l; intros; auto.
+    simpl.
+    rewrite (H a).
+    erewrite (IHl); eauto.
+  Qed.
+ +
+  Lemma map_split {Z W: Type}: forall (l: list (Z*X)) (l2: list (X*Y*Z*W)),
+      map fst l = map (fun '(_, _, z, _) => z) l2 ->
+      map snd l = map (fun '(x, _, _, _) => x) l2 ->
+      l = map (fun '(x, _, z,_) => (z, x)) l2.
+  Proof.
+    induction l; intros.
+    - inv H.
+      symmetry in H2.
+      apply map_eq_nil in H2.
+      now subst.
+    - destruct a.
+      destruct l2.
+      + inv H.
+      + destruct p as (((?, ?), ?), ?).
+        inv H.
+        inv H0.
+        rewrite (IHl l2); auto.
+  Qed.
+ +
+  Lemma map_xs {Z W: Type}: forall (T_x_t_y_list: list (X*Y*Z*W)),
+      map (fun pat_ : X * Y => let (_, x_) := pat_ in x_) (map (fun '(T_, x_, _, _) => (T_, x_)) T_x_t_y_list) =
+        map (fun '(_, x, _, _) => x) T_x_t_y_list.
+  Proof.
+    induction T_x_t_y_list.
+    - easy.
+    - destruct a as (((?, ?), ?), ?).
+      simpl.
+      now rewrite IHT_x_t_y_list.
+  Qed.
+ +
+  Lemma map_split' {Z Z' W: Type}: forall (l: list (Z'*X)) (l2: list (X*Y*Z*W)) (f: Z -> Z'),
+      map fst l = map (fun '(_, _, z, _) => f z) l2 ->
+      map snd l = map (fun '(x, _, _, _) => x) l2 ->
+      l = map (fun '(x, _, z,_) => (f z, x)) l2.
+  Proof.
+    induction l; intros.
+    - inv H.
+      symmetry in H2.
+      apply map_eq_nil in H2.
+      now subst.
+    - destruct a.
+      destruct l2.
+      + inv H.
+      + destruct p as (((?, ?), ?), ?).
+        inv H.
+        inv H0.
+        rewrite (IHl l2 f); auto.
+  Qed.
+ +
+  Lemma combine_fst: forall (l1: list X) (l2: list Y),
+      length l1 = length l2 ->
+      map (fun pat_: (X*Y) => let (e_, _) := pat_ in e_) (combine l1 l2) = l1.
+  Proof.
+    induction l1;intros.
+    - easy.
+    - destruct l2.
+      + inv H.
+      + inv H.
+        simpl.
+        rewrite (IHl1 l2 H1).
+        reflexivity.
+  Qed.
+ +
+  Lemma combine_nil: forall (l1: list X),
+      @combine X Y l1 [] = [].
+  Proof. destruct l1; easy. Qed.
+ +
+  Lemma combine_snd: forall (l1: list X) (l2: list Y),
+      length l1 = length l2 ->
+      map (fun pat_: (X*Y) => let (_, e_) := pat_ in e_) (combine l1 l2) = l2.
+  Proof.
+    intros.
+    generalize dependent l1.
+    induction l2; intros.
+    - rewrite combine_nil.
+      auto.
+    - destruct l1.
+      + inv H.
+      + inv H.
+        simpl.
+        rewrite (IHl2 l1 H1).
+        reflexivity.
+  Qed.
+ +
+  Lemma in_combine: forall (l1: list X) (l2: list Y) x y,
+      In (x,y) (combine l1 l2) -> In x l1 /\ In y l2.
+  Proof.
+    induction l1;intros.
+    - inv H.
+    - destruct l2.
+      + inv H.
+      + destruct H.
+        * inv H.
+          split; left; auto.
+        * destruct (IHl1 l2 x y H).
+          split; right; auto.
+  Qed.
+ +
+  Lemma combine_app: forall (l1 l2: list X) (l1' l2': list Y),
+      length l1 = length l1' ->
+      length l2 = length l2' ->
+      combine (l1 ++ l2) (l1' ++ l2') = combine l1 l1' ++ combine l2 l2'.
+  Proof.
+    induction l1; intros.
+    - inv H.
+      symmetry in H2.
+      apply length_zero_iff_nil in H2.
+      rewrite H2.
+      easy.
+    - destruct l1'.
+      + inv H.
+      + inv H.
+        simpl.
+        rewrite IHl1; easy.
+  Qed.
+ +
+  Lemma in_split: forall (l1 l2: list X) x,
+      In x (l1 ++ [x] ++ l2).
+  Proof.
+    induction l1; intros.
+    - left; auto.
+    - right.
+      apply IHl1.
+  Qed.
+ +
+  Lemma in_combine_split: forall (l: list (X*Y)) l1 l1' l2 l2' x y,
+      length l1 = length l2 ->
+      l = combine (l1 ++ [x] ++ l1') (l2 ++ [y] ++ l2') ->
+      In (x, y) l.
+  Proof.
+    induction l; intros; subst.
+    - destruct l1, l2; easy.
+    - destruct a.
+      destruct l1,l2.
+      + inv H0.
+        left;auto.
+      + inv H.
+      + inv H.
+      + inv H.
+        right.
+        inv H0.
+        eapply IHl.
+        apply H2.
+        reflexivity.
+  Qed.
+ +
+  Lemma in_fst_iff: forall (l : list (X*Y)) x,
+      (exists y, In (x, y) l) <-> In x (map (fun pat_ : X * Y => let (e_, _) := pat_ in e_) l).
+  Proof.
+    split; intros.
+    - induction l.
+      + destruct H.
+        inv H.
+      + destruct H as (?y & H).
+        inv H.
+        * left; auto.
+        * right.
+          apply IHl.
+          exists y; auto.
+    - induction l.
+      + inv H.
+      + destruct a as (?x & ?y).
+        inv H.
+        * exists y.
+          left;auto.
+        * destruct (IHl H0) as (?y & ?).
+          exists y0.
+          right.
+          apply H.
+  Qed.
+ +
+  Lemma pat2_id: forall l: list (X*Y),
+      map (fun pat_ : X*Y => let (x_, y_) := pat_ in (x_,y_)) l = l.
+  Proof.
+    induction l;auto.
+    destruct a; cbn.
+    rewrite IHl.
+    reflexivity.
+  Qed.
+ +
+  Lemma fold_map {A Z W: Type}: forall (f: W -> Z -> A -> A) (l: list (X*Y*Z*W)) a0,
+      fold_right (fun '(_, _, z, w) a => f w z a) a0 l =
+        fold_right (fun (xt : W * Z) a => f (fst xt) (snd xt) a) a0
+          (map (fun pat_ : X*Y*Z*W => let (p, y_) := pat_ in let (p0, t_) := p in let (_, _) := p0 in (y_, t_)) l).
+  Proof.
+    induction l; intros; eauto.
+    destruct a as [[[? ?] ?] ?].
+    simpl.
+    now rewrite IHl.
+  Qed.
+ +
+  Lemma fold_map1 {A Z W: Type}: forall (f: W -> X -> A -> A) (l: list (X*Y*Z*W)) a0,
+      fold_right (fun '(z, _, _, w) a => f w z a) a0 l =
+        fold_right (fun '(z, w) a => f z w a) a0
+          (map (fun '(z, _, _, w) => (w, z)) l).
+  Proof.
+    induction l; intros; eauto.
+    destruct a as [[[? ?] ?] ?].
+    simpl.
+    now rewrite IHl.
+  Qed.
+ +
+  Lemma fold_map2 {A Z W: Type}: forall (f: Y -> X -> A -> A) (l: list (X*Y*Z*W)) a0,
+      fold_right (fun '(z, w, _, _) a => f w z a) a0 l =
+        fold_right (fun '(z, w) a => f z w a) a0
+          (map (fun '(z, w, _, _) => (w, z)) l).
+  Proof.
+    induction l; intros; eauto.
+    destruct a as [[[? ?] ?] ?].
+    simpl.
+    now rewrite IHl.
+  Qed.
+ +
+  Lemma fold_map3 {A Z W: Type}: forall (f: W -> Y -> A -> A) (l: list (X*Y*Z*W)) a0,
+      fold_right (fun '(_, z, _, w) a => f w z a) a0 l =
+        fold_right (fun '(z, w) a => f z w a) a0
+          (map (fun '(_, z, _, w) => (w, z)) l).
+  Proof.
+    induction l; intros; eauto.
+    destruct a as [[[? ?] ?] ?].
+    simpl.
+    now rewrite IHl.
+  Qed.
+ +
+  Lemma combine_map: forall (l: list (X*Y)),
+      combine (map fst l) (map snd l) = l.
+  Proof.
+    induction l; auto.
+    destruct a; simpl.
+    rewrite IHl.
+    reflexivity.
+  Qed.
+ +
+  Lemma split_corresponding_list: forall (l: list (X*Y)) left_list mid right_list,
+      map (fun '(x, _) => x) l = left_list ++ [mid] ++ right_list ->
+      exists left_list' mid' right_list',
+        length left_list = length left_list'
+        /\ length right_list = length right_list'
+        /\ l = combine (left_list ++ [mid] ++ right_list) (left_list' ++ [mid'] ++ right_list').
+  Proof with auto.
+    induction l;intros.
+    - apply app_cons_not_nil in H.
+      contradiction.
+    - destruct a.
+      destruct left_list, right_list;
+        inv H.
+      + exists [], y, [].
+        apply map_eq_nil in H2.
+        rewrite H2.
+        splits...
+      + destruct (IHl [] x0 right_list H2)
+          as (left_list' & mid' & right_list' & ? & ? & ?).
+        exists [], y, (left_list' ++ [mid'] ++ right_list').
+        splits...
+        * inv H.
+          symmetry in H4.
+          apply length_zero_iff_nil in H4.
+          rewrite H4.
+          rewrite 2 app_nil_l.
+          rewrite map_length.
+          rewrite combine_length.
+          rewrite 2 app_length.
+          simpl.
+          rewrite H0.
+          lia.
+        * simpl.
+          rewrite H1.
+          rewrite combine_fst.
+          { easy. }
+          rewrite app_nil_l.
+          rewrite 3 app_length.
+          rewrite <- H.
+          rewrite H0.
+          easy.
+      + destruct (IHl left_list mid [] H2)
+          as (left_list' & mid' & right_list' & ? & ? & ?).
+        exists (y::left_list'), mid', right_list'.
+        splits...
+        * inv H0.
+          simpl.
+          rewrite H.
+          easy.
+        * rewrite H1.
+          easy.
+      + destruct (IHl left_list mid (x1::right_list) H2)
+          as (left_list' & mid' & right_list' & ? & ? & ?).
+        exists (y::left_list'), mid', (right_list').
+        splits...
+        * simpl.
+          rewrite H.
+          easy.
+        * rewrite H1.
+          easy.
+  Qed.
+ +
+  (* I thought this would be useful, but turns out we usually need the length *)
+  Corollary split_corresponding_list_no_length: forall (l: list (X*Y)) left_list mid right_list,
+      map (fun '(x, _) => x) l = left_list ++ [mid] ++ right_list ->
+      exists left_list' mid' right_list', l = combine (left_list ++ [mid] ++ right_list) (left_list' ++ [mid'] ++ right_list').
+  Proof.
+    intros.
+    destruct (split_corresponding_list _ _ _ _ H)
+      as (left_list' & mid' & right_list' & _ & _ & EQ).
+    exists left_list', mid', right_list'.
+    apply EQ.
+  Qed.
+ +
+End ListLemmas.
+ +
+Require Import FMapList OrderedTypeEx.
+From ABS Require Import abs_defs.
+From Equations Require Import Equations.
+ +
+Module MapFacts := FSets.FMapFacts.Facts Map.
+ +
+(* some slightly ad-hoc equalities *)
+Lemma subst_fst_commute: forall x0 x1 e_T_list,
+  map (fun x : e * T => let (e_, _) := let '(e_, T_) := x in (e_var_subst_one e_ x0 x1, T_) in e_) e_T_list =
+  (fix e_list_subst_one (es : list e) (x_ y_ : x) {struct es} : list e :=
+     match es with
+     | [] => fun _ _ : x => []
+     | e :: l => fun x_0 y_0 : x => e_var_subst_one e x_0 y_0 :: e_list_subst_one l x_0 y_0
+     end x_ y_) (map (fun pat_ : e * T => let (e_, _) := pat_ in e_) e_T_list) x0 x1.
+Proof.
+  induction e_T_list; auto.
+  destruct a.
+  simpl.
+  rewrite <- IHe_T_list.
+  reflexivity.
+Qed.
+ +
+Lemma subst_snd_commutes: forall x0 s e_T_list,
+  map (fun pat_ : e * T => let (_, T_) := pat_ in T_)
+    (map (fun pat_ : e * T => let (e_, T_) := pat_ in (e_var_subst_one e_ x0 s, T_)) e_T_list) =
+    map (fun pat_ : e * T => let (_, T_) := pat_ in T_) e_T_list.
+Proof.
+  intros.
+  induction e_T_list; auto.
+  destruct a;cbn in *.
+  now rewrite IHe_T_list.
+Qed.
+ +
+(* Characterizing substitution *)
+ +
+Lemma subst_term: forall t sub,
+  e_var_subst (e_t t) sub = (e_t t).
+Proof.
+  induction sub.
+  - trivial.
+  - destruct a.
+    simpl.
+    rewrite IHsub.
+    now simp e_var_subst_one.
+Qed.
+ +
+Definition replace_var (x0:x) (sub:list(x*x)) :=
fold_right (fun '(x_, y_) x0 => if (eq_x x0 x_) then y_ else x0) x0 sub.
+ +
+Lemma subst_var: forall x0 sub,
+  e_var_subst (e_var x0) sub = e_var (replace_var x0 sub).
+Proof.
+  induction sub.
+  - trivial.
+  - destruct a; simpl.
+    rewrite IHsub.
+    simp e_var_subst_one.
+    destruct (eq_x (replace_var x0 sub)); subst; eauto.
+Qed.
+ +
+Lemma e_list_subst_map: forall x0 y0 e_list,
+  e_list_subst_one e_list x0 y0 = map (fun e_ => e_var_subst_one e_ x0 y0) e_list.
+Proof.
+  induction e_list; [easy|];
+  destruct a;
+    simpl;
+    now rewrite IHe_list.
+Qed.
+ +
+Lemma subst_fn: forall fn0 sub e_list,
+  e_var_subst (e_fn_call fn0 e_list) sub = (e_fn_call fn0 (map (fun e' => e_var_subst e' sub) e_list)).
+Proof.
+  induction sub; intros.
+  - simpl.
+    now rewrite map_id.
+  - destruct a.
+    simpl.
+    rewrite IHsub.
+    simp e_var_subst_one.
+    now rewrite e_list_subst_map, map_map.
+Qed.
+ +
+Lemma e_list_subst: forall el x0 y0,
+  e_list_subst_one el x0 y0 = map (fun e => e_var_subst_one e x0 y0) el.
+Proof.
+  induction el; intros.
+  - trivial.
+  - simpl.
+    now rewrite IHel.
+Qed.
+ +
+Lemma e_list_fresh: forall e0 ys el,
+  fresh_vars_el ys el ->
+  In e0 el ->
+  fresh_vars_e ys e0.
+Proof.
+  induction el.
+  - easy.
+  - simpl; intros.
+    destruct H0; subst.
+    + now destruct H.
+    + destruct H.
+      apply IHel; eauto.
+Qed.
+ +
+(* Properties of fresh_e*)
+Lemma fresh_first_e: forall e0 y ys,
+  fresh_vars_e (y::ys) e0 -> fresh_vars_e [y] e0.
+Proof.
+  induction e0 using e_ott_ind
+    with (P_list_e := fun e_list =>
+                        forall e0 y ys,
+                        In e0 e_list ->
+                        fresh_vars_e (y::ys) e0 -> fresh_vars_e [y] e0);
+     intros; try easy.
+  - simp fresh_vars_e in *.
+    intro.
+    inv H0.
+    + apply H.
+    now left.
+    + inv H1.
+  - simp fresh_vars_e in *.
+    induction e_list.
+    + easy.
+    + inv H.
+      split.
+      * eapply IHe0; eauto.
+        now left.
+      * eapply IHe_list; eauto.
+        intros; eapply IHe0; eauto.
+        now right.
+  - inv H.
+    + eapply IHe0; eauto.
+    + eapply IHe1; eauto.
+Qed.
+ +
+Lemma fresh_monotone_e: forall e0 y ys,
+  fresh_vars_e (y::ys) e0 -> fresh_vars_e ys e0.
+Proof.
+  induction e0 using e_ott_ind
+    with (P_list_e := fun e_list =>
+                        forall e0 y ys,
+                        In e0 e_list ->
+                        fresh_vars_e (y::ys) e0 -> fresh_vars_e ys e0);
+     intros; try easy.
+  - simp fresh_vars_e in *.
+    intro.
+    apply H.
+    right.
+    assumption.
+  - simp fresh_vars_e in *.
+    induction e_list.
+    + easy.
+    + inv H.
+      split.
+      * eapply IHe0; eauto.
+        now left.
+      * apply IHe_list; eauto.
+        intros; eapply IHe0; eauto.
+        now right.
+  - inv H.
+    + eapply IHe0; eauto.
+    + eapply IHe1; eauto.
+Qed.
+ +
+Lemma fresh_first_el: forall el y ys,
+    fresh_vars_el (y::ys) el -> fresh_vars_el [y] el.
+Proof.
+  induction el; intros.
+  - now inv H.
+  - inv H.
+    split.
+    + now apply fresh_first_e in H0.
+    + eapply IHel; eauto.
+Qed.
+ +
+Lemma fresh_monotone_el: forall el y ys,
+  fresh_vars_el (y::ys) el -> fresh_vars_el ys el.
+Proof.
+  induction el; intros.
+  - now inv H.
+  - inv H.
+    split.
+    + now apply fresh_monotone_e in H0.
+    + eapply IHel; eauto.
+Qed.
+ +
+Lemma fresh_var_subst: forall e0 y sub,
+  fresh_vars_e (map snd sub) e0 ->
+  fresh_vars_e [y] e0 ->
+  ~ In y (map snd sub) ->
+  fresh_vars_e [y] (e_var_subst e0 sub).
+Proof.
+  intros.
+  generalize dependent y.
+  generalize dependent e0.
+  induction e0 using e_ott_ind
+    with
+    (P_list_e := fun e_list => forall y,
+                     fresh_vars_el (map snd sub) e_list ->
+                     fresh_vars_el [y] e_list ->
+                     ~ In y (map snd sub) ->
+                     fresh_vars_el [y] (map (fun e' => e_var_subst e' sub) e_list))
+  ; intros; auto.
+  - rewrite subst_term.
+    now simp e_var_subst_one.
+  - induction sub; auto.
+    destruct a as (?x_, ?y); simpl.
+    rewrite subst_var.
+    simp e_var_subst_one.
+    destruct (eq_x (replace_var x5 sub) x_).
+    + simp fresh_vars_e.
+      intro.
+      apply H1.
+      left.
+      now inv H2.
+    + rewrite <- subst_var.
+      apply Decidable.not_or in H1.
+      destruct H1.
+      apply fresh_monotone_e in H.
+      eapply IHsub; auto.
+  - rewrite subst_fn.
+    simp fresh_vars_e in *.
+  - destruct H,H0.
+    split.
+    + apply IHe0; auto.
+    + apply IHe1; eauto.
+Qed.
+ +
+Fact disjoint_empty{A:Type}: @disjoint A [] [].
+Proof. easy. Qed.
+ +
+Lemma disjoint_monotone {A:Type}: forall (l1 l2: list A) a1 a2,
+  disjoint (a1::l1) (a2::l2) -> disjoint l1 l2.
+Proof.
+  intros.
+  intros ? ? ?.
+    specialize (H a).
+    apply H; now right.
+Qed.
+ +
+Section MapLemmas.
+ +
+  Lemma map_neq_none_is_some{elt:Type}: forall m x,
+      Map.find x m <> None ->
+      exists y, Map.find (elt:=elt) x m = Some y.
+  Proof.
+    intros.
+    destruct (MapFacts.In_dec m x).
+    - inv i.
+      exists x0.
+      apply Map.find_1.
+      apply H0.
+    - apply MapFacts.not_find_in_iff in n.
+      rewrite n in H.
+      contradiction.
+  Qed.
+ +
+  Lemma fold_map_reshuffle: forall (l: list (T*x*t*x)) G0,
+      (fold_right (fun (ax : x * T) (G' : G) => Map.add (fst ax) (ctxv_T (snd ax)) G') G0
+         (map (fun pat_ : T * x => let (T_, x_) := pat_ in (x_, T_)) (map (fun '(T_0, x_, _, _) => (T_0, x_)) l)))
+      = (fold_right (fun '(T1, x_, _, _) (G' : G) => Map.add x_ (ctxv_T T1) G') G0 l).
+  Proof.
+    induction l;intros;auto.
+    destruct a as (((?T_ & ?x_) & ?t_) & ?y).
+    simpl.
+    rewrite IHl.
+    reflexivity.
+  Qed.
+ +
+  Lemma map_add_comm{E:Type}: forall m key key' elt elt',
+      key <> key' -> Map.Equal (Map.add (elt:=E) key elt (Map.add key' elt' m)) (Map.add key' elt' (Map.add key elt m)).
+  Proof.
+    intros.
+    intro.
+    destruct (Map.find y m) eqn:?.
+    - destruct (eq_x y key), (eq_x y key'); subst;
+        erewrite 2 Map.find_1; eauto;
+        (* this should just be "eauto with map", but I can't seem to import the hint database *)
+        try (apply Map.add_2; eauto; now apply Map.add_1);
+        try (now apply Map.add_1; eauto);
+        try (repeat (apply Map.add_2; eauto); now apply Map.find_2; eauto).
+    - destruct (eq_x y key), (eq_x y key'); subst.
+      + contradiction.
+      + erewrite 2 Map.find_1; eauto.
+        * apply Map.add_2; eauto.
+          now apply Map.add_1.
+        * now apply Map.add_1.
+      + erewrite 2 Map.find_1; eauto.
+        * now apply Map.add_1.
+        * apply Map.add_2; eauto.
+          now apply Map.add_1.
+ +
+      (* there has to be a cleaner way to do this case?? *)
+      + replace (Map.find (elt:=E) y (Map.add key elt (Map.add key' elt' m))) with (@None E).
+        replace (Map.find (elt:=E) y (Map.add key' elt' (Map.add key elt m))) with (@None E).
+        reflexivity.
+        * symmetry.
+          apply MapFacts.not_find_in_iff in Heqo.
+          apply MapFacts.not_find_in_iff.
+          intro.
+          apply Heqo.
+          inv H0.
+          exists x.
+          apply Map.add_3 with (x:= key) (e':=elt); auto.
+          apply Map.add_3 with (x:=key') (e':=elt'); auto.
+        * symmetry.
+          apply MapFacts.not_find_in_iff in Heqo.
+          apply MapFacts.not_find_in_iff.
+          intro.
+          inv H0.
+          apply Heqo.
+          exists x.
+          apply Map.add_3 with (x:=key') (e':=elt'); auto.
+          apply Map.add_3 with (x:= key) (e':=elt); auto.
+  Qed.
+ +
+  Lemma fold_not_in: forall G0 y (T_x_t_y_list: list (T*x*t*x)),
+      ~ Map.In y G0 ->
+      ~ In y (map (fun '(_, _, _, y') => y') T_x_t_y_list) ->
+      ~ Map.In y (fold_right (fun '(T_, _, _, y) (G0 : G) => Map.add y (ctxv_T T_) G0) G0 T_x_t_y_list).
+  Proof.
+    induction T_x_t_y_list as [ | (((?T_, ?x_), ?t_), ?y) T_x_t_y_list IH ]; [easy|].
+    simpl; intros ? ? ?.
+    destruct (eq_x y y0); subst.
+    - apply H0.
+      now left.
+    - apply MapFacts.add_in_iff in H1.
+      inv H1.
+      + apply H0.
+        now left.
+      + apply IH; eauto.
+  Qed.
+ +
+  Lemma fold_add_comm: forall G0 y T_ (upd: list (T*x)),
+      ~ In y (map (fun '(_, y) => y) upd) ->
+      Map.Equal (Map.add y (ctxv_T T_) (fold_right (fun '(T_, y) G0 => Map.add y (ctxv_T T_) G0) G0 upd))
+        (fold_right (fun '(T_, y) G0 => Map.add y (ctxv_T T_) G0) (Map.add y (ctxv_T T_) G0) upd).
+  Proof.
+    induction upd; intros.
+    - easy.
+    - destruct a; simpl in *.
+      apply Decidable.not_or in H.
+      destruct H.
+      now rewrite map_add_comm, IHupd; auto.
+  Qed.
+End MapLemmas.
+
+
+ +
+ + + diff --git a/docs/coqdoc/config.js b/docs/coqdoc/config.js new file mode 100644 index 0000000..1902b36 --- /dev/null +++ b/docs/coqdoc/config.js @@ -0,0 +1,79 @@ +var coqdocjs = coqdocjs || {}; + +coqdocjs.repl = { + "forall": "∀", + "exists": "∃", + "~": "¬", + "/\\": "∧", + "\\/": "∨", + "->": "→", + "<-": "←", + "<->": "↔", + "=>": "⇒", + "<>": "≠", + "<=": "≤", + ">=": "≥", + "el": "∈", + "nel": "∉", + "<<=": "⊆", + "|-": "⊢", + ">>": "»", + "<<": "⊆", + "++": "⧺", + "===": "≡", + "=/=": "≢", + "=~=": "≅", + "==>": "⟹", + "<==": "⟸", + "False": "⊥", + "True": "⊤", + ":=": "≔", + "-|": "⊣", + "*": "×", + "::": "∷", + "lhd": "⊲", + "rhd": "⊳", + "nat": "ℕ", + "alpha": "α", + "beta": "β", + "gamma": "γ", + "delta": "δ", + "epsilon": "ε", + "eta": "η", + "iota": "ι", + "kappa": "κ", + "lambda": "λ", + "mu": "μ", + "nu": "ν", + "omega": "ω", + "phi": "ϕ", + "pi": "π", + "psi": "ψ", + "rho": "ρ", + "sigma": "σ", + "tau": "τ", + "theta": "θ", + "xi": "ξ", + "zeta": "ζ", + "Delta": "Δ", + "Gamma": "Γ", + "Pi": "Π", + "Sigma": "Σ", + "Omega": "Ω", + "Xi": "Ξ" +}; + +coqdocjs.subscr = { + "0" : "₀", + "1" : "₁", + "2" : "₂", + "3" : "₃", + "4" : "₄", + "5" : "₅", + "6" : "₆", + "7" : "₇", + "8" : "₈", + "9" : "₉", +}; + +coqdocjs.replInText = ["==>","<=>", "=>", "->", "<-", ":="]; diff --git a/docs/coqdoc/coqdoc.css b/docs/coqdoc/coqdoc.css new file mode 100644 index 0000000..18dad89 --- /dev/null +++ b/docs/coqdoc/coqdoc.css @@ -0,0 +1,197 @@ +@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700); + +body{ + font-family: 'Open Sans', sans-serif; + font-size: 14px; + color: #2D2D2D +} + +a { + text-decoration: none; + border-radius: 3px; + padding-left: 3px; + padding-right: 3px; + margin-left: -3px; + margin-right: -3px; + color: inherit; + font-weight: bold; +} + +#main .code a, #main .inlinecode a, #toc a { + font-weight: inherit; +} + +a[href]:hover, [clickable]:hover{ + background-color: rgba(0,0,0,0.1); + cursor: pointer; +} + +h, h1, h2, h3, h4, h5 { + line-height: 1; + color: black; + text-rendering: optimizeLegibility; + font-weight: normal; + letter-spacing: 0.1em; + text-align: left; +} + +div + br { + display: none; +} + +div:empty{ display: none;} + +#main h1 { + font-size: 2em; +} + +#main h2 { + font-size: 1.667rem; +} + +#main h3 { + font-size: 1.333em; +} + +#main h4, #main h5, #main h6 { + font-size: 1em; +} + +#toc h2 { + padding-bottom: 0; +} + +#main .doc { + margin: 0; + text-align: justify; +} + +.inlinecode, .code, #main pre { + font-family: monospace; +} + +.code > br:first-child { + display: none; +} + +.doc + .code{ + margin-top:0.5em; +} + +.block{ + display: block; + margin-top: 5px; + margin-bottom: 5px; + padding: 10px; + text-align: center; +} + +.block img{ + margin: 15px; +} + +table.infrule { + border: 0px; + margin-left: 50px; + margin-top: 10px; + margin-bottom: 10px; +} + +td.infrule { + font-family: "Droid Sans Mono", "DejaVu Sans Mono", monospace; + text-align: center; + padding: 0; + line-height: 1; +} + +tr.infrulemiddle hr { + margin: 1px 0 1px 0; +} + +.infrulenamecol { + color: rgb(60%,60%,60%); + padding-left: 1em; + padding-bottom: 0.1em +} + +.id[type="constructor"], .id[type="projection"], .id[type="method"], +.id[title="constructor"], .id[title="projection"], .id[title="method"] { + color: #A30E16; +} + +.id[type="var"], .id[type="variable"], +.id[title="var"], .id[title="variable"] { + color: inherit; +} + +.id[type="definition"], .id[type="record"], .id[type="class"], .id[type="instance"], .id[type="inductive"], .id[type="library"], +.id[title="definition"], .id[title="record"], .id[title="class"], .id[title="instance"], .id[title="inductive"], .id[title="library"] { + color: #A6650F; +} + +.id[type="lemma"], +.id[title="lemma"]{ + color: #188B0C; +} + +.id[type="keyword"], .id[type="notation"], .id[type="abbreviation"], +.id[title="keyword"], .id[title="notation"], .id[title="abbreviation"]{ + color : #2874AE; +} + +.comment { + color: #808080; +} + +/* TOC */ + +#toc h2{ + letter-spacing: 0; + font-size: 1.333em; +} + +/* Index */ + +#index { + margin: 0; + padding: 0; + width: 100%; +} + +#index #frontispiece { + margin: 1em auto; + padding: 1em; + width: 60%; +} + +.booktitle { font-size : 140% } +.authors { font-size : 90%; + line-height: 115%; } +.moreauthors { font-size : 60% } + +#index #entrance { + text-align: center; +} + +#index #entrance .spacer { + margin: 0 30px 0 30px; +} + +ul.doclist { + margin-top: 0em; + margin-bottom: 0em; +} + +#toc > * { + clear: both; +} + +#toc > a { + display: block; + float: left; + margin-top: 1em; +} + +#toc a h2{ + display: inline; +} diff --git a/docs/coqdoc/coqdocjs.css b/docs/coqdoc/coqdocjs.css new file mode 100644 index 0000000..959b42e --- /dev/null +++ b/docs/coqdoc/coqdocjs.css @@ -0,0 +1,239 @@ +/* replace unicode */ + +.id[repl] .hidden { + font-size: 0; +} + +.id[repl]:before{ + content: attr(repl); +} + +/* folding proofs */ + +@keyframes show-proof { + 0% { + max-height: 1.2em; + opacity: 1; + } + 99% { + max-height: 1000em; + } + 100%{ + } +} + +@keyframes hide-proof { + from { + visibility: visible; + max-height: 10em; + opacity: 1; + } + to { + max-height: 1.2em; + } +} + +.proof { + cursor: pointer; +} +.proof * { + cursor: pointer; +} + +.proof { + overflow: hidden; + position: relative; + transition: opacity 1s; + display: inline-block; +} + +.proof[show="false"] { + max-height: 1.2em; + visibility: visible; + opacity: 0.3; +} + +.proof[show="false"][animate] { + animation-name: hide-proof; + animation-duration: 0.25s; +} + +.proof[show="true"] { + animation-name: show-proof; + animation-duration: 10s; +} + +.proof[show="true"]:before { + content: "\25BC"; /* arrow down */ +} +.proof[show="false"]:before { + content: "\25B6"; /* arrow right */ +} + +.proof[show="false"]:hover { + visibility: visible; + opacity: 0.5; +} + +#toggle-proofs[proof-status="no-proofs"] { + display: none; +} + +#toggle-proofs[proof-status="some-hidden"]:before { + content: "Show Proofs"; +} + +#toggle-proofs[proof-status="all-shown"]:before { + content: "Hide Proofs"; +} + + +/* page layout */ + +html, body { + height: 100%; + margin:0; + padding:0; +} + +@media only screen { /* no div with internal scrolling to allow printing of whole content */ + body { + display: flex; + flex-direction: column + } + + #content { + flex: 1; + overflow: auto; + display: flex; + flex-direction: column; + } +} + +#content:focus { + outline: none; /* prevent glow in OS X */ +} + +#main { + display: block; + padding: 16px; + padding-top: 1em; + padding-bottom: 2em; + margin-left: auto; + margin-right: auto; + max-width: 60em; + flex: 1 0 auto; +} + +.libtitle { + display: none; +} + +/* header */ +#header { + width:100%; + padding: 0; + margin: 0; + display: flex; + align-items: center; + background-color: rgb(21,57,105); + color: white; + font-weight: bold; + overflow: hidden; +} + + +.button { + cursor: pointer; +} + +#header * { + text-decoration: none; + vertical-align: middle; + margin-left: 15px; + margin-right: 15px; +} + +#header > .right, #header > .left { + display: flex; + flex: 1; + align-items: center; +} +#header > .left { + text-align: left; +} +#header > .right { + flex-direction: row-reverse; +} + +#header a, #header .button { + color: white; + box-sizing: border-box; +} + +#header a { + border-radius: 0; + padding: 0.2em; +} + +#header .button { + background-color: rgb(63, 103, 156); + border-radius: 1em; + padding-left: 0.5em; + padding-right: 0.5em; + margin: 0.2em; +} + +#header a:hover, #header .button:hover { + background-color: rgb(181, 213, 255); + color: black; +} + +#header h1 { padding: 0; + margin: 0;} + +/* footer */ +#footer { + text-align: center; + opacity: 0.5; + font-size: 75%; +} + +/* hyperlinks */ + +@keyframes highlight { + 50%{ + background-color: black; + } +} + +:target * { + animation-name: highlight; + animation-duration: 1s; +} + +a[name]:empty { + float: right; +} + +/* Proviola */ + +div.code { + width: auto; + float: none; +} + +div.goal { + position: fixed; + left: 75%; + width: 25%; + top: 3em; +} + +div.doc { + clear: both; +} + +span.command:hover { + background-color: inherit; +} diff --git a/docs/coqdoc/coqdocjs.js b/docs/coqdoc/coqdocjs.js new file mode 100644 index 0000000..727da8c --- /dev/null +++ b/docs/coqdoc/coqdocjs.js @@ -0,0 +1,197 @@ +var coqdocjs = coqdocjs || {}; +(function(){ + +function replace(s){ + var m; + if (m = s.match(/^(.+)'/)) { + return replace(m[1])+"'"; + } else if (m = s.match(/^([A-Za-z]+)_?(\d+)$/)) { + return replace(m[1])+m[2].replace(/\d/g, function(d){ + if (coqdocjs.subscr.hasOwnProperty(d)) { + return coqdocjs.subscr[d]; + } else { + return d; + } + }); + } else if (coqdocjs.repl.hasOwnProperty(s)){ + return coqdocjs.repl[s] + } else { + return s; + } +} + +function toArray(nl){ + return Array.prototype.slice.call(nl); +} + +function replInTextNodes() { + // Get all the nodes up front. + var nodes = Array.from(document.querySelectorAll(".code, .inlinecode")) + .flatMap(elem => Array.from(elem.childNodes) + .filter(e => e.nodeType == Node.TEXT_NODE) + ); + + // Create a replacement template node to clone from. + var replacementTemplate = document.createElement("span"); + replacementTemplate.setAttribute("class", "id"); + replacementTemplate.setAttribute("type", "keyword"); + + // Do the replacements. + coqdocjs.replInText.forEach(function(toReplace){ + var replacement = replacementTemplate.cloneNode(true); + replacement.appendChild(document.createTextNode(toReplace)); + + nodes.forEach(node => { + var fragments = node.textContent.split(toReplace); + node.textContent = fragments[fragments.length-1]; + for (var k = 0; k < fragments.length - 1; ++k) { + fragments[k] && node.parentNode.insertBefore(document.createTextNode(fragments[k]),node); + node.parentNode.insertBefore(replacement.cloneNode(true), node); + } + }); + }); +} + +function replNodes() { + toArray(document.getElementsByClassName("id")).forEach(function(node){ + if (["var", "variable", "keyword", "notation", "definition", "inductive"].indexOf(node.getAttribute("type"))>=0){ + var text = node.textContent; + var replText = replace(text); + if(text != replText) { + node.setAttribute("repl", replText); + node.setAttribute("title", text); + var hidden = document.createElement("span"); + hidden.setAttribute("class", "hidden"); + while (node.firstChild) { + hidden.appendChild(node.firstChild); + } + node.appendChild(hidden); + } + } + }); +} + +function isVernacStart(l, t){ + t = t.trim(); + for(var s of l){ + if (t == s || t.startsWith(s+" ") || t.startsWith(s+".")){ + return true; + } + } + return false; +} + +function isProofStart(n){ + return isVernacStart(["Proof"], n.textContent) || + (isVernacStart(["Next"], n.textContent) && isVernacStart(["Obligation"], n.nextSibling.nextSibling.textContent)); +} + +function isProofEnd(s){ + return isVernacStart(["Qed", "Admitted", "Defined", "Abort"], s); +} + +function proofStatus(){ + var proofs = toArray(document.getElementsByClassName("proof")); + if(proofs.length) { + for(var proof of proofs) { + if (proof.getAttribute("show") === "false") { + return "some-hidden"; + } + } + return "all-shown"; + } + else { + return "no-proofs"; + } +} + +function updateView(){ + document.getElementById("toggle-proofs").setAttribute("proof-status", proofStatus()); +} + +function foldProofs() { + var hasCommands = true; + var nodes = document.getElementsByClassName("command"); + if(nodes.length == 0) { + hasCommands = false; + console.log("no command tags found") + nodes = document.getElementsByClassName("id"); + } + toArray(nodes).forEach(function(node){ + if(isProofStart(node)) { + var proof = document.createElement("span"); + proof.setAttribute("class", "proof"); + + node.parentNode.insertBefore(proof, node); + if(proof.previousSibling.nodeType === Node.TEXT_NODE) + proof.appendChild(proof.previousSibling); + while(node && !isProofEnd(node.textContent)) { + proof.appendChild(node); + node = proof.nextSibling; + } + if (proof.nextSibling) proof.appendChild(proof.nextSibling); // the Qed + if (!hasCommands && proof.nextSibling) proof.appendChild(proof.nextSibling); // the dot after the Qed + + proof.addEventListener("click", function(proof){return function(e){ + if (e.target.parentNode.tagName.toLowerCase() === "a") + return; + proof.setAttribute("show", proof.getAttribute("show") === "true" ? "false" : "true"); + proof.setAttribute("animate", ""); + updateView(); + };}(proof)); + proof.setAttribute("show", "false"); + } + }); +} + +function toggleProofs(){ + var someProofsHidden = proofStatus() === "some-hidden"; + toArray(document.getElementsByClassName("proof")).forEach(function(proof){ + proof.setAttribute("show", someProofsHidden); + proof.setAttribute("animate", ""); + }); + updateView(); +} + +function repairDom(){ + // pull whitespace out of command + toArray(document.getElementsByClassName("command")).forEach(function(node){ + while(node.firstChild && node.firstChild.textContent.trim() == ""){ + console.log("try move"); + node.parentNode.insertBefore(node.firstChild, node); + } + }); + toArray(document.getElementsByClassName("id")).forEach(function(node){ + node.setAttribute("type", node.getAttribute("title")); + }); + toArray(document.getElementsByClassName("idref")).forEach(function(ref){ + toArray(ref.childNodes).forEach(function(child){ + if (["var", "variable"].indexOf(child.getAttribute("type")) > -1) + ref.removeAttribute("href"); + }); + }); + +} + +function fixTitle(){ + var url = "/" + window.location.pathname; + var basename = url.substring(url.lastIndexOf('/')+1, url.lastIndexOf('.')); + if (basename === "toc") {document.title = "Table of Contents";} + else if (basename === "indexpage") {document.title = "Index";} + else {document.title = basename;} +} + +function postprocess(){ + repairDom(); + replInTextNodes() + replNodes(); + foldProofs(); + document.getElementById("toggle-proofs").addEventListener("click", toggleProofs); + updateView(); +} + +fixTitle(); +document.addEventListener('DOMContentLoaded', postprocess); + +coqdocjs.toggleProofs = toggleProofs; +})(); diff --git a/docs/coqdoc/indexpage.html b/docs/coqdoc/indexpage.html new file mode 100644 index 0000000..6a6182f --- /dev/null +++ b/docs/coqdoc/indexpage.html @@ -0,0 +1,1101 @@ + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Global IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(170 entries)
Notation IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(4 entries)
Module IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(3 entries)
Variable IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(9 entries)
Library IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(4 entries)
Lemma IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(64 entries)
Constructor IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(19 entries)
Inductive IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(9 entries)
Section IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(4 entries)
Definition IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(54 entries)
+
+

Global Index

+

A

+abs_functional_metatheory [library]
+abs_defs [library]
+abs_examples [library]
+

B

+b [definition, in ABS.abs_defs]
+

C

+combine_map [lemma, in ABS.utils]
+combine_app [lemma, in ABS.utils]
+combine_snd [lemma, in ABS.utils]
+combine_nil [lemma, in ABS.utils]
+combine_fst [lemma, in ABS.utils]
+Ctx [definition, in ABS.abs_examples]
+ctxv [inductive, in ABS.abs_defs]
+ctxv_sind [definition, in ABS.abs_defs]
+ctxv_rec [definition, in ABS.abs_defs]
+ctxv_ind [definition, in ABS.abs_defs]
+ctxv_rect [definition, in ABS.abs_defs]
+ctxv_sig [constructor, in ABS.abs_defs]
+ctxv_T [constructor, in ABS.abs_defs]
+

D

+disjoint [definition, in ABS.abs_defs]
+disjoint_monotone [lemma, in ABS.utils]
+disjoint_empty [lemma, in ABS.utils]
+

E

+e [inductive, in ABS.abs_defs]
+eq_z [lemma, in ABS.abs_defs]
+eq_b [lemma, in ABS.abs_defs]
+eq_x [lemma, in ABS.abs_defs]
+eq_fn [lemma, in ABS.abs_defs]
+eq_i [lemma, in ABS.abs_defs]
+e_list_fresh [lemma, in ABS.utils]
+e_list_subst [lemma, in ABS.utils]
+e_list_subst_map [lemma, in ABS.utils]
+e_call_const_5_T_int [lemma, in ABS.abs_examples]
+e_call_const_typ_F [lemma, in ABS.abs_examples]
+e_const_5_T_int [lemma, in ABS.abs_examples]
+e_call_const_5 [definition, in ABS.abs_examples]
+e_const_5 [definition, in ABS.abs_examples]
+e_var_subst [definition, in ABS.abs_defs]
+e_list_subst_one [definition, in ABS.abs_defs]
+e_var_subst_one [definition, in ABS.abs_defs]
+e_ott_ind [definition, in ABS.abs_defs]
+e_rect.H_list_e_cons [variable, in ABS.abs_defs]
+e_rect.H_list_e_nil [variable, in ABS.abs_defs]
+e_rect.H_e_fn_call [variable, in ABS.abs_defs]
+e_rect.H_e_var [variable, in ABS.abs_defs]
+e_rect.H_e_t [variable, in ABS.abs_defs]
+e_rect.P_list_e [variable, in ABS.abs_defs]
+e_rect.P_e [variable, in ABS.abs_defs]
+e_rect [section, in ABS.abs_defs]
+e_sind [definition, in ABS.abs_defs]
+e_rec [definition, in ABS.abs_defs]
+e_ind [definition, in ABS.abs_defs]
+e_rect [definition, in ABS.abs_defs]
+e_fn_call [constructor, in ABS.abs_defs]
+e_var [constructor, in ABS.abs_defs]
+e_t [constructor, in ABS.abs_defs]
+

F

+F [inductive, in ABS.abs_defs]
+fn [definition, in ABS.abs_defs]
+fold_add_comm [lemma, in ABS.utils]
+fold_not_in [lemma, in ABS.utils]
+fold_map_reshuffle [lemma, in ABS.utils]
+fold_map3 [lemma, in ABS.utils]
+fold_map2 [lemma, in ABS.utils]
+fold_map1 [lemma, in ABS.utils]
+fold_map [lemma, in ABS.utils]
+fold_map5 [lemma, in ABS.abs_functional_metatheory]
+fold_map4 [lemma, in ABS.abs_functional_metatheory]
+fresh_var_subst [lemma, in ABS.utils]
+fresh_monotone_el [lemma, in ABS.utils]
+fresh_first_el [lemma, in ABS.utils]
+fresh_monotone_e [lemma, in ABS.utils]
+fresh_first_e [lemma, in ABS.utils]
+fresh_consistent [lemma, in ABS.abs_functional_metatheory]
+fresh_subG [lemma, in ABS.abs_functional_metatheory]
+fresh_vars [definition, in ABS.abs_defs]
+fresh_vars_s [definition, in ABS.abs_defs]
+fresh_vars_el [definition, in ABS.abs_defs]
+fresh_vars_e [definition, in ABS.abs_defs]
+FunctionalMetatheory [section, in ABS.abs_functional_metatheory]
+FunctionalMetatheory.vars_well_typed [variable, in ABS.abs_functional_metatheory]
+FunctionalMetatheory.vars_fs_distinct [variable, in ABS.abs_functional_metatheory]
+_ G⊢ _ [notation, in ABS.abs_functional_metatheory]
+_ ⊆ _ [notation, in ABS.abs_functional_metatheory]
+_ F⊢ _ [notation, in ABS.abs_functional_metatheory]
+_ ⊢ _ : _ [notation, in ABS.abs_functional_metatheory]
+func_const_5 [definition, in ABS.abs_examples]
+F_sind [definition, in ABS.abs_defs]
+F_rec [definition, in ABS.abs_defs]
+F_ind [definition, in ABS.abs_defs]
+F_rect [definition, in ABS.abs_defs]
+F_fn [constructor, in ABS.abs_defs]
+

G

+G [definition, in ABS.abs_defs]
+G_vdash_s [definition, in ABS.abs_functional_metatheory]
+

I

+i [definition, in ABS.abs_defs]
+in_fst_iff [lemma, in ABS.utils]
+in_combine_split [lemma, in ABS.utils]
+in_split [lemma, in ABS.utils]
+in_combine [lemma, in ABS.utils]
+

L

+ListLemmas [section, in ABS.utils]
+

M

+Map [module, in ABS.abs_defs]
+MapFacts [module, in ABS.utils]
+MapFacts [module, in ABS.abs_functional_metatheory]
+MapLemmas [section, in ABS.utils]
+map_add_comm [lemma, in ABS.utils]
+map_neq_none_is_some [lemma, in ABS.utils]
+map_split' [lemma, in ABS.utils]
+map_xs [lemma, in ABS.utils]
+map_split [lemma, in ABS.utils]
+map_eq [lemma, in ABS.utils]
+

P

+pat2_id [lemma, in ABS.utils]
+

R

+red_e_sind [definition, in ABS.abs_defs]
+red_e_ind [definition, in ABS.abs_defs]
+red_fun_ground [constructor, in ABS.abs_defs]
+red_fun_exp [constructor, in ABS.abs_defs]
+red_var [constructor, in ABS.abs_defs]
+red_e [inductive, in ABS.abs_defs]
+replace_var [definition, in ABS.utils]
+

S

+s [definition, in ABS.abs_defs]
+same_type_sub [lemma, in ABS.abs_functional_metatheory]
+sig [inductive, in ABS.abs_defs]
+sig_sind [definition, in ABS.abs_defs]
+sig_rec [definition, in ABS.abs_defs]
+sig_ind [definition, in ABS.abs_defs]
+sig_rect [definition, in ABS.abs_defs]
+sig_sig [constructor, in ABS.abs_defs]
+split_corresponding_list_no_length [lemma, in ABS.utils]
+split_corresponding_list [lemma, in ABS.utils]
+subG [definition, in ABS.abs_functional_metatheory]
+subG_type [lemma, in ABS.abs_functional_metatheory]
+subG_consistent [lemma, in ABS.abs_functional_metatheory]
+subG_add_2 [lemma, in ABS.abs_functional_metatheory]
+subG_add [lemma, in ABS.abs_functional_metatheory]
+subG_refl [lemma, in ABS.abs_functional_metatheory]
+subst_fn [lemma, in ABS.utils]
+subst_var [lemma, in ABS.utils]
+subst_term [lemma, in ABS.utils]
+subst_snd_commutes [lemma, in ABS.utils]
+subst_fst_commute [lemma, in ABS.utils]
+subst_lemma [lemma, in ABS.abs_functional_metatheory]
+subst_lemma_one [lemma, in ABS.abs_functional_metatheory]
+subst_lemma_one_alt [lemma, in ABS.abs_functional_metatheory]
+

T

+t [inductive, in ABS.abs_defs]
+T [inductive, in ABS.abs_defs]
+type_preservation [lemma, in ABS.abs_functional_metatheory]
+typ_e_G_Equal_equiv [lemma, in ABS.abs_functional_metatheory]
+typ_e_G_Equal_equiv_imp [lemma, in ABS.abs_functional_metatheory]
+typ_F_sind [definition, in ABS.abs_defs]
+typ_F_ind [definition, in ABS.abs_defs]
+typ_func_decl [constructor, in ABS.abs_defs]
+typ_F [inductive, in ABS.abs_defs]
+typ_e_sind [definition, in ABS.abs_defs]
+typ_e_ind [definition, in ABS.abs_defs]
+typ_func_expr [constructor, in ABS.abs_defs]
+typ_var [constructor, in ABS.abs_defs]
+typ_int [constructor, in ABS.abs_defs]
+typ_bool [constructor, in ABS.abs_defs]
+typ_e [inductive, in ABS.abs_defs]
+t_sind [definition, in ABS.abs_defs]
+t_rec [definition, in ABS.abs_defs]
+t_ind [definition, in ABS.abs_defs]
+t_rect [definition, in ABS.abs_defs]
+t_int [constructor, in ABS.abs_defs]
+t_b [constructor, in ABS.abs_defs]
+T_sind [definition, in ABS.abs_defs]
+T_rec [definition, in ABS.abs_defs]
+T_ind [definition, in ABS.abs_defs]
+T_rect [definition, in ABS.abs_defs]
+T_int [constructor, in ABS.abs_defs]
+T_bool [constructor, in ABS.abs_defs]
+

U

+utils [library]
+

W

+well_formed [definition, in ABS.abs_defs]
+

X

+x [definition, in ABS.abs_defs]
+

Z

+z [definition, in ABS.abs_defs]
+


+

Notation Index

+

F

+_ G⊢ _ [in ABS.abs_functional_metatheory]
+_ ⊆ _ [in ABS.abs_functional_metatheory]
+_ F⊢ _ [in ABS.abs_functional_metatheory]
+_ ⊢ _ : _ [in ABS.abs_functional_metatheory]
+


+

Module Index

+

M

+Map [in ABS.abs_defs]
+MapFacts [in ABS.utils]
+MapFacts [in ABS.abs_functional_metatheory]
+


+

Variable Index

+

E

+e_rect.H_list_e_cons [in ABS.abs_defs]
+e_rect.H_list_e_nil [in ABS.abs_defs]
+e_rect.H_e_fn_call [in ABS.abs_defs]
+e_rect.H_e_var [in ABS.abs_defs]
+e_rect.H_e_t [in ABS.abs_defs]
+e_rect.P_list_e [in ABS.abs_defs]
+e_rect.P_e [in ABS.abs_defs]
+

F

+FunctionalMetatheory.vars_well_typed [in ABS.abs_functional_metatheory]
+FunctionalMetatheory.vars_fs_distinct [in ABS.abs_functional_metatheory]
+


+

Library Index

+

A

+abs_functional_metatheory
+abs_defs
+abs_examples
+

U

+utils
+


+

Lemma Index

+

C

+combine_map [in ABS.utils]
+combine_app [in ABS.utils]
+combine_snd [in ABS.utils]
+combine_nil [in ABS.utils]
+combine_fst [in ABS.utils]
+

D

+disjoint_monotone [in ABS.utils]
+disjoint_empty [in ABS.utils]
+

E

+eq_z [in ABS.abs_defs]
+eq_b [in ABS.abs_defs]
+eq_x [in ABS.abs_defs]
+eq_fn [in ABS.abs_defs]
+eq_i [in ABS.abs_defs]
+e_list_fresh [in ABS.utils]
+e_list_subst [in ABS.utils]
+e_list_subst_map [in ABS.utils]
+e_call_const_5_T_int [in ABS.abs_examples]
+e_call_const_typ_F [in ABS.abs_examples]
+e_const_5_T_int [in ABS.abs_examples]
+

F

+fold_add_comm [in ABS.utils]
+fold_not_in [in ABS.utils]
+fold_map_reshuffle [in ABS.utils]
+fold_map3 [in ABS.utils]
+fold_map2 [in ABS.utils]
+fold_map1 [in ABS.utils]
+fold_map [in ABS.utils]
+fold_map5 [in ABS.abs_functional_metatheory]
+fold_map4 [in ABS.abs_functional_metatheory]
+fresh_var_subst [in ABS.utils]
+fresh_monotone_el [in ABS.utils]
+fresh_first_el [in ABS.utils]
+fresh_monotone_e [in ABS.utils]
+fresh_first_e [in ABS.utils]
+fresh_consistent [in ABS.abs_functional_metatheory]
+fresh_subG [in ABS.abs_functional_metatheory]
+

I

+in_fst_iff [in ABS.utils]
+in_combine_split [in ABS.utils]
+in_split [in ABS.utils]
+in_combine [in ABS.utils]
+

M

+map_add_comm [in ABS.utils]
+map_neq_none_is_some [in ABS.utils]
+map_split' [in ABS.utils]
+map_xs [in ABS.utils]
+map_split [in ABS.utils]
+map_eq [in ABS.utils]
+

P

+pat2_id [in ABS.utils]
+

S

+same_type_sub [in ABS.abs_functional_metatheory]
+split_corresponding_list_no_length [in ABS.utils]
+split_corresponding_list [in ABS.utils]
+subG_type [in ABS.abs_functional_metatheory]
+subG_consistent [in ABS.abs_functional_metatheory]
+subG_add_2 [in ABS.abs_functional_metatheory]
+subG_add [in ABS.abs_functional_metatheory]
+subG_refl [in ABS.abs_functional_metatheory]
+subst_fn [in ABS.utils]
+subst_var [in ABS.utils]
+subst_term [in ABS.utils]
+subst_snd_commutes [in ABS.utils]
+subst_fst_commute [in ABS.utils]
+subst_lemma [in ABS.abs_functional_metatheory]
+subst_lemma_one [in ABS.abs_functional_metatheory]
+subst_lemma_one_alt [in ABS.abs_functional_metatheory]
+

T

+type_preservation [in ABS.abs_functional_metatheory]
+typ_e_G_Equal_equiv [in ABS.abs_functional_metatheory]
+typ_e_G_Equal_equiv_imp [in ABS.abs_functional_metatheory]
+


+

Constructor Index

+

C

+ctxv_sig [in ABS.abs_defs]
+ctxv_T [in ABS.abs_defs]
+

E

+e_fn_call [in ABS.abs_defs]
+e_var [in ABS.abs_defs]
+e_t [in ABS.abs_defs]
+

F

+F_fn [in ABS.abs_defs]
+

R

+red_fun_ground [in ABS.abs_defs]
+red_fun_exp [in ABS.abs_defs]
+red_var [in ABS.abs_defs]
+

S

+sig_sig [in ABS.abs_defs]
+

T

+typ_func_decl [in ABS.abs_defs]
+typ_func_expr [in ABS.abs_defs]
+typ_var [in ABS.abs_defs]
+typ_int [in ABS.abs_defs]
+typ_bool [in ABS.abs_defs]
+t_int [in ABS.abs_defs]
+t_b [in ABS.abs_defs]
+T_int [in ABS.abs_defs]
+T_bool [in ABS.abs_defs]
+


+

Inductive Index

+

C

+ctxv [in ABS.abs_defs]
+

E

+e [in ABS.abs_defs]
+

F

+F [in ABS.abs_defs]
+

R

+red_e [in ABS.abs_defs]
+

S

+sig [in ABS.abs_defs]
+

T

+t [in ABS.abs_defs]
+T [in ABS.abs_defs]
+typ_F [in ABS.abs_defs]
+typ_e [in ABS.abs_defs]
+


+

Section Index

+

E

+e_rect [in ABS.abs_defs]
+

F

+FunctionalMetatheory [in ABS.abs_functional_metatheory]
+

L

+ListLemmas [in ABS.utils]
+

M

+MapLemmas [in ABS.utils]
+


+

Definition Index

+

B

+b [in ABS.abs_defs]
+

C

+Ctx [in ABS.abs_examples]
+ctxv_sind [in ABS.abs_defs]
+ctxv_rec [in ABS.abs_defs]
+ctxv_ind [in ABS.abs_defs]
+ctxv_rect [in ABS.abs_defs]
+

D

+disjoint [in ABS.abs_defs]
+

E

+e_call_const_5 [in ABS.abs_examples]
+e_const_5 [in ABS.abs_examples]
+e_var_subst [in ABS.abs_defs]
+e_list_subst_one [in ABS.abs_defs]
+e_var_subst_one [in ABS.abs_defs]
+e_ott_ind [in ABS.abs_defs]
+e_sind [in ABS.abs_defs]
+e_rec [in ABS.abs_defs]
+e_ind [in ABS.abs_defs]
+e_rect [in ABS.abs_defs]
+

F

+fn [in ABS.abs_defs]
+fresh_vars [in ABS.abs_defs]
+fresh_vars_s [in ABS.abs_defs]
+fresh_vars_el [in ABS.abs_defs]
+fresh_vars_e [in ABS.abs_defs]
+func_const_5 [in ABS.abs_examples]
+F_sind [in ABS.abs_defs]
+F_rec [in ABS.abs_defs]
+F_ind [in ABS.abs_defs]
+F_rect [in ABS.abs_defs]
+

G

+G [in ABS.abs_defs]
+G_vdash_s [in ABS.abs_functional_metatheory]
+

I

+i [in ABS.abs_defs]
+

R

+red_e_sind [in ABS.abs_defs]
+red_e_ind [in ABS.abs_defs]
+replace_var [in ABS.utils]
+

S

+s [in ABS.abs_defs]
+sig_sind [in ABS.abs_defs]
+sig_rec [in ABS.abs_defs]
+sig_ind [in ABS.abs_defs]
+sig_rect [in ABS.abs_defs]
+subG [in ABS.abs_functional_metatheory]
+

T

+typ_F_sind [in ABS.abs_defs]
+typ_F_ind [in ABS.abs_defs]
+typ_e_sind [in ABS.abs_defs]
+typ_e_ind [in ABS.abs_defs]
+t_sind [in ABS.abs_defs]
+t_rec [in ABS.abs_defs]
+t_ind [in ABS.abs_defs]
+t_rect [in ABS.abs_defs]
+T_sind [in ABS.abs_defs]
+T_rec [in ABS.abs_defs]
+T_ind [in ABS.abs_defs]
+T_rect [in ABS.abs_defs]
+

W

+well_formed [in ABS.abs_defs]
+

X

+x [in ABS.abs_defs]
+

Z

+z [in ABS.abs_defs]
+


+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Global IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(170 entries)
Notation IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(4 entries)
Module IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(3 entries)
Variable IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(9 entries)
Library IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(4 entries)
Lemma IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(64 entries)
Constructor IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(19 entries)
Inductive IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(9 entries)
Section IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(4 entries)
Definition IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(54 entries)
+
+ +
+ + + diff --git a/docs/coqdoc/toc.html b/docs/coqdoc/toc.html new file mode 100644 index 0000000..3510c38 --- /dev/null +++ b/docs/coqdoc/toc.html @@ -0,0 +1,48 @@ + + + + + + + + + + + + + +
+
+ +
+ +
+ + + diff --git a/docs/report/main.pdf b/docs/report/main.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a593dc2805a8eecd07c27c52a9c472cdc2a584a8 GIT binary patch literal 167718 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

b1ap%^9zQi!=5$|C#X(-RZnf9q%hQF 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

+(F4}_g|N1e?387`IrS%<; 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
gp)Y`O#Fas>uQkBWw`iZ+1OG~ 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..ea08b09 --- /dev/null +++ b/index.html @@ -0,0 +1,42 @@ + + + + + + + ABS Metatheory + + + + + + + + +

+

ABS Metatheory

+
+ +

About

+

Welcome to the ABS Metatheory project website!

+

Formal metatheory in Coq for the ABS language.

+

Documentation

+ +

Help and contact

+ + +