diff --git a/.gitignore b/.gitignore index fcb275d..4633a6a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ /*.vo /*.glob /.*.aux +/*.v.d +CoqSrc.mk +_CoqProject diff --git a/AssocList.v b/AssocList.v index e010dba..25946ba 100644 --- a/AssocList.v +++ b/AssocList.v @@ -20,9 +20,9 @@ Require Import Coq.FSets.FSets. Require Import Coq.Lists.List. Require Import Coq.Logic.Decidable. -Require Import CoqFSetDecide. -Require Import CoqListFacts. -Require Import LibTactics. +Require Import Metalib.CoqFSetDecide. +Require Import Metalib.CoqListFacts. +Require Import Metalib.LibTactics. (* *********************************************************************** *) @@ -635,7 +635,7 @@ Section BindsProperties. binds x a (y ~ b) -> x = y. Proof. - clear. intros H. inversion H as [HEq | HIn]. + clear. intros H. inversion H as [HEq | HIn]. inversion HEq; intuition. inversion HIn. Qed. diff --git a/AssumeList.v b/AssumeList.v index 50bbb54..bdfd64e 100644 --- a/AssumeList.v +++ b/AssumeList.v @@ -14,13 +14,13 @@ Require Import Coq.FSets.FSets. Require Import Coq.Lists.List. Require Import Coq.Logic.Decidable. -Require Import CoqFSetDecide. -Require Import CoqListFacts. -Require Import LibTactics. +Require Import Metalib.CoqFSetDecide. +Require Import Metalib.CoqListFacts. +Require Import Metalib.LibTactics. -Require Import MetatheoryAtom. +Require Import Metalib.MetatheoryAtom. Import AtomSetImpl. -Require Import LibTactics. +Require Import Metalib.LibTactics. (* *********************************************************************** *) @@ -65,7 +65,7 @@ Require Import LibTactics. . Definition map (f1 : A -> A) (f2: B -> B) (E : list (asn A B)) : list (asn A B) := - List.map (fun x => match x with + List.map (fun x => match x with | VarAsn _ x a => VarAsn B x (f1 a) | AltAsn _ b => AltAsn A (f2 b) end) E. @@ -96,17 +96,17 @@ Require Import LibTactics. uniq E -> x `notin` dom E -> uniq ((x ~~ a) ++ E) - | uniq_alt : forall b E, - uniq E -> + | uniq_alt : forall b E, + uniq E -> uniq (one (AltAsn A b) ++ E). Fixpoint erase (E : list (asn A B)) : list B := - match E with + match E with | nil => nil | (AltAsn _ b) :: E => b :: erase E - | (VarAsn _ x a) :: E => erase E + | (VarAsn _ x a) :: E => erase E end. - + Unset Implicit Arguments. End Definitions. @@ -462,7 +462,7 @@ Require Import LibTactics. uniq (E ++ F) -> uniq E. Proof. clear. intros H; induction E as [ | a E']; simpl_asnlist in *. - apply uniq_nil. + apply uniq_nil. destruct a. apply uniq_push; inversion H; subst. auto. @@ -507,7 +507,7 @@ Require Import LibTactics. intuition. rewrite disjoint_one_l in Hd. simpl_asnlist. fsetdec. apply uniq_alt. - inversion HE; subst. + inversion HE; subst. intuition. Qed. @@ -870,9 +870,9 @@ Require Import LibTactics. unfold binds in *. simpl. intros [? | ?]. destruct a0. inversion H; subst. - left. congruence. + left. congruence. inversion H. - destruct a0. + destruct a0. right. auto. right. auto. Qed. @@ -889,8 +889,8 @@ Require Import LibTactics. clear. induction E as [ | y ? F ]; intros J; simpl_asnlist. analyze_binds J. analyze_binds J; subst; auto with set. - inversion H0;subst. simpl. fsetdec. - inversion H. + inversion H0;subst. simpl. fsetdec. + inversion H. Qed. Lemma fresh_app_l : @@ -917,4 +917,3 @@ Require Import LibTactics. - \ No newline at end of file diff --git a/Attic/MetatheoryEnv.v b/Attic/MetatheoryEnv.v index 5085597..b2214ab 100644 --- a/Attic/MetatheoryEnv.v +++ b/Attic/MetatheoryEnv.v @@ -19,13 +19,13 @@ Require Import Coq.FSets.FSets. Require Import Coq.Lists.List. Require Import Coq.Logic.Decidable. -Require Import CoqFSetDecide. -Require Import CoqListFacts. +Require Import Metalib.CoqFSetDecide. +Require Import Metalib.CoqListFacts. -Require Import AssocList. -Require Import MetatheoryAtom. +Require Import Metalib.AssocList. +Require Import Metalib.MetatheoryAtom. Import AtomSetImpl. -Require Import LibTactics. +Require Import Metalib.LibTactics. (* *********************************************************************** *) diff --git a/Attic/MyAssumeList.v b/Attic/MyAssumeList.v index 8f10ea0..8fa9514 100644 --- a/Attic/MyAssumeList.v +++ b/Attic/MyAssumeList.v @@ -126,6 +126,8 @@ Open Scope list_scope. (** [dom] computes the domain of an assumption list, i.e., the set consisting of its keys. *) +(* FIXME: commented out by simplicity, but the code should be fixed *) +(* Fixpoint dom (A B : Type) (E : list (asn A B)) : KeySet.t := @@ -1552,4 +1554,7 @@ Hint Resolve @binds_weaken. Hint Immediate @binds_remove_mid @binds_In. +*) + End Make. + diff --git a/CoqListFacts.v b/CoqListFacts.v index 06e2be9..e3f0d72 100644 --- a/CoqListFacts.v +++ b/CoqListFacts.v @@ -10,7 +10,7 @@ Require Import Coq.Lists.List. Require Import Coq.Lists.SetoidList. -Require Import CoqUniquenessTac. +Require Import Metalib.CoqUniquenessTac. Open Scope list_scope. @@ -126,7 +126,7 @@ Qed. Lemma InA_iff_In : forall (A : Type) (x : A) (xs : list A), InA (@eq _) x xs <-> In x xs. -Proof. +Proof. split; auto using InA_In. apply SetoidList.In_InA. apply eq_equivalence. Qed. @@ -230,7 +230,7 @@ Section Uniqueness_Of_SetoidList_Proofs. Theorem lelistA_unique : forall (x : A) (xs : list A) (p q : lelistA R x xs), p = q. - Proof. induction p using lelistA_ind'; uniqueness 1. Qed. + Proof. induction p using lelistA_ind'; uniqueness 1. Qed. Theorem sort_unique : forall (xs : list A) (p q : sort R xs), p = q. @@ -238,6 +238,6 @@ Section Uniqueness_Of_SetoidList_Proofs. Theorem eqlistA_unique : forall (xs ys : list A) (p q : eqlistA R xs ys), p = q. - Proof. induction p using eqlistA_ind'; uniqueness 2. Qed. + Proof. induction p using eqlistA_ind'; uniqueness 2. Qed. End Uniqueness_Of_SetoidList_Proofs. diff --git a/CoqUniquenessTacEx.v b/CoqUniquenessTacEx.v index f8e0f2f..0ebe7d4 100644 --- a/CoqUniquenessTacEx.v +++ b/CoqUniquenessTacEx.v @@ -9,7 +9,7 @@ Require Import Coq.Arith.Peano_dec. Require Import Coq.Lists.SetoidList. Require Import Coq.omega.Omega. -Require Import CoqUniquenessTac. +Require Import Metalib.CoqUniquenessTac. (* *********************************************************************** *) @@ -31,8 +31,8 @@ Proof. induction p using le_ind'; uniqueness 1; assert False by omega; intuition. - -Qed. + +Qed. (* ********************************************************************** *) @@ -64,7 +64,7 @@ Section Uniqueness_Of_SetoidList_Proofs. Theorem eqlistA_unique : forall (xs ys : list A) (p q : eqlistA R xs ys), p = q. - Proof. induction p using eqlistA_ind'; uniqueness 2. Qed. + Proof. induction p using eqlistA_ind'; uniqueness 2. Qed. End Uniqueness_Of_SetoidList_Proofs. diff --git a/FSetExtra.v b/FSetExtra.v index 6ffa783..eb998a6 100644 --- a/FSetExtra.v +++ b/FSetExtra.v @@ -8,7 +8,7 @@ Require Import Coq.FSets.FSets. -Require Import CoqFSetInterface. +Require Import Metalib.CoqFSetInterface. (* *********************************************************************** *) diff --git a/FSetWeakNotin.v b/FSetWeakNotin.v index 33a20ad..1fbd5bf 100644 --- a/FSetWeakNotin.v +++ b/FSetWeakNotin.v @@ -14,7 +14,7 @@ Require Import Coq.FSets.FSetInterface. -Require Import CoqFSetDecide. +Require Import Metalib.CoqFSetDecide. (* *********************************************************************** *) diff --git a/Fsub_LetSum_Definitions.v b/Fsub_LetSum_Definitions.v index d7524d2..8bb73f9 100644 --- a/Fsub_LetSum_Definitions.v +++ b/Fsub_LetSum_Definitions.v @@ -16,7 +16,7 @@ - #Automation# *) -Require Export Metatheory. +Require Export Metalib.Metatheory. (* ********************************************************************** *) diff --git a/Fsub_LetSum_Infrastructure.v b/Fsub_LetSum_Infrastructure.v index 5d50d62..1e7f302 100644 --- a/Fsub_LetSum_Infrastructure.v +++ b/Fsub_LetSum_Infrastructure.v @@ -19,7 +19,7 @@ - #Automation# - #Properties of body_e# *) -Require Export Fsub_LetSum_Definitions. +Require Export Metalib.Fsub_LetSum_Definitions. (* ********************************************************************** *) diff --git a/Fsub_LetSum_Lemmas.v b/Fsub_LetSum_Lemmas.v index 55209a5..55e70b3 100644 --- a/Fsub_LetSum_Lemmas.v +++ b/Fsub_LetSum_Lemmas.v @@ -21,7 +21,7 @@ - #Regularity lemmas# - #Automation# *) -Require Export Fsub_LetSum_Infrastructure. +Require Export Metalib.Fsub_LetSum_Infrastructure. (* ********************************************************************** *) diff --git a/Fsub_LetSum_Soundness.v b/Fsub_LetSum_Soundness.v index 04f639f..c688be7 100644 --- a/Fsub_LetSum_Soundness.v +++ b/Fsub_LetSum_Soundness.v @@ -12,7 +12,7 @@ - #Preservation# - #Progress# *) -Require Export Fsub_LetSum_Lemmas. +Require Export Metalib.Fsub_LetSum_Lemmas. (* ********************************************************************** *) diff --git a/LibLNgen.v b/LibLNgen.v index 52cfa4e..170bd32 100644 --- a/LibLNgen.v +++ b/LibLNgen.v @@ -7,8 +7,8 @@ (** A library of code for supporting LNgen. *) -Require Export LibDefaultSimp. -Require Import Metatheory. +Require Export Metalib.LibDefaultSimp. +Require Import Metalib.Metatheory. Require Import Omega. diff --git a/Makefile b/Makefile index d807cdd..bafd6d7 100644 --- a/Makefile +++ b/Makefile @@ -25,6 +25,15 @@ COQC = coqc COQDEP = coqdep COQDOC = coqdoc + +## Library name used for the imports in Coq + +LIBNAME=Metalib + +## Name of the submakefile generated by coq_makefile + +COQMKFILENAME=CoqSrc.mk + ## Include directories, one per line. INCDIRS = \ @@ -35,6 +44,7 @@ INCDIRS = \ DOCDIR = doc/html ## List of files to be compiled and documented. +# TODO: should be useless once we get coq_makefile to compile the documentation as well FILES = \ AssocList \ @@ -75,10 +85,17 @@ INCFLAGS = $(foreach i, $(INCDIRS), -I $(i)) .PHONY: all clean coq dist doc documentation gens .SUFFIXES: .v .vo -all: Metatheory.vo MetatheoryAlt.vo LibLNgen.vo +all: coq # Metatheory.vo MetatheoryAlt.vo LibLNgen.vo + +#coq: $(VOFILES) +coq: $(COQMKFILENAME) + # FIXME: loose integration right now, but when the doc works we should be able to simply include the generated makefile + @$(MAKE) -f CoqSrc.mk -coq: $(VOFILES) +$(COQMKFILENAME): Makefile + { echo "-R . $(LIBNAME) " ; ls *.v ; } > _CoqProject && coq_makefile -f _CoqProject -o $(COQMKFILENAME) +# TODO: in theory, coq_makefile creates targets for documentation, so we should be able to use it instead of handwritten rules doc: +make documentation @@ -87,7 +104,8 @@ documentation: $(DOCDIR) $(VOFILES) cp -f custom.css $(DOCDIR)/coqdoc.css clean: - rm -f *.vo *.glob *.cmi *.cmx *.o + #rm -f *.vo *.glob *.cmi *.cmx *.o + @$(MAKE) -f CoqSrc.mk clean rm -rf $(DOCDIR) ############################################################################ diff --git a/Metatheory.v b/Metatheory.v index 199c0eb..7106b1d 100644 --- a/Metatheory.v +++ b/Metatheory.v @@ -10,11 +10,11 @@ Require Export Coq.Arith.Arith. Require Export Coq.FSets.FSets. Require Export Coq.Lists.List. -Require Export AssocList. -Require Export CoqEqDec. -Require Export CoqListFacts. -Require Export LibTactics. -Require Export MetatheoryAtom. +Require Export Metalib.AssocList. +Require Export Metalib.CoqEqDec. +Require Export Metalib.CoqListFacts. +Require Export Metalib.LibTactics. +Require Export Metalib.MetatheoryAtom. (* ********************************************************************** *) @@ -292,5 +292,5 @@ Ltac apply_fresh_base H gather_vars atom_name := (* SCW added this one for list support *) Set Implicit Arguments. -Definition union_map (A:Set) (f:A -> vars) (l:list A) := +Definition union_map (A:Set) (f:A -> vars) (l:list A) := (List.fold_right (fun t acc => f t \u acc) {}) l. diff --git a/MetatheoryAlt.v b/MetatheoryAlt.v index 5b8b515..6e9cdda 100644 --- a/MetatheoryAlt.v +++ b/MetatheoryAlt.v @@ -10,13 +10,13 @@ Require Export Coq.Arith.Arith. Require Export Coq.FSets.FSets. Require Export Coq.Lists.List. -Require Export CoqEqDec. -Require Export CoqListFacts. -Require Export LibTactics. -Require Export MetatheoryAtom. +Require Export Metalib.CoqEqDec. +Require Export Metalib.CoqListFacts. +Require Export Metalib.LibTactics. +Require Export Metalib.MetatheoryAtom. (* Require Export MetatheoryEnv. *) -Require Export AssumeList. +Require Export Metalib.AssumeList. (* ********************************************************************** *) (** * Decidable equality *) @@ -94,7 +94,7 @@ Open Scope set_hs_scope. standard recursive notation for lists, e.g., the one found in the Program library of Coq's standard library. *) -(* Notation "[ x ]" := (EnvImpl.one x) : env_scope. +(* Notation "[ x ]" := (EnvImpl.one x) : env_scope. Open Scope env_scope. *) diff --git a/MetatheoryAtom.v b/MetatheoryAtom.v index 3664f90..6c48242 100644 --- a/MetatheoryAtom.v +++ b/MetatheoryAtom.v @@ -12,11 +12,11 @@ Require Import Coq.Classes.EquivDec. Require Import Coq.Lists.List. Require Import Coq.Structures.DecidableTypeEx. -Require Import CoqFSetDecide. -Require Import CoqListFacts. -Require Import FSetExtra. -Require Import FSetWeakNotin. -Require Import LibTactics. +Require Import Metalib.CoqFSetDecide. +Require Import Metalib.CoqListFacts. +Require Import Metalib.FSetExtra. +Require Import Metalib.FSetWeakNotin. +Require Import Metalib.LibTactics. Require Import Omega. diff --git a/STLC.v b/STLC.v index 8658251..36f3991 100644 --- a/STLC.v +++ b/STLC.v @@ -56,7 +56,7 @@ directory to compile the Metatheory library. *) -Require Import Metatheory. +Require Import Metalib.Metatheory. (*************************************************************************) @@ -1215,7 +1215,7 @@ Proof. induction H; intros G Eq Uniq; subst. (* FILL IN HERE (and delete "Admitted") *) Admitted. - + (** *** Example @@ -1339,7 +1339,7 @@ Lemma typing_c_subst : forall (E F : env) e u S T (z : atom), Proof. (* FILL IN HERE (and delete "Admitted") *) Admitted. - + (** *** Exercise Complete the proof of the substitution lemma stated in the form we diff --git a/STLCsol.v b/STLCsol.v index 1e15401..f89fad6 100644 --- a/STLCsol.v +++ b/STLCsol.v @@ -56,7 +56,7 @@ directory to compile the Metatheory library. *) -Require Import Metatheory. +Require Import Metalib.Metatheory. (*************************************************************************) @@ -1330,7 +1330,7 @@ Proof. apply binds_weaken. apply H0. Case "typing_abs_c". - + pick fresh x and apply typing_abs_c. rewrite_env (((x ~ T1) ++ G) ++ F ++ E). apply H0. @@ -1494,7 +1494,7 @@ Proof. subst. simpl. - + pick fresh y and apply typing_abs_c. rewrite subst_open_var_c. rewrite_env (((y ~ T1) ++ F) ++ E).