From 00c6616399433c0e38315091d109932bb7343bf9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 15 Jan 2024 15:39:00 +0000 Subject: [PATCH] Deploy to GitHub pages --- .nojekyll | 0 docs/coqdoc/ABS.abs_defs.html | 422 +++++++ .../coqdoc/ABS.abs_functional_metatheory.html | 101 ++ docs/coqdoc/config.js | 79 ++ docs/coqdoc/coqdoc.css | 197 ++++ docs/coqdoc/coqdocjs.css | 239 ++++ docs/coqdoc/coqdocjs.js | 197 ++++ docs/coqdoc/indexpage.html | 1050 +++++++++++++++++ docs/coqdoc/toc.html | 45 + docs/report/main.pdf | Bin 0 -> 71376 bytes index.html | 42 + 11 files changed, 2372 insertions(+) create mode 100644 .nojekyll create mode 100644 docs/coqdoc/ABS.abs_defs.html create mode 100644 docs/coqdoc/ABS.abs_functional_metatheory.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..8690f45 --- /dev/null +++ b/docs/coqdoc/ABS.abs_defs.html @@ -0,0 +1,422 @@ + + + + + + + + + + + + + +
+
+
+(* 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 Import FMapList OrderedTypeEx.
+Module Map <: FMapInterface.S := FMapList.Make String_as_OT.
+ +
+Hint Resolve bool_dec : ott_coq_equality.
+Hint Resolve ascii_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 N : Set := string. (*r uninterpreted type name *)
+Lemma eq_N: forall (x y : N), {x = y} + {x <> y}.
+Proof.
+  decide equality; auto with ott_coq_equality arith.
+Defined.
+Hint Resolve eq_N : ott_coq_equality.
+Definition D : Set := string. (*r data type name *)
+Lemma eq_D: forall (x y : D), {x = y} + {x <> y}.
+Proof.
+  decide equality; auto with ott_coq_equality arith.
+Defined.
+Hint Resolve eq_D : ott_coq_equality.
+Definition Co : Set := string. (*r data type constructor name *)
+Lemma eq_Co: forall (x y : Co), {x = y} + {x <> y}.
+Proof.
+  decide equality; auto with ott_coq_equality arith.
+Defined.
+Hint Resolve eq_Co : 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.
+ +
+Inductive B : Set := (*r basic type *)
+ | B_bool : B
+ | B_int : B.
+ +
+Inductive T : Set := (*r ground type *)
+ | T_basic_type (B5:B)
+ | T_d (D5:D)
+ | T_d_param (D5:D) (_:list T).
+ +
+Inductive A : Set := (*r type *)
+ | A_name (N5:N)
+ | A_type (T5:T)
+ | A_type_param (D5:D) (_:list A).
+ +
+Inductive t : Set := (*r term *)
+ | term_co (Co5:Co)
+ | term_co_param (Co5:Co) (_:list t)
+ | term_null : t.
+ +
+Definition b : Set := bool.
+ +
+Inductive sig : Set :=
+ | sig_sig (_:list A) (A_5:A).
+ +
+Inductive e : Set := (*r expression *)
+ | e_b (b5:b) (*r boolean expression *)
+ | e_var (x5:x) (*r variable *)
+ | e_term (t5:t) (*r ground term *)
+ | e_co (Co5:Co) (*r constructor *)
+ | e_co_param (Co5:Co) (_:list e) (*r constructor with parameters *)
+ | e_fn_call (fn5:fn) (_:list e) (*r function call *).
+ +
+Inductive Cons : Set := (*r constructor *)
+ | Cons_co (Co5:Co)
+ | Cons_co_param (Co5:Co) (_:list A).
+ +
+Inductive ctxv : Set :=
+ | ctxv_A (A5:A)
+ | ctxv_sig (sig5:sig).
+ +
+Inductive F : Set := (*r function definition *)
+ | F_fn (A_5:A) (fn5:fn) (_:list (A*x)) (e5:e)
+ | F_fn_param (A_5:A) (fn5:fn) (_:list N) (_:list (A*x)) (e5:e).
+ +
+Definition tsubst : Type := Map.t t.
+ +
+Inductive Dd : Set := (*r datatype definition *)
+ | Dd_consl (D5:D) (_:list Cons)
+ | Dd_consl_param (D5:D) (_:list N) (_:list Cons).
+ +
+Definition G : Type := Map.t ctxv.
+ +
+Definition nsubst : Type := Map.t A.
+ +
+Definition xsubst : Type := Map.t x.
+
+ +
+induction principles +
+
+Section T_rect.
+ +
+Variables
+  (P_T : T -> Prop)
+  (P_list_T : list T -> Prop).
+ +
+Hypothesis
+  (H_T_basic_type : forall (B5:B), P_T (T_basic_type B5))
+  (H_T_d : forall (D5:D), P_T (T_d D5))
+  (H_T_d_param : forall (T_list:list T), P_list_T T_list -> forall (D5:D), P_T (T_d_param D5 T_list))
+  (H_list_T_nil : P_list_T nil)
+  (H_list_T_cons : forall (T0:T), P_T T0 -> forall (T_l:list T), P_list_T T_l -> P_list_T (cons T0 T_l)).
+ +
+Fixpoint T_ott_ind (n:T) : P_T n :=
+  match n as x return P_T x with
+  | (T_basic_type B5) => H_T_basic_type B5
+  | (T_d D5) => H_T_d D5
+  | (T_d_param D5 T_list) => H_T_d_param T_list (((fix T_list_ott_ind (T_l:list T) : P_list_T T_l := match T_l as x return P_list_T x with nil => H_list_T_nil | cons T1 xl => H_list_T_cons T1(T_ott_ind T1)xl (T_list_ott_ind xl) end)) T_list) D5
+end.
+ +
+End T_rect.
+ +
+Section A_rect.
+ +
+Variables
+  (P_A : A -> Prop)
+  (P_list_A : list A -> Prop).
+ +
+Hypothesis
+  (H_A_name : forall (N5:N), P_A (A_name N5))
+  (H_A_type : forall (T5:T), P_A (A_type T5))
+  (H_A_type_param : forall (A_list:list A), P_list_A A_list -> forall (D5:D), P_A (A_type_param D5 A_list))
+  (H_list_A_nil : P_list_A nil)
+  (H_list_A_cons : forall (A0:A), P_A A0 -> forall (A_l:list A), P_list_A A_l -> P_list_A (cons A0 A_l)).
+ +
+Fixpoint A_ott_ind (n:A) : P_A n :=
+  match n as x return P_A x with
+  | (A_name N5) => H_A_name N5
+  | (A_type T5) => H_A_type T5
+  | (A_type_param D5 A_list) => H_A_type_param A_list (((fix A_list_ott_ind (A_l:list A) : P_list_A A_l := match A_l as x return P_list_A x with nil => H_list_A_nil | cons A1 xl => H_list_A_cons A1(A_ott_ind A1)xl (A_list_ott_ind xl) end)) A_list) D5
+end.
+ +
+End A_rect.
+ +
+Section e_rect.
+ +
+Variables
+  (P_e : e -> Prop)
+  (P_list_e : list e -> Prop).
+ +
+Hypothesis
+  (H_e_b : forall (b5:b), P_e (e_b b5))
+  (H_e_var : forall (x5:x), P_e (e_var x5))
+  (H_e_term : forall (t5:t), P_e (e_term t5))
+  (H_e_co : forall (Co5:Co), P_e (e_co Co5))
+  (H_e_co_param : forall (e_list:list e), P_list_e e_list -> forall (Co5:Co), P_e (e_co_param Co5 e_list))
+  (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_b b5) => H_e_b b5
+  | (e_var x5) => H_e_var x5
+  | (e_term t5) => H_e_term t5
+  | (e_co Co5) => H_e_co Co5
+  | (e_co_param Co5 e_list) => H_e_co_param 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) Co5
+  | (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 e2 xl => H_list_e_cons e2(e_ott_ind e2)xl (e_list_ott_ind xl) end)) e_list) fn5
+end.
+ +
+End e_rect.
+ +
+Section t_rect.
+ +
+Variables
+  (P_t : t -> Prop)
+  (P_list_t : list t -> Prop).
+ +
+Hypothesis
+  (H_term_co : forall (Co5:Co), P_t (term_co Co5))
+  (H_term_co_param : forall (t_list:list t), P_list_t t_list -> forall (Co5:Co), P_t (term_co_param Co5 t_list))
+  (H_term_null : P_t term_null)
+  (H_list_t_nil : P_list_t nil)
+  (H_list_t_cons : forall (t0:t), P_t t0 -> forall (t_l:list t), P_list_t t_l -> P_list_t (cons t0 t_l)).
+ +
+Fixpoint t_ott_ind (n:t) : P_t n :=
+  match n as x return P_t x with
+  | (term_co Co5) => H_term_co Co5
+  | (term_co_param Co5 t_list) => H_term_co_param t_list (((fix t_list_ott_ind (t_l:list t) : P_list_t t_l := match t_l as x return P_list_t x with nil => H_list_t_nil | cons t1 xl => H_list_t_cons t1(t_ott_ind t1)xl (t_list_ott_ind xl) end)) t_list) Co5
+  | term_null => H_term_null
+end.
+ +
+End t_rect.
+ +
+Fixpoint nsubst_A (A5 : A) (nsubst5 : nsubst) : A :=
+match A5 with
+| A_name N5 as A' =>
+  match Map.find N5 nsubst5 with
+  | Some A6 => A6
+  | None => A'
+  end
+| A_type T5 as A' => A'
+| A_type_param D5 l => A_type_param D5 (map (fun A5 => nsubst_A A5 nsubst5) l)
+end.
+ +
+Definition nsubst_A_list (A_list : list A) (nsubst5 : nsubst) : list A :=
+map (fun A5 => nsubst_A A5 nsubst5) A_list.
+ +
+Fixpoint xsubst_e (e5 : e) (xsubst5 : xsubst) : e :=
+match e5 with
+| e_b _ as e' => e'
+| e_var x' as e' =>
+  match Map.find x' xsubst5 with
+  | Some y5 => e_var y5
+  | None => e'
+  end
+| e_term _ as e' => e'
+| e_co _ as e' => e'
+| e_co_param Co5 l => e_co_param Co5 (map (fun e' => xsubst_e e' xsubst5) l)
+| e_fn_call fn5 l => e_fn_call fn5 (map (fun e' => xsubst_e e' xsubst5) l)
+end.
+ +
+Fixpoint vars_e (e5 : e) : list x :=
+match e5 with
+| e_b _ => nil
+| e_var x' => x' :: nil
+| e_term _ => nil
+| e_co _ => nil
+| e_co_param _ l => fold_right (fun e' l' => vars_e e' ++ l') nil l
+| e_fn_call _ l => fold_right (fun e' l' => vars_e e' ++ l') nil l
+end.
+ +
+
+ +
+definitions +
+
+ +
+(* defns functional_well_formedness *)
+Inductive t_e : G -> e -> A -> Prop := (* defn e *)
+ | t_bool : forall (G5:G) (b5:b),
+     t_e G5 (e_b b5) (A_type (T_basic_type B_bool))
+ | t_null : forall (G5:G) (A5:A),
+     t_e G5 (e_term term_null) A5
+ | t_var : forall (G5:G) (x5:x) (A5:A),
+      (Map.find x5 G5 = Some (ctxv_A A5 )) ->
+     t_e G5 (e_var x5) A5
+ | t_func_expr : forall (e_A'_list:list (e*A)) (A_list:list A) (G5:G) (fn5:fn) (A_5:A) (nsubst5:nsubst),
+      (nsubst_A_list A_list nsubst5 = (map (fun (pat_:(e*A)) => match pat_ with (e_,A'_) => A'_ end ) e_A'_list) ) ->
+     (forall e_ A'_, In (e_,A'_) (map (fun (pat_: (e*A)) => match pat_ with (e_,A'_) => (e_,A'_) end) e_A'_list) -> (t_e G5 e_ A'_)) ->
+      (Map.find fn5 G5 = Some (ctxv_sig (sig_sig A_list A_5) )) ->
+     t_e G5 (e_fn_call fn5 (map (fun (pat_:(e*A)) => match pat_ with (e_,A'_) => e_ end ) e_A'_list)) (nsubst_A A_5 nsubst5 )
+ | t_cons_expr : forall (e_A'_list:list (e*A)) (A_list:list A) (G5:G) (Co5:Co) (D5:D) (nsubst5:nsubst),
+      (nsubst_A_list A_list nsubst5 = (map (fun (pat_:(e*A)) => match pat_ with (e_,A'_) => A'_ end ) e_A'_list) ) ->
+     (forall e_ A'_, In (e_,A'_) (map (fun (pat_: (e*A)) => match pat_ with (e_,A'_) => (e_,A'_) end) e_A'_list) -> (t_e G5 e_ A'_)) ->
+      (Map.find Co5 G5 = Some (ctxv_sig (sig_sig A_list (A_type (T_d D5))) )) ->
+     t_e G5 (e_co_param Co5 (map (fun (pat_:(e*A)) => match pat_ with (e_,A'_) => e_ end ) e_A'_list)) (A_type (T_d D5))
+ | t_cons_expr_param : forall (e_A'_list:list (e*A)) (A_list:list A) (N_list:list N) (G5:G) (Co5:Co) (D5:D) (nsubst5:nsubst),
+      (nsubst_A_list A_list nsubst5 = (map (fun (pat_:(e*A)) => match pat_ with (e_,A'_) => A'_ end ) e_A'_list) ) ->
+     (forall e_ A'_, In (e_,A'_) (map (fun (pat_: (e*A)) => match pat_ with (e_,A'_) => (e_,A'_) end) e_A'_list) -> (t_e G5 e_ A'_)) ->
+      (Map.find Co5 G5 = Some (ctxv_sig (sig_sig A_list (A_type_param D5 (map (fun (N_:N) => (A_name N_)) N_list))) )) ->
+     t_e G5 (e_co_param Co5 (map (fun (pat_:(e*A)) => match pat_ with (e_,A'_) => e_ end ) e_A'_list)) (nsubst_A (A_type_param D5 (map (fun (N_:N) => (A_name N_)) N_list)) nsubst5 )
+with t_cons : G -> Cons -> A -> Prop := (* defn cons *)
+ | t_cons_decl : forall (A_list:list A) (G5:G) (Co5:Co) (D5:D),
+      (Map.find Co5 G5 = Some (ctxv_sig (sig_sig A_list (A_type (T_d D5))) )) ->
+     t_cons G5 (Cons_co_param Co5 A_list) (A_type (T_d D5))
+ | t_cons_decl_param : forall (N_list:list N) (A_list:list A) (G5:G) (Co5:Co) (D5:D),
+      (Map.find Co5 G5 = Some (ctxv_sig (sig_sig A_list (A_type_param D5 (map (fun (N_:N) => (A_name N_)) N_list))) )) ->
+     t_cons G5 (Cons_co_param Co5 A_list) (A_type_param D5 (map (fun (N_:N) => (A_name N_)) N_list))
+with t_dd : G -> Dd -> Prop := (* defn dd *)
+ | t_data_decl : forall (Cons_list:list Cons) (G5:G) (D5:D),
+     (forall Cons_, In (Cons_) (map (fun (Cons_ : Cons) => (Cons_)) Cons_list) -> (t_cons G5 Cons_ (A_type (T_d D5)))) ->
+     t_dd G5 (Dd_consl D5 Cons_list)
+ | t_data_decl_param : forall (Cons_list:list Cons) (N_list:list N) (G5:G) (D5:D),
+     (forall Cons_, In (Cons_) (map (fun (Cons_ : Cons) => (Cons_)) Cons_list) -> (t_cons G5 Cons_ (A_type_param D5 (map (fun (N_:N) => (A_name N_)) N_list)))) ->
+     t_dd G5 (Dd_consl_param D5 N_list Cons_list)
+with t_F : G -> F -> Prop := (* defn F *)
+ | t_func_decl : forall (A_x_list:list (A*x)) (G5:G) (A_5:A) (fn5:fn) (e5:e),
+      (Map.find fn5 G5 = Some (ctxv_sig (sig_sig (map (fun (pat_:(A*x)) => match pat_ with (A_,x_) => A_ end ) A_x_list) A_5) )) ->
+     t_e (fold_right (fun (ax : x * A) (G5 : G) => Map.add (fst ax) (ctxv_A (snd ax)) G5) G5 (map (fun (pat_:(A*x)) => match pat_ with (A_,x_) => (x_,A_) end ) A_x_list) ) e5 A_5 ->
+     t_F G5 (F_fn A_5 fn5 A_x_list e5)
+ | t_func_decl_param : forall (A_x_list:list (A*x)) (N_list:list N) (G5:G) (A_5:A) (fn5:fn) (e5:e),
+      (Map.find fn5 G5 = Some (ctxv_sig (sig_sig (map (fun (pat_:(A*x)) => match pat_ with (A_,x_) => A_ end ) A_x_list) A_5) )) ->
+     t_e (fold_right (fun (ax : x * A) (G5 : G) => Map.add (fst ax) (ctxv_A (snd ax)) G5) G5 (map (fun (pat_:(A*x)) => match pat_ with (A_,x_) => (x_,A_) end ) A_x_list) ) e5 A_5 ->
+     t_F G5 (F_fn_param A_5 fn5 N_list A_x_list e5)
+with t_tsubst : G -> tsubst -> Prop := (* defn tsubst *)
+ | t_tsubst_wt : forall (G5:G) (tsubst5:tsubst),
+      (forall (x5 : x) (t5 : t) (A5 : A), Map.find x5 tsubst5 = Some t5 -> Map.find x5 G5 = Some (ctxv_A A5) -> t_e G5 (e_term t5) A5) ->
+     t_tsubst G5 tsubst5.
+
+ +
+definitions +
+
+ +
+(* defns functional_evaluation *)
+Inductive red_tsubst_e : list F -> tsubst -> e -> tsubst -> e -> Prop := (* defn tsubst_e *)
+ | red_var : forall (F_list:list F) (tsubst5:tsubst) (x5:x) (t5:t),
+      (Map.find x5 tsubst5 = Some t5 ) ->
+     red_tsubst_e F_list tsubst5 (e_var x5) tsubst5 (e_term t5)
+ | red_cons : forall (e'_list e_list:list e) (F_list:list F) (tsubst5:tsubst) (Co5:Co) (e_5:e) (tsubst':tsubst) (e':e),
+     red_tsubst_e F_list tsubst5 e_5 tsubst' e' ->
+     red_tsubst_e F_list tsubst5 (e_co_param Co5 ((app e_list (app (cons e_5 nil) (app e'_list nil))))) tsubst' (e_co_param Co5 ((app e_list (app (cons e' nil) (app e'_list nil)))))
+ | red_fun_exp : forall (e'_list e_list:list e) (F_list:list F) (tsubst5:tsubst) (fn5:fn) (e_5:e) (tsubst':tsubst) (e':e),
+     red_tsubst_e F_list tsubst5 e_5 tsubst' e' ->
+     red_tsubst_e F_list tsubst5 (e_fn_call fn5 ((app e_list (app (cons e_5 nil) (app e'_list nil))))) tsubst' (e_fn_call fn5 ((app e_list (app (cons e' nil) (app e'_list nil)))))
+ | red_fun_ground : forall (A_x_t_y_list:list (A*x*t*x)) (F'_list F_list:list F) (A_5:A) (fn5:fn) (e5:e) (tsubst5:tsubst),
+      (forall y5, In y5 (map (fun (pat_:(A*x*t*x)) => match pat_ with (A_,x_,t_,y_) => y_ end ) A_x_t_y_list) -> ~ In y5 (vars_e e5 )) ->
+     red_tsubst_e ((app F_list (app (cons (F_fn A_5 fn5 (map (fun (pat_:(A*x*t*x)) => match pat_ with (A_,x_,t_,y_) => (A_,x_) end ) A_x_t_y_list) e5) nil) (app F'_list nil)))) tsubst5 (e_fn_call fn5 (map (fun (pat_:(A*x*t*x)) => match pat_ with (A_,x_,t_,y_) => (e_term t_) end ) A_x_t_y_list)) (fold_right (fun (xt : x * t) (tsubst5 : tsubst) => Map.add (fst xt) (snd xt) tsubst5) tsubst5 (map (fun (pat_:(A*x*t*x)) => match pat_ with (A_,x_,t_,y_) => (y_,t_) end ) A_x_t_y_list) ) (xsubst_e e5 (fold_right (fun (xy : x * x) (xsubst5 : xsubst) => Map.add (fst xy) (snd xy) xsubst5) (Map.empty x) (map (fun (pat_:(A*x*t*x)) => match pat_ with (A_,x_,t_,y_) => (x_,y_) end ) A_x_t_y_list) ) )
+ | red_fun_ground_param : forall (A_x_t_y_list:list (A*x*t*x)) (F'_list:list F) (F_N_list:list (F*N)) (A_5:A) (fn5:fn) (e5:e) (tsubst5:tsubst),
+      (forall y5, In y5 (map (fun (pat_:(A*x*t*x)) => match pat_ with (A_,x_,t_,y_) => y_ end ) A_x_t_y_list) -> ~ In y5 (vars_e e5 )) ->
+     red_tsubst_e ((app (map (fun (pat_:(F*N)) => match pat_ with (F_,N_) => F_ end ) F_N_list) (app (cons (F_fn_param A_5 fn5 (map (fun (pat_:(F*N)) => match pat_ with (F_,N_) => N_ end ) F_N_list) (map (fun (pat_:(A*x*t*x)) => match pat_ with (A_,x_,t_,y_) => (A_,x_) end ) A_x_t_y_list) e5) nil) (app F'_list nil)))) tsubst5 (e_fn_call fn5 (map (fun (pat_:(A*x*t*x)) => match pat_ with (A_,x_,t_,y_) => (e_term t_) end ) A_x_t_y_list)) (fold_right (fun (xt : x * t) (tsubst5 : tsubst) => Map.add (fst xt) (snd xt) tsubst5) tsubst5 (map (fun (pat_:(A*x*t*x)) => match pat_ with (A_,x_,t_,y_) => (y_,t_) end ) A_x_t_y_list) ) (xsubst_e e5 (fold_right (fun (xy : x * x) (xsubst5 : xsubst) => Map.add (fst xy) (snd xy) xsubst5) (Map.empty x) (map (fun (pat_:(A*x*t*x)) => match pat_ with (A_,x_,t_,y_) => (x_,y_) end ) A_x_t_y_list) ) ) .
+ +
+
+
+ +
+ + + diff --git a/docs/coqdoc/ABS.abs_functional_metatheory.html b/docs/coqdoc/ABS.abs_functional_metatheory.html new file mode 100644 index 0000000..a112090 --- /dev/null +++ b/docs/coqdoc/ABS.abs_functional_metatheory.html @@ -0,0 +1,101 @@ + + + + + + + + + + + + + +
+
+
+From ABS Require Import abs_defs.
+From Coq Require Import List ssreflect.
+Import ListNotations.
+ +
+
+ +
+

ABS Functional Metatheory

+ +
+
+ +
+Definition subG (G5 G' : G) : Prop :=
+  forall (key : string) (elt : ctxv),
+    Map.find key G5 = Some elt ->
+    Map.find key G' = Some elt.
+ +
+Lemma type_preservation_var_aux : forall (G5 : G) (tsubst5 : tsubst) (x5 : x) (t5 : t) (A5 : A),
+  t_e G5 (e_var x5) A5 ->
+  t_tsubst G5 tsubst5 ->
+  Map.find x5 tsubst5 = Some t5 ->
+  t_e G5 (e_term t5) A5.
+Proof.
+move => G5 tsubst5 x5 t5 A5 H_t_e H_ts H_find.
+inversion H_ts; subst.
+apply (H _ _ A5) in H_find => //.
+by inversion H_t_e; subst.
+Qed.
+ +
+Lemma type_preservation_var : forall (G5 : G) (tsubst5 : tsubst) (x5 : x) (t5 : t) (A5 : A),
+  t_e G5 (e_var x5) A5 ->
+  t_tsubst G5 tsubst5 ->
+  Map.find (elt:=t) x5 tsubst5 = Some t5 ->
+  exists G' : G, subG G5 G' /\ t_tsubst G' tsubst5 /\ t_e G' (e_term t5) A5.
+Proof.
+move => G5 tsubst5 x5 t5 A5 H_t_e H_ts H_find.
+exists G5; split => //; split => //.
+move: H_t_e H_ts H_find.
+exact: type_preservation_var_aux.
+Qed.
+ +
+Lemma type_preservation_cons_aux : forall (e5 : e) (e_list : list e) (G5 : G) (Co6 : Co) (A5 : A),
+  In e5 e_list ->
+  t_e G5 (e_co_param Co6 e_list) A5 ->
+  exists A', t_e G5 e5 A'.
+Proof.
+Admitted.
+ +
+Lemma type_preservation : forall (G5 : G) (tsubst5 : tsubst),
+  t_tsubst G5 tsubst5 ->
+  forall (Flist : list F) (e5 : e) (A5 : A) (tsubst' : tsubst) (e' : e),
+    t_e G5 e5 A5 ->
+    red_tsubst_e Flist tsubst5 e5 tsubst' e' ->
+    exists G', subG G5 G' /\ t_tsubst G' tsubst' /\ t_e G' e' A5.
+Proof.
+Admitted.
+ +
+
+
+ +
+ + + 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..538826e --- /dev/null +++ b/docs/coqdoc/indexpage.html @@ -0,0 +1,1050 @@ + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Global IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(180 entries)
Module IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(1 entry)
Variable IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(31 entries)
Library IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(2 entries)
Constructor IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(44 entries)
Lemma IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(10 entries)
Inductive IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(16 entries)
Section IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(4 entries)
Definition IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(72 entries)
+
+

Global Index

+

A

+A [inductive, in ABS.abs_defs]
+abs_functional_metatheory [library]
+abs_defs [library]
+A_ott_ind [definition, in ABS.abs_defs]
+A_rect.H_list_A_cons [variable, in ABS.abs_defs]
+A_rect.H_list_A_nil [variable, in ABS.abs_defs]
+A_rect.H_A_type_param [variable, in ABS.abs_defs]
+A_rect.H_A_type [variable, in ABS.abs_defs]
+A_rect.H_A_name [variable, in ABS.abs_defs]
+A_rect.P_list_A [variable, in ABS.abs_defs]
+A_rect.P_A [variable, in ABS.abs_defs]
+A_rect [section, in ABS.abs_defs]
+A_sind [definition, in ABS.abs_defs]
+A_rec [definition, in ABS.abs_defs]
+A_ind [definition, in ABS.abs_defs]
+A_rect [definition, in ABS.abs_defs]
+A_type_param [constructor, in ABS.abs_defs]
+A_type [constructor, in ABS.abs_defs]
+A_name [constructor, in ABS.abs_defs]
+

B

+b [definition, in ABS.abs_defs]
+B [inductive, in ABS.abs_defs]
+B_sind [definition, in ABS.abs_defs]
+B_rec [definition, in ABS.abs_defs]
+B_ind [definition, in ABS.abs_defs]
+B_rect [definition, in ABS.abs_defs]
+B_int [constructor, in ABS.abs_defs]
+B_bool [constructor, in ABS.abs_defs]
+

C

+Co [definition, in ABS.abs_defs]
+Cons [inductive, in ABS.abs_defs]
+Cons_sind [definition, in ABS.abs_defs]
+Cons_rec [definition, in ABS.abs_defs]
+Cons_ind [definition, in ABS.abs_defs]
+Cons_rect [definition, in ABS.abs_defs]
+Cons_co_param [constructor, in ABS.abs_defs]
+Cons_co [constructor, in ABS.abs_defs]
+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_A [constructor, in ABS.abs_defs]
+

D

+D [definition, in ABS.abs_defs]
+Dd [inductive, in ABS.abs_defs]
+Dd_sind [definition, in ABS.abs_defs]
+Dd_rec [definition, in ABS.abs_defs]
+Dd_ind [definition, in ABS.abs_defs]
+Dd_rect [definition, in ABS.abs_defs]
+Dd_consl_param [constructor, in ABS.abs_defs]
+Dd_consl [constructor, in ABS.abs_defs]
+

E

+e [inductive, in ABS.abs_defs]
+eq_x [lemma, in ABS.abs_defs]
+eq_fn [lemma, in ABS.abs_defs]
+eq_Co [lemma, in ABS.abs_defs]
+eq_D [lemma, in ABS.abs_defs]
+eq_N [lemma, in ABS.abs_defs]
+eq_i [lemma, 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_co_param [variable, in ABS.abs_defs]
+e_rect.H_e_co [variable, in ABS.abs_defs]
+e_rect.H_e_term [variable, in ABS.abs_defs]
+e_rect.H_e_var [variable, in ABS.abs_defs]
+e_rect.H_e_b [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_co_param [constructor, in ABS.abs_defs]
+e_co [constructor, in ABS.abs_defs]
+e_term [constructor, in ABS.abs_defs]
+e_var [constructor, in ABS.abs_defs]
+e_b [constructor, in ABS.abs_defs]
+

F

+F [inductive, in ABS.abs_defs]
+fn [definition, in ABS.abs_defs]
+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_param [constructor, in ABS.abs_defs]
+F_fn [constructor, in ABS.abs_defs]
+

G

+G [definition, in ABS.abs_defs]
+

I

+i [definition, in ABS.abs_defs]
+

M

+Map [module, in ABS.abs_defs]
+

N

+N [definition, in ABS.abs_defs]
+nsubst [definition, in ABS.abs_defs]
+nsubst_A_list [definition, in ABS.abs_defs]
+nsubst_A [definition, in ABS.abs_defs]
+

R

+red_tsubst_e_sind [definition, in ABS.abs_defs]
+red_tsubst_e_ind [definition, in ABS.abs_defs]
+red_fun_ground_param [constructor, in ABS.abs_defs]
+red_fun_ground [constructor, in ABS.abs_defs]
+red_fun_exp [constructor, in ABS.abs_defs]
+red_cons [constructor, in ABS.abs_defs]
+red_var [constructor, in ABS.abs_defs]
+red_tsubst_e [inductive, in ABS.abs_defs]
+

S

+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]
+subG [definition, in ABS.abs_functional_metatheory]
+

T

+t [inductive, in ABS.abs_defs]
+T [inductive, in ABS.abs_defs]
+term_null [constructor, in ABS.abs_defs]
+term_co_param [constructor, in ABS.abs_defs]
+term_co [constructor, in ABS.abs_defs]
+tsubst [definition, in ABS.abs_defs]
+type_preservation [lemma, in ABS.abs_functional_metatheory]
+type_preservation_cons_aux [lemma, in ABS.abs_functional_metatheory]
+type_preservation_var [lemma, in ABS.abs_functional_metatheory]
+type_preservation_var_aux [lemma, in ABS.abs_functional_metatheory]
+t_tsubst_sind [definition, in ABS.abs_defs]
+t_tsubst_ind [definition, in ABS.abs_defs]
+t_F_sind [definition, in ABS.abs_defs]
+t_F_ind [definition, in ABS.abs_defs]
+t_dd_sind [definition, in ABS.abs_defs]
+t_dd_ind [definition, in ABS.abs_defs]
+t_cons_sind [definition, in ABS.abs_defs]
+t_cons_ind [definition, in ABS.abs_defs]
+t_e_sind [definition, in ABS.abs_defs]
+t_e_ind [definition, in ABS.abs_defs]
+t_tsubst_wt [constructor, in ABS.abs_defs]
+t_tsubst [inductive, in ABS.abs_defs]
+t_func_decl_param [constructor, in ABS.abs_defs]
+t_func_decl [constructor, in ABS.abs_defs]
+t_F [inductive, in ABS.abs_defs]
+t_data_decl_param [constructor, in ABS.abs_defs]
+t_data_decl [constructor, in ABS.abs_defs]
+t_dd [inductive, in ABS.abs_defs]
+t_cons_decl_param [constructor, in ABS.abs_defs]
+t_cons_decl [constructor, in ABS.abs_defs]
+t_cons [inductive, in ABS.abs_defs]
+t_cons_expr_param [constructor, in ABS.abs_defs]
+t_cons_expr [constructor, in ABS.abs_defs]
+t_func_expr [constructor, in ABS.abs_defs]
+t_var [constructor, in ABS.abs_defs]
+t_null [constructor, in ABS.abs_defs]
+t_bool [constructor, in ABS.abs_defs]
+t_e [inductive, in ABS.abs_defs]
+t_ott_ind [definition, in ABS.abs_defs]
+t_rect.H_list_t_cons [variable, in ABS.abs_defs]
+t_rect.H_list_t_nil [variable, in ABS.abs_defs]
+t_rect.H_term_null [variable, in ABS.abs_defs]
+t_rect.H_term_co_param [variable, in ABS.abs_defs]
+t_rect.H_term_co [variable, in ABS.abs_defs]
+t_rect.P_list_t [variable, in ABS.abs_defs]
+t_rect.P_t [variable, in ABS.abs_defs]
+t_rect [section, in ABS.abs_defs]
+T_ott_ind [definition, in ABS.abs_defs]
+T_rect.H_list_T_cons [variable, in ABS.abs_defs]
+T_rect.H_list_T_nil [variable, in ABS.abs_defs]
+T_rect.H_T_d_param [variable, in ABS.abs_defs]
+T_rect.H_T_d [variable, in ABS.abs_defs]
+T_rect.H_T_basic_type [variable, in ABS.abs_defs]
+T_rect.P_list_T [variable, in ABS.abs_defs]
+T_rect.P_T [variable, in ABS.abs_defs]
+T_rect [section, 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_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_d_param [constructor, in ABS.abs_defs]
+T_d [constructor, in ABS.abs_defs]
+T_basic_type [constructor, in ABS.abs_defs]
+

V

+vars_e [definition, in ABS.abs_defs]
+

X

+x [definition, in ABS.abs_defs]
+xsubst [definition, in ABS.abs_defs]
+xsubst_e [definition, in ABS.abs_defs]
+


+

Module Index

+

M

+Map [in ABS.abs_defs]
+


+

Variable Index

+

A

+A_rect.H_list_A_cons [in ABS.abs_defs]
+A_rect.H_list_A_nil [in ABS.abs_defs]
+A_rect.H_A_type_param [in ABS.abs_defs]
+A_rect.H_A_type [in ABS.abs_defs]
+A_rect.H_A_name [in ABS.abs_defs]
+A_rect.P_list_A [in ABS.abs_defs]
+A_rect.P_A [in ABS.abs_defs]
+

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_co_param [in ABS.abs_defs]
+e_rect.H_e_co [in ABS.abs_defs]
+e_rect.H_e_term [in ABS.abs_defs]
+e_rect.H_e_var [in ABS.abs_defs]
+e_rect.H_e_b [in ABS.abs_defs]
+e_rect.P_list_e [in ABS.abs_defs]
+e_rect.P_e [in ABS.abs_defs]
+

T

+t_rect.H_list_t_cons [in ABS.abs_defs]
+t_rect.H_list_t_nil [in ABS.abs_defs]
+t_rect.H_term_null [in ABS.abs_defs]
+t_rect.H_term_co_param [in ABS.abs_defs]
+t_rect.H_term_co [in ABS.abs_defs]
+t_rect.P_list_t [in ABS.abs_defs]
+t_rect.P_t [in ABS.abs_defs]
+T_rect.H_list_T_cons [in ABS.abs_defs]
+T_rect.H_list_T_nil [in ABS.abs_defs]
+T_rect.H_T_d_param [in ABS.abs_defs]
+T_rect.H_T_d [in ABS.abs_defs]
+T_rect.H_T_basic_type [in ABS.abs_defs]
+T_rect.P_list_T [in ABS.abs_defs]
+T_rect.P_T [in ABS.abs_defs]
+


+

Library Index

+

A

+abs_functional_metatheory
+abs_defs
+


+

Constructor Index

+

A

+A_type_param [in ABS.abs_defs]
+A_type [in ABS.abs_defs]
+A_name [in ABS.abs_defs]
+

B

+B_int [in ABS.abs_defs]
+B_bool [in ABS.abs_defs]
+

C

+Cons_co_param [in ABS.abs_defs]
+Cons_co [in ABS.abs_defs]
+ctxv_sig [in ABS.abs_defs]
+ctxv_A [in ABS.abs_defs]
+

D

+Dd_consl_param [in ABS.abs_defs]
+Dd_consl [in ABS.abs_defs]
+

E

+e_fn_call [in ABS.abs_defs]
+e_co_param [in ABS.abs_defs]
+e_co [in ABS.abs_defs]
+e_term [in ABS.abs_defs]
+e_var [in ABS.abs_defs]
+e_b [in ABS.abs_defs]
+

F

+F_fn_param [in ABS.abs_defs]
+F_fn [in ABS.abs_defs]
+

R

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

S

+sig_sig [in ABS.abs_defs]
+

T

+term_null [in ABS.abs_defs]
+term_co_param [in ABS.abs_defs]
+term_co [in ABS.abs_defs]
+t_tsubst_wt [in ABS.abs_defs]
+t_func_decl_param [in ABS.abs_defs]
+t_func_decl [in ABS.abs_defs]
+t_data_decl_param [in ABS.abs_defs]
+t_data_decl [in ABS.abs_defs]
+t_cons_decl_param [in ABS.abs_defs]
+t_cons_decl [in ABS.abs_defs]
+t_cons_expr_param [in ABS.abs_defs]
+t_cons_expr [in ABS.abs_defs]
+t_func_expr [in ABS.abs_defs]
+t_var [in ABS.abs_defs]
+t_null [in ABS.abs_defs]
+t_bool [in ABS.abs_defs]
+T_d_param [in ABS.abs_defs]
+T_d [in ABS.abs_defs]
+T_basic_type [in ABS.abs_defs]
+


+

Lemma Index

+

E

+eq_x [in ABS.abs_defs]
+eq_fn [in ABS.abs_defs]
+eq_Co [in ABS.abs_defs]
+eq_D [in ABS.abs_defs]
+eq_N [in ABS.abs_defs]
+eq_i [in ABS.abs_defs]
+

T

+type_preservation [in ABS.abs_functional_metatheory]
+type_preservation_cons_aux [in ABS.abs_functional_metatheory]
+type_preservation_var [in ABS.abs_functional_metatheory]
+type_preservation_var_aux [in ABS.abs_functional_metatheory]
+


+

Inductive Index

+

A

+A [in ABS.abs_defs]
+

B

+B [in ABS.abs_defs]
+

C

+Cons [in ABS.abs_defs]
+ctxv [in ABS.abs_defs]
+

D

+Dd [in ABS.abs_defs]
+

E

+e [in ABS.abs_defs]
+

F

+F [in ABS.abs_defs]
+

R

+red_tsubst_e [in ABS.abs_defs]
+

S

+sig [in ABS.abs_defs]
+

T

+t [in ABS.abs_defs]
+T [in ABS.abs_defs]
+t_tsubst [in ABS.abs_defs]
+t_F [in ABS.abs_defs]
+t_dd [in ABS.abs_defs]
+t_cons [in ABS.abs_defs]
+t_e [in ABS.abs_defs]
+


+

Section Index

+

A

+A_rect [in ABS.abs_defs]
+

E

+e_rect [in ABS.abs_defs]
+

T

+t_rect [in ABS.abs_defs]
+T_rect [in ABS.abs_defs]
+


+

Definition Index

+

A

+A_ott_ind [in ABS.abs_defs]
+A_sind [in ABS.abs_defs]
+A_rec [in ABS.abs_defs]
+A_ind [in ABS.abs_defs]
+A_rect [in ABS.abs_defs]
+

B

+b [in ABS.abs_defs]
+B_sind [in ABS.abs_defs]
+B_rec [in ABS.abs_defs]
+B_ind [in ABS.abs_defs]
+B_rect [in ABS.abs_defs]
+

C

+Co [in ABS.abs_defs]
+Cons_sind [in ABS.abs_defs]
+Cons_rec [in ABS.abs_defs]
+Cons_ind [in ABS.abs_defs]
+Cons_rect [in ABS.abs_defs]
+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

+D [in ABS.abs_defs]
+Dd_sind [in ABS.abs_defs]
+Dd_rec [in ABS.abs_defs]
+Dd_ind [in ABS.abs_defs]
+Dd_rect [in ABS.abs_defs]
+

E

+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]
+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]
+

I

+i [in ABS.abs_defs]
+

N

+N [in ABS.abs_defs]
+nsubst [in ABS.abs_defs]
+nsubst_A_list [in ABS.abs_defs]
+nsubst_A [in ABS.abs_defs]
+

R

+red_tsubst_e_sind [in ABS.abs_defs]
+red_tsubst_e_ind [in ABS.abs_defs]
+

S

+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

+tsubst [in ABS.abs_defs]
+t_tsubst_sind [in ABS.abs_defs]
+t_tsubst_ind [in ABS.abs_defs]
+t_F_sind [in ABS.abs_defs]
+t_F_ind [in ABS.abs_defs]
+t_dd_sind [in ABS.abs_defs]
+t_dd_ind [in ABS.abs_defs]
+t_cons_sind [in ABS.abs_defs]
+t_cons_ind [in ABS.abs_defs]
+t_e_sind [in ABS.abs_defs]
+t_e_ind [in ABS.abs_defs]
+t_ott_ind [in ABS.abs_defs]
+T_ott_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]
+

V

+vars_e [in ABS.abs_defs]
+

X

+x [in ABS.abs_defs]
+xsubst [in ABS.abs_defs]
+xsubst_e [in ABS.abs_defs]
+


+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Global IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(180 entries)
Module IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(1 entry)
Variable IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(31 entries)
Library IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(2 entries)
Constructor IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(44 entries)
Lemma IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(10 entries)
Inductive IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(16 entries)
Section IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(4 entries)
Definition IndexABCDEFGHIJKLMNOPQRSTUVWXYZ_other(72 entries)
+
+ +
+ + + diff --git a/docs/coqdoc/toc.html b/docs/coqdoc/toc.html new file mode 100644 index 0000000..661843d --- /dev/null +++ b/docs/coqdoc/toc.html @@ -0,0 +1,45 @@ + + + + + + + + + + + + + +
+
+ +
+ +
+ + + diff --git a/docs/report/main.pdf b/docs/report/main.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a975d57b9f4c478c8bf4b32b92a552dcdb35014f GIT binary patch literal 71376 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 p`-J?@ + + + + + + ABS Metatheory + + + + + + + + +
+

ABS Metatheory

+
+ +

About

+

Welcome to the ABS Metatheory project website!

+

Formal metatheory in Coq for the ABS language.

+

Documentation

+ +

Help and contact

+ + +