From: Ferruccio Guidi Date: Sun, 11 Jan 2015 17:44:12 +0000 (+0000) Subject: we restored the scripts of \lambda\delta version 1 X-Git-Tag: make_still_working~768 X-Git-Url: http://matita.cs.unibo.it/gitweb/?p=helm.git;a=commitdiff_plain;h=7dc9dcddc88440527569d2a7216461bcd7398ab2 we restored the scripts of \lambda\delta version 1 (which are now available through \lambda\delta Web site) by merging and updating all our (not broken) scripts --- diff --git a/helm/coq-contribs/LAMBDA-TYPES/.cvsignore b/helm/coq-contribs/LAMBDA-TYPES/.cvsignore deleted file mode 100644 index 419956872..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.vo diff --git a/helm/coq-contribs/LAMBDA-TYPES/.depend b/helm/coq-contribs/LAMBDA-TYPES/.depend deleted file mode 100644 index eb03259ff..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/.depend +++ /dev/null @@ -1,68 +0,0 @@ -LambdaDelta.vo: LambdaDelta.v base_tactics.vo base_hints.vo base_types.vo base_blt.vo base_rewrite.vo Base.vo terms_defs.vo tlt_defs.vo contexts_defs.vo lift_defs.vo lift_gen.vo lift_props.vo lift_tlt.vo drop_defs.vo drop_props.vo subst0_defs.vo subst0_gen.vo subst0_lift.vo subst0_subst0.vo subst0_confluence.vo subst0_tlt.vo subst1_defs.vo subst1_gen.vo subst1_lift.vo subst1_subst1.vo subst1_confluence.vo csubst0_defs.vo csubst1_defs.vo fsubst0_defs.vo pr0_defs.vo pr0_lift.vo pr0_gen.vo pr0_subst0.vo pr0_confluence.vo pr0_subst1.vo pr1_defs.vo pr1_confluence.vo cpr0_defs.vo pr2_defs.vo pr2_lift.vo pr2_gen.vo pr2_confluence.vo pr2_subst1.vo pr2_gen_context.vo pr3_defs.vo pr3_props.vo pr3_gen.vo pr3_confluence.vo pr3_subst1.vo pr3_gen_context.vo pc1_defs.vo pc1_props.vo pc3_defs.vo pc3_props.vo pc3_gen.vo pc3_subst0.vo pc3_gen_context.vo ty0_defs.vo ty0_gen.vo ty0_lift.vo ty0_props.vo ty0_subst0.vo ty0_gen_context.vo csub0_defs.vo csub0_props.vo ty0_sred.vo ty0_sred_props.vo -ty0_sred_props.vo: ty0_sred_props.v lift_props.vo drop_props.vo pc3_props.vo pc3_gen.vo ty0_defs.vo ty0_gen.vo ty0_props.vo ty0_sred.vo -ty0_sred.vo: ty0_sred.v lift_gen.vo subst1_gen.vo csubst1_defs.vo pr0_lift.vo pr0_subst1.vo cpr0_defs.vo pc1_props.vo pc3_props.vo pc3_gen.vo ty0_defs.vo ty0_gen.vo ty0_lift.vo ty0_props.vo ty0_subst0.vo ty0_gen_context.vo csub0_defs.vo csub0_props.vo -csub0_props.vo: csub0_props.v pc3_props.vo csub0_defs.vo -csub0_defs.vo: csub0_defs.v ty0_defs.vo -ty0_gen_context.vo: ty0_gen_context.v lift_gen.vo lift_props.vo subst1_defs.vo subst1_lift.vo subst1_confluence.vo drop_props.vo csubst1_defs.vo pc3_gen.vo pc3_gen_context.vo ty0_defs.vo ty0_lift.vo -ty0_subst0.vo: ty0_subst0.v drop_props.vo csubst0_defs.vo fsubst0_defs.vo pc3_props.vo pc3_subst0.vo ty0_defs.vo ty0_gen.vo ty0_lift.vo ty0_props.vo -ty0_props.vo: ty0_props.v drop_props.vo pc3_props.vo ty0_defs.vo ty0_gen.vo ty0_lift.vo -ty0_lift.vo: ty0_lift.v lift_props.vo drop_props.vo pc3_props.vo ty0_defs.vo -ty0_gen.vo: ty0_gen.v pc3_props.vo ty0_defs.vo -ty0_defs.vo: ty0_defs.v pc3_defs.vo -pc3_gen_context.vo: pc3_gen_context.v subst1_confluence.vo csubst1_defs.vo pr3_gen_context.vo pc3_defs.vo pc3_props.vo -pc3_subst0.vo: pc3_subst0.v subst0_subst0.vo fsubst0_defs.vo pr0_subst0.vo pc3_defs.vo pc3_props.vo -pc3_gen.vo: pc3_gen.v lift_gen.vo pr3_props.vo pr3_gen.vo pc3_defs.vo pc3_props.vo -pc3_props.vo: pc3_props.v subst0_subst0.vo pr0_subst0.vo cpr0_defs.vo pr3_defs.vo pr3_props.vo pr3_confluence.vo pc3_defs.vo -pc3_defs.vo: pc3_defs.v pr2_defs.vo pr3_defs.vo pc1_defs.vo -pc1_props.vo: pc1_props.v pr1_confluence.vo pc1_defs.vo -pc1_defs.vo: pc1_defs.v pr0_defs.vo pr1_defs.vo -pr3_gen_context.vo: pr3_gen_context.v csubst1_defs.vo pr2_gen_context.vo pr3_defs.vo -pr3_subst1.vo: pr3_subst1.v subst1_defs.vo pr2_subst1.vo pr3_defs.vo -pr3_confluence.vo: pr3_confluence.v pr2_confluence.vo pr3_defs.vo -pr3_gen.vo: pr3_gen.v pr2_gen.vo pr3_defs.vo pr3_props.vo -pr3_props.vo: pr3_props.v subst0_subst0.vo pr0_subst0.vo cpr0_defs.vo pr2_lift.vo pr2_gen.vo pr3_defs.vo -pr3_defs.vo: pr3_defs.v pr1_defs.vo pr2_defs.vo -pr2_gen_context.vo: pr2_gen_context.v drop_props.vo subst1_gen.vo subst1_subst1.vo subst1_confluence.vo csubst1_defs.vo pr0_gen.vo pr0_subst1.vo pr2_defs.vo pr2_gen.vo pr2_subst1.vo -pr2_subst1.vo: pr2_subst1.v subst1_defs.vo subst1_confluence.vo drop_props.vo pr0_subst1.vo pr2_defs.vo -pr2_confluence.vo: pr2_confluence.v subst0_confluence.vo drop_props.vo pr0_subst0.vo pr0_confluence.vo pr2_defs.vo -pr2_gen.vo: pr2_gen.v subst0_gen.vo subst0_lift.vo drop_props.vo pr0_gen.vo pr0_subst0.vo pr2_defs.vo -pr2_lift.vo: pr2_lift.v subst0_lift.vo drop_props.vo pr0_lift.vo pr2_defs.vo -pr2_defs.vo: pr2_defs.v drop_defs.vo pr0_defs.vo -cpr0_defs.vo: cpr0_defs.v contexts_defs.vo drop_defs.vo pr0_defs.vo -pr1_confluence.vo: pr1_confluence.v pr0_confluence.vo pr1_defs.vo -pr1_defs.vo: pr1_defs.v pr0_defs.vo -pr0_subst1.vo: pr0_subst1.v subst1_defs.vo pr0_defs.vo pr0_subst0.vo -pr0_confluence.vo: pr0_confluence.v tlt_defs.vo lift_gen.vo lift_tlt.vo subst0_gen.vo subst0_confluence.vo pr0_defs.vo pr0_lift.vo pr0_gen.vo pr0_subst0.vo -pr0_subst0.vo: pr0_subst0.v subst0_gen.vo subst0_lift.vo subst0_subst0.vo subst0_confluence.vo pr0_defs.vo pr0_lift.vo -pr0_gen.vo: pr0_gen.v lift_gen.vo lift_props.vo subst0_gen.vo pr0_defs.vo pr0_lift.vo -pr0_lift.vo: pr0_lift.v lift_props.vo subst0_lift.vo pr0_defs.vo -pr0_defs.vo: pr0_defs.v subst0_defs.vo -fsubst0_defs.vo: fsubst0_defs.v subst0_defs.vo csubst0_defs.vo -csubst1_defs.vo: csubst1_defs.v subst1_defs.vo csubst0_defs.vo -csubst0_defs.vo: csubst0_defs.v contexts_defs.vo subst0_defs.vo drop_defs.vo -subst1_confluence.vo: subst1_confluence.v lift_gen.vo subst0_gen.vo subst0_confluence.vo subst1_defs.vo subst1_gen.vo -subst1_subst1.vo: subst1_subst1.v subst0_subst0.vo subst1_defs.vo -subst1_lift.vo: subst1_lift.v lift_props.vo subst0_lift.vo subst1_defs.vo -subst1_gen.vo: subst1_gen.v subst0_gen.vo subst1_defs.vo -subst1_defs.vo: subst1_defs.v subst0_defs.vo -subst0_tlt.vo: subst0_tlt.v tlt_defs.vo lift_tlt.vo subst0_defs.vo -subst0_confluence.vo: subst0_confluence.v lift_gen.vo subst0_gen.vo subst0_defs.vo -subst0_subst0.vo: subst0_subst0.v subst0_defs.vo subst0_gen.vo subst0_lift.vo -subst0_lift.vo: subst0_lift.v lift_props.vo subst0_defs.vo -subst0_gen.vo: subst0_gen.v lift_props.vo subst0_defs.vo -subst0_defs.vo: subst0_defs.v lift_defs.vo -drop_props.vo: drop_props.v lift_gen.vo drop_defs.vo -drop_defs.vo: drop_defs.v contexts_defs.vo lift_defs.vo -lift_tlt.vo: lift_tlt.v tlt_defs.vo lift_defs.vo -lift_props.vo: lift_props.v lift_defs.vo -lift_gen.vo: lift_gen.v lift_defs.vo -lift_defs.vo: lift_defs.v terms_defs.vo -contexts_defs.vo: contexts_defs.v terms_defs.vo -tlt_defs.vo: tlt_defs.v terms_defs.vo -terms_defs.vo: terms_defs.v Base.vo -Base.vo: Base.v base_tactics.vo base_hints.vo base_types.vo base_blt.vo base_rewrite.vo -base_rewrite.vo: base_rewrite.v -base_blt.vo: base_blt.v base_tactics.vo base_hints.vo -base_types.vo: base_types.v base_tactics.vo base_hints.vo -base_hints.vo: base_hints.v base_tactics.vo -base_tactics.vo: base_tactics.v diff --git a/helm/coq-contribs/LAMBDA-TYPES/Base.v b/helm/coq-contribs/LAMBDA-TYPES/Base.v deleted file mode 100644 index 6015c1774..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/Base.v +++ /dev/null @@ -1,7 +0,0 @@ -Require Export Arith. -Require Export Wf_nat. -Require Export base_tactics. -Require Export base_hints. -Require Export base_types. -Require Export base_blt. -Require Export base_rewrite. diff --git a/helm/coq-contribs/LAMBDA-TYPES/LambdaDelta.v b/helm/coq-contribs/LAMBDA-TYPES/LambdaDelta.v deleted file mode 100644 index c44873ee0..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/LambdaDelta.v +++ /dev/null @@ -1,67 +0,0 @@ -Require Export base_tactics. -Require Export base_hints. -Require Export base_types. -Require Export base_blt. -Require Export base_rewrite. -Require Export Base. -Require Export terms_defs. -Require Export tlt_defs. -Require Export contexts_defs. -Require Export lift_defs. -Require Export lift_gen. -Require Export lift_props. -Require Export lift_tlt. -Require Export drop_defs. -Require Export drop_props. -Require Export subst0_defs. -Require Export subst0_gen. -Require Export subst0_lift. -Require Export subst0_subst0. -Require Export subst0_confluence. -Require Export subst0_tlt. -Require Export subst1_defs. -Require Export subst1_gen. -Require Export subst1_lift. -Require Export subst1_subst1. -Require Export subst1_confluence. -Require Export csubst0_defs. -Require Export csubst1_defs. -Require Export fsubst0_defs. -Require Export pr0_defs. -Require Export pr0_lift. -Require Export pr0_gen. -Require Export pr0_subst0. -Require Export pr0_confluence. -Require Export pr0_subst1. -Require Export pr1_defs. -Require Export pr1_confluence. -Require Export cpr0_defs. -Require Export pr2_defs. -Require Export pr2_lift. -Require Export pr2_gen. -Require Export pr2_confluence. -Require Export pr2_subst1. -Require Export pr2_gen_context. -Require Export pr3_defs. -Require Export pr3_props. -Require Export pr3_gen. -Require Export pr3_confluence. -Require Export pr3_subst1. -Require Export pr3_gen_context. -Require Export pc1_defs. -Require Export pc1_props. -Require Export pc3_defs. -Require Export pc3_props. -Require Export pc3_gen. -Require Export pc3_subst0. -Require Export pc3_gen_context. -Require Export ty0_defs. -Require Export ty0_gen. -Require Export ty0_lift. -Require Export ty0_props. -Require Export ty0_subst0. -Require Export ty0_gen_context. -Require Export csub0_defs. -Require Export csub0_props. -Require Export ty0_sred. -Require Export ty0_sred_props. diff --git a/helm/coq-contribs/LAMBDA-TYPES/Make b/helm/coq-contribs/LAMBDA-TYPES/Make deleted file mode 100644 index c895b78c9..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/Make +++ /dev/null @@ -1,69 +0,0 @@ -# List of vernac files to compile -base_tactics.v -base_hints.v -base_types.v -base_blt.v -base_rewrite.v -Base.v -terms_defs.v -tlt_defs.v -contexts_defs.v -lift_defs.v -lift_gen.v -lift_props.v -lift_tlt.v -drop_defs.v -drop_props.v -subst0_defs.v -subst0_gen.v -subst0_lift.v -subst0_subst0.v -subst0_confluence.v -subst0_tlt.v -subst1_defs.v -subst1_gen.v -subst1_lift.v -subst1_subst1.v -subst1_confluence.v -csubst0_defs.v -csubst1_defs.v -fsubst0_defs.v -pr0_defs.v -pr0_lift.v -pr0_gen.v -pr0_subst0.v -pr0_confluence.v -pr0_subst1.v -pr1_defs.v -pr1_confluence.v -cpr0_defs.v -pr2_defs.v -pr2_lift.v -pr2_gen.v -pr2_confluence.v -pr2_subst1.v -pr2_gen_context.v -pr3_defs.v -pr3_props.v -pr3_gen.v -pr3_confluence.v -pr3_subst1.v -pr3_gen_context.v -pc1_defs.v -pc1_props.v -pc3_defs.v -pc3_props.v -pc3_gen.v -pc3_subst0.v -pc3_gen_context.v -ty0_defs.v -ty0_gen.v -ty0_lift.v -ty0_props.v -ty0_subst0.v -ty0_gen_context.v -csub0_defs.v -csub0_props.v -ty0_sred.v -ty0_sred_props.v -LambdaDelta.v diff --git a/helm/coq-contribs/LAMBDA-TYPES/Makefile b/helm/coq-contribs/LAMBDA-TYPES/Makefile deleted file mode 100644 index 1648c32aa..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/Makefile +++ /dev/null @@ -1,361 +0,0 @@ -############################################################################## -## The Calculus of Inductive Constructions ## -## ## -## Projet Coq ## -## ## -## INRIA ENS-CNRS ## -## Rocquencourt Lyon ## -## ## -## Coq V7 ## -## ## -## ## -############################################################################## - -# WARNING -# -# This Makefile has been automagically generated by coq_makefile -# Edit at your own risks ! -# -# END OF WARNING - -# -# This Makefile was generated by the command line : -# coq_makefile -f Make -o Makefile -# - -########################## -# # -# Variables definitions. # -# # -########################## - -CAMLP4LIB=`camlp4 -where` -COQSRC=-I $(COQTOP)/kernel -I $(COQTOP)/lib \ - -I $(COQTOP)/library -I $(COQTOP)/parsing -I $(COQTOP)/pretyping \ - -I $(COQTOP)/proofs -I $(COQTOP)/syntax -I $(COQTOP)/tactics \ - -I $(COQTOP)/toplevel -I $(CAMLP4LIB) -ZFLAGS=$(OCAMLLIBS) $(COQSRC) -OPT= -COQFLAGS=-q $(OPT) $(COQLIBS) -COQC=$(COQBIN)coqc -GALLINA=gallina -COQWEB=coqweb -CAMLC=ocamlc -c -CAMLOPTC=ocamlopt -c -CAMLLINK=ocamlc -CAMLOPTLINK=ocamlopt -COQDEP=$(COQBIN)coqdep -c -COQVO2XML=coq_vo2xml - -######################### -# # -# Libraries definition. # -# # -######################### - -OCAMLLIBS=-I . -COQLIBS=-I . - -################################### -# # -# Definition of the "all" target. # -# # -################################### - -VFILES=base_tactics.v\ - base_hints.v\ - base_types.v\ - base_blt.v\ - base_rewrite.v\ - Base.v\ - terms_defs.v\ - tlt_defs.v\ - contexts_defs.v\ - lift_defs.v\ - lift_gen.v\ - lift_props.v\ - lift_tlt.v\ - drop_defs.v\ - drop_props.v\ - subst0_defs.v\ - subst0_gen.v\ - subst0_lift.v\ - subst0_subst0.v\ - subst0_confluence.v\ - subst0_tlt.v\ - subst1_defs.v\ - subst1_gen.v\ - subst1_lift.v\ - subst1_subst1.v\ - subst1_confluence.v\ - csubst0_defs.v\ - csubst1_defs.v\ - fsubst0_defs.v\ - pr0_defs.v\ - pr0_lift.v\ - pr0_gen.v\ - pr0_subst0.v\ - pr0_confluence.v\ - pr0_subst1.v\ - pr1_defs.v\ - pr1_confluence.v\ - cpr0_defs.v\ - pr2_defs.v\ - pr2_lift.v\ - pr2_gen.v\ - pr2_confluence.v\ - pr2_subst1.v\ - pr2_gen_context.v\ - pr3_defs.v\ - pr3_props.v\ - pr3_gen.v\ - pr3_confluence.v\ - pr3_subst1.v\ - pr3_gen_context.v\ - pc1_defs.v\ - pc1_props.v\ - pc3_defs.v\ - pc3_props.v\ - pc3_gen.v\ - pc3_subst0.v\ - pc3_gen_context.v\ - ty0_defs.v\ - ty0_gen.v\ - ty0_lift.v\ - ty0_props.v\ - ty0_subst0.v\ - ty0_gen_context.v\ - csub0_defs.v\ - csub0_props.v\ - ty0_sred.v\ - ty0_sred_props.v\ - LambdaDelta.v -VOFILES=$(VFILES:.v=.vo) -VIFILES=$(VFILES:.v=.vi) -GFILES=$(VFILES:.v=.g) -HTMLFILES=$(VFILES:.v=.html) -GHTMLFILES=$(VFILES:.v=.g.html) - -all: base_tactics.vo\ - base_hints.vo\ - base_types.vo\ - base_blt.vo\ - base_rewrite.vo\ - Base.vo\ - terms_defs.vo\ - tlt_defs.vo\ - contexts_defs.vo\ - lift_defs.vo\ - lift_gen.vo\ - lift_props.vo\ - lift_tlt.vo\ - drop_defs.vo\ - drop_props.vo\ - subst0_defs.vo\ - subst0_gen.vo\ - subst0_lift.vo\ - subst0_subst0.vo\ - subst0_confluence.vo\ - subst0_tlt.vo\ - subst1_defs.vo\ - subst1_gen.vo\ - subst1_lift.vo\ - subst1_subst1.vo\ - subst1_confluence.vo\ - csubst0_defs.vo\ - csubst1_defs.vo\ - fsubst0_defs.vo\ - pr0_defs.vo\ - pr0_lift.vo\ - pr0_gen.vo\ - pr0_subst0.vo\ - pr0_confluence.vo\ - pr0_subst1.vo\ - pr1_defs.vo\ - pr1_confluence.vo\ - cpr0_defs.vo\ - pr2_defs.vo\ - pr2_lift.vo\ - pr2_gen.vo\ - pr2_confluence.vo\ - pr2_subst1.vo\ - pr2_gen_context.vo\ - pr3_defs.vo\ - pr3_props.vo\ - pr3_gen.vo\ - pr3_confluence.vo\ - pr3_subst1.vo\ - pr3_gen_context.vo\ - pc1_defs.vo\ - pc1_props.vo\ - pc3_defs.vo\ - pc3_props.vo\ - pc3_gen.vo\ - pc3_subst0.vo\ - pc3_gen_context.vo\ - ty0_defs.vo\ - ty0_gen.vo\ - ty0_lift.vo\ - ty0_props.vo\ - ty0_subst0.vo\ - ty0_gen_context.vo\ - csub0_defs.vo\ - csub0_props.vo\ - ty0_sred.vo\ - ty0_sred_props.vo\ - LambdaDelta.vo - -spec: $(VIFILES) - -gallina: $(GFILES) - -html: $(HTMLFILES) - -gallinahtml: $(GHTMLFILES) - -all.ps: $(VFILES) - $(COQWEB) -ps -o $@ `$(COQDEP) -sort -suffix .v $(VFILES)` - -all-gal.ps: $(GFILES) - $(COQWEB) -ps -o $@ `$(COQDEP) -sort -suffix .g $(VFILES)` - -xml:: .xml_time_stamp -.xml_time_stamp: base_tactics.vo\ - base_hints.vo\ - base_types.vo\ - base_blt.vo\ - base_rewrite.vo\ - Base.vo\ - terms_defs.vo\ - tlt_defs.vo\ - contexts_defs.vo\ - lift_defs.vo\ - lift_gen.vo\ - lift_props.vo\ - lift_tlt.vo\ - drop_defs.vo\ - drop_props.vo\ - subst0_defs.vo\ - subst0_gen.vo\ - subst0_lift.vo\ - subst0_subst0.vo\ - subst0_confluence.vo\ - subst0_tlt.vo\ - subst1_defs.vo\ - subst1_gen.vo\ - subst1_lift.vo\ - subst1_subst1.vo\ - subst1_confluence.vo\ - csubst0_defs.vo\ - csubst1_defs.vo\ - fsubst0_defs.vo\ - pr0_defs.vo\ - pr0_lift.vo\ - pr0_gen.vo\ - pr0_subst0.vo\ - pr0_confluence.vo\ - pr0_subst1.vo\ - pr1_defs.vo\ - pr1_confluence.vo\ - cpr0_defs.vo\ - pr2_defs.vo\ - pr2_lift.vo\ - pr2_gen.vo\ - pr2_confluence.vo\ - pr2_subst1.vo\ - pr2_gen_context.vo\ - pr3_defs.vo\ - pr3_props.vo\ - pr3_gen.vo\ - pr3_confluence.vo\ - pr3_subst1.vo\ - pr3_gen_context.vo\ - pc1_defs.vo\ - pc1_props.vo\ - pc3_defs.vo\ - pc3_props.vo\ - pc3_gen.vo\ - pc3_subst0.vo\ - pc3_gen_context.vo\ - ty0_defs.vo\ - ty0_gen.vo\ - ty0_lift.vo\ - ty0_props.vo\ - ty0_subst0.vo\ - ty0_gen_context.vo\ - csub0_defs.vo\ - csub0_props.vo\ - ty0_sred.vo\ - ty0_sred_props.vo\ - LambdaDelta.vo - $(COQVO2XML) $(COQFLAGS) $(?:%.o=%) - touch .xml_time_stamp - -#################### -# # -# Special targets. # -# # -#################### - -.PHONY: all opt byte archclean clean install depend xml - -.SUFFIXES: .v .vo .vi .g .html .tex .g.tex .g.html - -.v.vo: - $(COQC) $(COQDEBUG) $(COQFLAGS) $* - -.v.vi: - $(COQC) -i $(COQDEBUG) $(COQFLAGS) $* - -.v.g: - $(GALLINA) $< - -.v.tex: - $(COQWEB) $< -o $@ - -.v.html: - $(COQWEB) -html $< -o $@ - -.g.g.tex: - $(COQWEB) $< -o $@ - -.g.g.html: - $(COQWEB) -html $< -o $@ - -byte: - $(MAKE) all "OPT=" - -opt: - $(MAKE) all "OPT=-opt" - -include .depend - -depend: - rm .depend - $(COQDEP) -i $(COQLIBS) *.v *.ml *.mli >.depend - $(COQDEP) $(COQLIBS) -suffix .html *.v >>.depend - -xml:: - -install: - mkdir -p `$(COQC) -where`/user-contrib - cp -f *.vo `$(COQC) -where`/user-contrib - -Makefile: Make - mv -f Makefile Makefile.bak - $(COQBIN)coq_makefile -f Make -o Makefile - -clean: - rm -f *.cmo *.cmi *.cmx *.o *.vo *.vi *.g *~ - rm -f all.ps all-gal.ps $(HTMLFILES) $(GHTMLFILES) - -archclean: - rm -f *.cmx *.o - -# WARNING -# -# This Makefile has been automagically generated by coq_makefile -# Edit at your own risks ! -# -# END OF WARNING - diff --git a/helm/coq-contribs/LAMBDA-TYPES/README b/helm/coq-contribs/LAMBDA-TYPES/README deleted file mode 100644 index 6a5bf7e0f..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/README +++ /dev/null @@ -1,61 +0,0 @@ - - Contribution Bologna/LAMBDA-TYPES - ================================== - -This directory contains a formalization in Coq of "lambda-delta", a -lambda-typed lambda-calculus with abbreviations. - -Author & Date: Ferruccio Guidi - Department of Computer Science, University of Bologna - March 2005 -E-mail : fguidi@cs.unibo.it -WWW : http://www.cs.unibo.it/~fguidi - -Installation procedure: ------------------------ - - To get this contribution compiled, type - - make - - or - - make opt - - The main modules produced by the compilation are: - - LambdaDelta provides the theory of the "lambda-delta" calculus - and its prerequisites - - Base provides just the prerequisites (mainly some arithmetic - properties missing in the standard library of Coq) - -Description: ------------- - - The present work, which is meant to be improved in the future, contains - a formalization of the "lambda-delta" calculus, defined in "item notation" - and with De Bruijn indices, and includes the proofs of some standard - properties of this calculus. In particular the user will find: - - - Confluence of reduction - - Generation lemma - - Thinning lemma - - Substitution lemma - - Type Correctness - - Type Uniqueness - - Subject Reduction - - Other properties to be added in the future versions of this contribution - include (but are not limited to): - - - Strong Normalization - - Decidability of Type Inference and Type Checking - -Further information on this contribution: ------------------------------------------ - - The latest version of this development is maintained in the CVS repository - of the HELM project and can be downloaded at: - - www.cs.unibo.it/cgi-bin/viewcvs.cgi/helm/coq-contribs/LAMBDA-TYPES diff --git a/helm/coq-contribs/LAMBDA-TYPES/base_blt.v b/helm/coq-contribs/LAMBDA-TYPES/base_blt.v deleted file mode 100644 index ae00365c6..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/base_blt.v +++ /dev/null @@ -1,33 +0,0 @@ -Require Arith. -Require base_tactics. -Require base_hints. - -(*#* #stop file *) - - Fixpoint blt [m,n: nat] : bool := Cases n m of - | (0) m => false - | (S n) (0) => true - | (S n) (S m) => (blt m n) - end. - - Section blt_props. (******************************************************) - - Theorem lt_blt: (x,y:?) (lt y x) -> (blt y x) = true. - XElim x; [ Intros; Inversion H | XElim y; Simpl; XAuto ]. - Qed. - - Theorem le_bge: (x,y:?) (le x y) -> (blt y x) = false. - XElim x; [ XAuto | XElim y; Intros; [ Inversion H0 | Simpl; XAuto ] ]. - Qed. - - Theorem blt_lt: (x,y:?) (blt y x) = true -> (lt y x). - XElim x; [ Intros; Inversion H | XElim y; Simpl; XAuto ]. - Qed. - - Theorem bge_le: (x,y:?) (blt y x) = false -> (le x y). - XElim x; [ XAuto | XElim y; Intros; [ Inversion H0 | Simpl; XAuto ] ]. - Qed. - - End blt_props. - - Hints Resolve lt_blt le_bge : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/base_hints.v b/helm/coq-contribs/LAMBDA-TYPES/base_hints.v deleted file mode 100644 index a364406a3..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/base_hints.v +++ /dev/null @@ -1,262 +0,0 @@ -(*#* #stop file *) - -Require Arith. -Require base_tactics. - -(* eq ***********************************************************************) - -Hint eq : ltlc := Constructors eq. - -Hint f1N : ltlc := Resolve (f_equal nat). - -Hint f2NN : ltlc := Resolve (f_equal2 nat nat). - -Hints Resolve sym_equal : ltlc. - -Hints Resolve plus_sym plus_n_Sm plus_assoc_r simpl_plus_l : ltlc. - -Hints Resolve minus_n_O : ltlc. - -(* le ***********************************************************************) - -Hint le : ltlc := Constructors le. - -Hints Resolve le_O_n le_n_S le_S_n le_trans : ltlc. - -Hints Resolve lt_le_S : ltlc. - -Hints Resolve le_plus_plus le_plus_trans le_plus_l le_plus_r : ltlc. - -(* lt ***********************************************************************) - -Hints Resolve lt_trans : ltlc. - -Hints Resolve lt_le_trans le_lt_n_Sm : ltlc. - -Hints Resolve lt_reg_r lt_le_plus_plus le_lt_plus_plus : ltlc. - -(* not **********************************************************************) - -Hints Resolve sym_not_equal : ltlc. - -(* missing in the standard library ******************************************) - - Theorem simpl_plus_r: (n,m,p:?) (plus m n) = (plus p n) -> m = p. - Intros. - Apply (simpl_plus_l n). - Rewrite plus_sym. - Rewrite H; XAuto. - Qed. - - Theorem minus_plus_r: (m,n:?) (minus (plus m n) n) = m. - Intros. - Rewrite plus_sym. - Apply minus_plus. - Qed. - - Theorem plus_permute_2_in_3: (x,y,z:?) (plus (plus x y) z) = (plus (plus x z) y). - Intros. - Rewrite plus_assoc_r. - Rewrite (plus_sym y z). - Rewrite <- plus_assoc_r; XAuto. - Qed. - - Theorem plus_permute_2_in_3_assoc: (n,h,k:?) (plus (plus n h) k) = (plus n (plus k h)). - Intros. - Rewrite plus_permute_2_in_3; Rewrite plus_assoc_l; XAuto. - Qed. - - Theorem plus_O: (x,y:?) (plus x y) = (0) -> x = (O) /\ y = (O). - XElim x; [ XAuto | Intros; Inversion H0 ]. - Qed. - - Theorem minus_Sx_SO: (x:?) (minus (S x) (1)) = x. - Intros; Simpl; Rewrite <- minus_n_O; XAuto. - Qed. - - Theorem eq_nat_dec: (i,j:nat) ~i=j \/ i=j. - XElim i; XElim j; Intros; XAuto. - Elim (H n0); XAuto. - Qed. - - Theorem neq_eq_e: (i,j:nat; P:Prop) (~i=j -> P) -> (i=j -> P) -> P. - Intros. - Pose (eq_nat_dec i j). - XElim o; XAuto. - Qed. - - Theorem le_false: (m,n:?; P:Prop) (le m n) -> (le (S n) m) -> P. - XElim m. -(* case 1 : m = 0 *) - Intros; Inversion H0. -(* case 2 : m > 0 *) - XElim n0; Intros. -(* case 2.1 : n = 0 *) - Inversion H0. -(* case 2.2 : n > 0 *) - Simpl in H1. - Apply (H n0); XAuto. - Qed. - - Theorem le_plus_minus_sym: (n,m:?) (le n m) -> m = (plus (minus m n) n). - Intros. - Rewrite plus_sym; Apply le_plus_minus; XAuto. - Qed. - - Theorem le_minus_minus: (x,y:?) (le x y) -> (z:?) (le y z) -> - (le (minus y x) (minus z x)). - Intros. - EApply simpl_le_plus_l. - Rewrite le_plus_minus_r; [ Idtac | XAuto ]. - Rewrite le_plus_minus_r; XEAuto. - Qed. - - Theorem le_minus_plus: (z,x:?) (le z x) -> (y:?) - (minus (plus x y) z) = (plus (minus x z) y). - XElim z. -(* case 1 : z = 0 *) - Intros x H; Inversion H; XAuto. -(* case 2 : z > 0 *) - Intros z; XElim x; Intros. -(* case 2.1 : x = 0 *) - Inversion H0. -(* case 2.2 : x > 0 *) - Simpl; XAuto. - Qed. - - Theorem le_minus: (x,z,y:?) (le (plus x y) z) -> (le x (minus z y)). - Intros. - Rewrite <- (minus_plus_r x y); XAuto. - Apply le_minus_minus; XAuto. - Qed. - - Theorem le_trans_plus_r: (x,y,z:?) (le (plus x y) z) -> (le y z). - Intros. - EApply le_trans; [ EApply le_plus_r | Idtac ]; XEAuto. - Qed. - - Theorem le_gen_S: (m,x:?) (le (S m) x) -> - (EX n | x = (S n) & (le m n)). - Intros; Inversion H; XEAuto. - Qed. - - Theorem lt_x_plus_x_Sy: (x,y:?) (lt x (plus x (S y))). - Intros; Rewrite plus_sym; Simpl; XAuto. - Qed. - - Theorem simpl_lt_plus_r: (p,n,m:?) (lt (plus n p) (plus m p)) -> (lt n m). - Intros. - EApply simpl_lt_plus_l. - Rewrite plus_sym in H; Rewrite (plus_sym m p) in H; Apply H. - Qed. - - Theorem minus_x_Sy: (x,y:?) (lt y x) -> - (minus x y) = (S (minus x (S y))). - XElim x. -(* case 1 : x = 0 *) - Intros; Inversion H. -(* case 2 : x > 0 *) - XElim y; Intros; Simpl. -(* case 2.1 : y = 0 *) - Rewrite <- minus_n_O; XAuto. -(* case 2.2 : y > 0 *) - Cut (lt n0 n); XAuto. - Qed. - - Theorem lt_plus_minus: (x,y:?) (lt x y) -> - y = (S (plus x (minus y (S x)))). - Intros. - Apply (le_plus_minus (S x) y); XAuto. - Qed. - - Theorem lt_plus_minus_r: (x,y:?) (lt x y) -> - y = (S (plus (minus y (S x)) x)). - Intros. - Rewrite plus_sym; Apply lt_plus_minus; XAuto. - Qed. - - Theorem minus_x_SO: (x:?) (lt (0) x) -> x = (S (minus x (1))). - Intros. - Rewrite <- minus_x_Sy; [ Rewrite <- minus_n_O; XEAuto | XEAuto ]. - Qed. - - Theorem lt_le_minus: (x,y:?) (lt x y) -> (le x (minus y (1))). - Intros; Apply le_minus; Rewrite plus_sym; Simpl; XAuto. - Qed. - - Theorem lt_le_e: (n,d:?; P:Prop) - ((lt n d) -> P) -> ((le d n) -> P) -> P. - Intros. - Cut (le d n) \/ (lt n d); [ Intros H1; XElim H1; XAuto | Apply le_or_lt ]. - Qed. - - Theorem lt_eq_e: (x,y:?; P:Prop) ((lt x y) -> P) -> - (x = y -> P) -> (le x y) -> P. - Intros. - LApply (le_lt_or_eq x y); [ Clear H1; Intros H1 | XAuto ]. - XElim H1; XAuto. - Qed. - - Theorem lt_eq_gt_e: (x,y:?; P:Prop) ((lt x y) -> P) -> - (x = y -> P) -> ((lt y x) -> P) -> P. - Intros. - Apply (lt_le_e x y); [ XAuto | Intros ]. - Apply (lt_eq_e y x); XAuto. - Qed. - - Theorem lt_gen_S': (x,n:?) (lt x (S n)) -> - x = (0) \/ (EX m | x = (S m) & (lt m n)). - XElim x; XEAuto. - Qed. - -Hints Resolve le_lt_trans : ltlc. - -Hints Resolve simpl_plus_r minus_plus_r minus_x_Sy - plus_permute_2_in_3 plus_permute_2_in_3_assoc : ltlc. - -Hints Resolve le_minus_minus le_minus_plus le_minus le_trans_plus_r : ltlc. - -Hints Resolve lt_x_plus_x_Sy simpl_lt_plus_r lt_le_minus lt_plus_minus - lt_plus_minus_r : ltlc. - - Theorem lt_neq: (x,y:?) (lt x y) -> ~x=y. - Unfold not; Intros; Rewrite H0 in H; Clear H0 x. - LApply (lt_n_n y); XAuto. - Qed. - -Hints Resolve lt_neq : ltlc. - - Theorem arith0: (h2,d2,n:?) (le (plus d2 h2) n) -> - (h1:?) (le (plus d2 h1) (minus (plus n h1) h2)). - Intros. - Rewrite <- (minus_plus h2 (plus d2 h1)). - Apply le_minus_minus; [ XAuto | Idtac ]. - Rewrite plus_assoc_l; Rewrite (plus_sym h2 d2); XAuto. - Qed. - -Hints Resolve arith0 : ltlc. - - Tactic Definition EqFalse := - Match Context With - [ H: ~?1=?1 |- ? ] -> - LApply H; [ Clear H; Intros H; Inversion H | XAuto ]. - - Tactic Definition PlusO := - Match Context With - | [ H: (plus ?0 ?1) = (0) |- ? ] -> - LApply (plus_O ?0 ?1); [ Clear H; Intros H | XAuto ]; - XElim H; Intros. - - Tactic Definition SymEqual := - Match Context With - | [ H: ?1 = ?2 |- ? ] -> - Cut ?2 = ?1; [ Clear H; Intros H | Apply sym_equal; XAuto ]. - - Tactic Definition LeLtGen := - Match Context With - | [ H: (le (S ?1) ?2) |- ? ] -> - LApply (le_gen_S ?1 ?2); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (lt ?1 (S ?2)) |- ? ] -> - LApply (lt_gen_S' ?1 ?2); [ Clear H; Intros H | XAuto ]; - XElim H; [ Intros | Intros H; XElim H; Intros ]. diff --git a/helm/coq-contribs/LAMBDA-TYPES/base_rewrite.v b/helm/coq-contribs/LAMBDA-TYPES/base_rewrite.v deleted file mode 100644 index 68490ee3f..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/base_rewrite.v +++ /dev/null @@ -1,76 +0,0 @@ -(*#* #stop file *) - -Require Arith. - - Tactic Definition Arith0 x := - Replace (S x) with (plus (1) x); XAuto. - - Tactic Definition Arith1 x := - Replace x with (plus x (0)); [XAuto | Auto with arith]. - - Tactic Definition Arith1In H x := - XReplaceIn H x '(plus x (0)). - - Tactic Definition Arith2 x := - Replace x with (plus (0) x); XAuto. - - Tactic Definition Arith3 x := - Replace (S x) with (S (plus (0) x)); XAuto. - - Tactic Definition Arith3In H x := - XReplaceIn H '(S x) '(S (plus (0) x)). - - Tactic Definition Arith4 x y := - Replace (S (plus x y)) with (plus (S x) y); XAuto. - - Tactic Definition Arith4In H x y := - XReplaceIn H '(S (plus x y)) '(plus (S x) y). - - Tactic Definition Arith4c x y := - Arith4 x y; Rewrite plus_sym. - - Tactic Definition Arith5 x y := - Replace (S (plus x y)) with (plus x (S y)); Auto with arith. - - Tactic Definition Arith5In H x y := - XReplaceIn H '(S (plus x y)) '(plus x (S y)); Auto with arith. - - Tactic Definition Arith5' x y := - Replace (plus x (S y)) with (S (plus x y)); Auto with arith. - - Tactic Definition Arith5'In H x y := - XReplaceIn H '(plus x (S y)) '(S (plus x y)); Auto with arith. - - Tactic Definition Arith5'c x y := - Arith5' x y; Rewrite plus_sym. - - Tactic Definition Arith6In H x y := - XReplaceIn H '(plus x (S y)) '(plus (1) (plus x y)); - [ Idtac | Simpl; Auto with arith ]. - - Tactic Definition Arith7 x := - Replace (S x) with (plus x (1)); - [ Idtac | Rewrite plus_sym; Auto with arith ]. - - Tactic Definition Arith7In H x := - XReplaceIn H '(S x) '(plus x (1)) ; - [ Idtac | Rewrite plus_sym; Auto with arith ]. - - Tactic Definition Arith7' x := - Replace (plus x (1)) with (S x); - [ Idtac | Rewrite plus_sym; Auto with arith ]. - - Tactic Definition Arith8 x y := - Replace x with (plus y (minus x y)); - [ Idtac | Auto with arith ]. - - Tactic Definition Arith8' x y := - Replace (plus y (minus x y)) with x; - [ Idtac | Auto with arith ]. - - Tactic Definition Arith9'In H x := - XReplaceIn H '(S (plus x (0))) '(S x). - - Tactic Definition Arith10 x := - Replace x with (minus (S x) (1)); - [ Idtac | Simpl; Rewrite <- minus_n_O; Auto with arith ]. diff --git a/helm/coq-contribs/LAMBDA-TYPES/base_tactics.v b/helm/coq-contribs/LAMBDA-TYPES/base_tactics.v deleted file mode 100644 index daa6facca..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/base_tactics.v +++ /dev/null @@ -1,45 +0,0 @@ -(*#* #stop file *) - - Tactic Definition XAuto := Auto with ltlc. - - Tactic Definition XEAuto := EAuto with ltlc. - - Tactic Definition XDEAuto d := EAuto d with ltlc. - - Tactic Definition XElimUsing e v := - Try Intros until v; Elim v using e; Try Clear v. - - Tactic Definition XElim v := Try Intros until v; Elim v; Try Clear v. - - Tactic Definition XCase v := Try Intros until v; Case v; Try Clear v. - - Tactic Definition XReplaceIn Z0 y1 y2 := - Cut y1=y2; [ Intros Z; Rewrite Z in Z0; Clear Z | XAuto ]. - - Theorem insert_eq: (S:Set; x:S; P:S->Prop; G:Prop) - ((y:S) (P y) -> y = x -> G) -> (P x) -> G. - EAuto. Qed. - - Tactic Definition InsertEq H y := - Pattern 1 y in H; Match Context With [ _: (?1 y) |- ? ] -> - Apply insert_eq with x:=y P:=?1; - [ Clear H; Intros until 1 | Pattern y; Apply H ]. - - Theorem unintro : (A:Set; a:A; P:A->Prop) ((x:A) (P x)) -> (P a). - Auto. - Qed. - - Tactic Definition UnIntro Last H := - Move H after Last; - Match Context With [ y: ?1 |- ?2 ] -> - Apply (unintro ?1 y); Clear y. - - Tactic Definition NonLinear := - Match Context With - [ H: ?1 |- ? ] -> Cut ?1; [ Intros | XAuto ]. - - Tactic Definition XRewrite x := - Match Context With - | [ H0: x = ? |- ? ] -> Try Rewrite H0 - | [ H0: ? = x |- ? ] -> Try Rewrite <- H0 - | _ -> Idtac. diff --git a/helm/coq-contribs/LAMBDA-TYPES/base_types.v b/helm/coq-contribs/LAMBDA-TYPES/base_types.v deleted file mode 100644 index f24ef915a..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/base_types.v +++ /dev/null @@ -1,206 +0,0 @@ -(* This file was generated by coqgen *) - -Require base_tactics. -Require base_hints. - -(*#* #stop file *) - -(* extensions for ex2 *) - -Syntactic Definition ex2_intro := ex_intro2. - -Theorem ex2_sym: (A:Set; P,Q:A->Prop) - (EX x | (P x) & (Q x)) -> (EX x | (Q x) & (P x)). - Intros; XElim H; XEAuto. - Qed. - -Hints Resolve ex2_sym : ltlc. - -(* or3 *) - -Inductive or3 [P0,P1,P2:Prop] : Prop := - | or3_intro0 : P0 -> (or3 P0 P1 P2) - | or3_intro1 : P1 -> (or3 P0 P1 P2) - | or3_intro2 : P2 -> (or3 P0 P1 P2). - -Hint or3 : ltlc := Constructors or3. - -Grammar constr constr10 := - | or3 - [ "OR" constr($c0) "|" constr($c1) "|" constr($c2) ] -> - [ (or3 $c0 $c1 $c2) ]. - -(* or4 *) - -Inductive or4 [P0,P1,P2,P3:Prop] : Prop := - | or4_intro0 : P0 -> (or4 P0 P1 P2 P3) - | or4_intro1 : P1 -> (or4 P0 P1 P2 P3) - | or4_intro2 : P2 -> (or4 P0 P1 P2 P3) - | or4_intro3 : P3 -> (or4 P0 P1 P2 P3). - -Hint or4 : ltlc := Constructors or4. - -Grammar constr constr10 := - | or4 - [ "OR" constr($c0) "|" constr($c1) "|" constr($c2) "|" constr($c3) ] -> - [ (or4 $c0 $c1 $c2 $c3) ]. - -(* ex2_2 *) - -Inductive ex2_2 [A0,A1:Set; P0,P1:A0->A1->Prop] : Prop := - ex2_2_intro : (x0:A0; x1:A1)(P0 x0 x1)->(P1 x0 x1)->(ex2_2 A0 A1 P0 P1). - -Hint ex2_2 : ltlc := Constructors ex2_2. - -Syntactic Definition Ex2_2 := ex2_2 | 1. - -Grammar constr constr10 := - | ex2_2implicit - [ "EX" ident($v0) ident($v1) "|" constr($c0) "&" constr($c1) ] -> - [ (ex2_2 ? ? [$v0;$v1]$c0 [$v0;$v1]$c1) ]. - -(* ex3_2 *) - -Inductive ex3_2 [A0,A1:Set; P0,P1,P2:A0->A1->Prop] : Prop := - ex3_2_intro : (x0:A0; x1:A1)(P0 x0 x1)->(P1 x0 x1)->(P2 x0 x1)->(ex3_2 A0 A1 P0 P1 P2). - -Hint ex3_2 : ltlc := Constructors ex3_2. - -Syntactic Definition Ex3_2 := ex3_2 | 1. - -Grammar constr constr10 := - | ex3_2implicit - [ "EX" ident($v0) ident($v1) "|" constr($c0) "&" constr($c1) "&" constr($c2) ] -> - [ (ex3_2 ? ? [$v0;$v1]$c0 [$v0;$v1]$c1 [$v0;$v1]$c2) ]. - -(* ex_3 *) - -Inductive ex_3 [A0,A1,A2:Set; P0:A0->A1->A2->Prop] : Prop := - ex_3_intro : (x0:A0; x1:A1; x2:A2)(P0 x0 x1 x2)->(ex_3 A0 A1 A2 P0). - -Hint ex_3 : ltlc := Constructors ex_3. - -Syntactic Definition Ex_3 := ex_3 | 1. - -Grammar constr constr10 := - | ex_3implicit - [ "EX" ident($v0) ident($v1) ident($v2) "|" constr($c0) ] -> - [ (ex_3 ? ? ? [$v0;$v1;$v2]$c0) ]. - -(* ex3_3 *) - -Inductive ex3_3 [A0,A1,A2:Set; P0,P1,P2:A0->A1->A2->Prop] : Prop := - ex3_3_intro : (x0:A0; x1:A1; x2:A2)(P0 x0 x1 x2)->(P1 x0 x1 x2)->(P2 x0 x1 x2)->(ex3_3 A0 A1 A2 P0 P1 P2). - -Hint ex3_3 : ltlc := Constructors ex3_3. - -Syntactic Definition Ex3_3 := ex3_3 | 1. - -Grammar constr constr10 := - | ex3_3implicit - [ "EX" ident($v0) ident($v1) ident($v2) "|" constr($c0) "&" constr($c1) "&" constr($c2) ] -> - [ (ex3_3 ? ? ? [$v0;$v1;$v2]$c0 [$v0;$v1;$v2]$c1 [$v0;$v1;$v2]$c2) ]. - -(* ex4_3 *) - -Inductive ex4_3 [A0,A1,A2:Set; P0,P1,P2,P3:A0->A1->A2->Prop] : Prop := - ex4_3_intro : (x0:A0; x1:A1; x2:A2)(P0 x0 x1 x2)->(P1 x0 x1 x2)->(P2 x0 x1 x2)->(P3 x0 x1 x2)->(ex4_3 A0 A1 A2 P0 P1 P2 P3). - -Hint ex4_3 : ltlc := Constructors ex4_3. - -Syntactic Definition Ex4_3 := ex4_3 | 1. - -Grammar constr constr10 := - | ex4_3implicit - [ "EX" ident($v0) ident($v1) ident($v2) "|" constr($c0) "&" constr($c1) "&" constr($c2) "&" constr($c3) ] -> - [ (ex4_3 ? ? ? [$v0;$v1;$v2]$c0 [$v0;$v1;$v2]$c1 [$v0;$v1;$v2]$c2 [$v0;$v1;$v2]$c3) ]. - -(* ex3_4 *) - -Inductive ex3_4 [A0,A1,A2,A3:Set; P0,P1,P2:A0->A1->A2->A3->Prop] : Prop := - ex3_4_intro : (x0:A0; x1:A1; x2:A2; x3:A3)(P0 x0 x1 x2 x3)->(P1 x0 x1 x2 x3)->(P2 x0 x1 x2 x3)->(ex3_4 A0 A1 A2 A3 P0 P1 P2). - -Hint ex3_4 : ltlc := Constructors ex3_4. - -Syntactic Definition Ex3_4 := ex3_4 | 1. - -Grammar constr constr10 := - | ex3_4implicit - [ "EX" ident($v0) ident($v1) ident($v2) ident($v3) "|" constr($c0) "&" constr($c1) "&" constr($c2) ] -> - [ (ex3_4 ? ? ? ? [$v0;$v1;$v2;$v3]$c0 [$v0;$v1;$v2;$v3]$c1 [$v0;$v1;$v2;$v3]$c2) ]. - -(* ex4_4 *) - -Inductive ex4_4 [A0,A1,A2,A3:Set; P0,P1,P2,P3:A0->A1->A2->A3->Prop] : Prop := - ex4_4_intro : (x0:A0; x1:A1; x2:A2; x3:A3)(P0 x0 x1 x2 x3)->(P1 x0 x1 x2 x3)->(P2 x0 x1 x2 x3)->(P3 x0 x1 x2 x3)->(ex4_4 A0 A1 A2 A3 P0 P1 P2 P3). - -Hint ex4_4 : ltlc := Constructors ex4_4. - -Syntactic Definition Ex4_4 := ex4_4 | 1. - -Grammar constr constr10 := - | ex4_4implicit - [ "EX" ident($v0) ident($v1) ident($v2) ident($v3) "|" constr($c0) "&" constr($c1) "&" constr($c2) "&" constr($c3) ] -> - [ (ex4_4 ? ? ? ? [$v0;$v1;$v2;$v3]$c0 [$v0;$v1;$v2;$v3]$c1 [$v0;$v1;$v2;$v3]$c2 [$v0;$v1;$v2;$v3]$c3) ]. - -(* ex4_5 *) - -Inductive ex4_5 [A0,A1,A2,A3,A4:Set; P0,P1,P2,P3:A0->A1->A2->A3->A4->Prop] : Prop := - ex4_5_intro : (x0:A0; x1:A1; x2:A2; x3:A3; x4:A4)(P0 x0 x1 x2 x3 x4)->(P1 x0 x1 x2 x3 x4)->(P2 x0 x1 x2 x3 x4)->(P3 x0 x1 x2 x3 x4)->(ex4_5 A0 A1 A2 A3 A4 P0 P1 P2 P3). - -Hint ex4_5 : ltlc := Constructors ex4_5. - -Syntactic Definition Ex4_5 := ex4_5 | 1. - -Grammar constr constr10 := - | ex4_5implicit - [ "EX" ident($v0) ident($v1) ident($v2) ident($v3) ident($v4) "|" constr($c0) "&" constr($c1) "&" constr($c2) "&" constr($c3) ] -> - [ (ex4_5 ? ? ? ? ? [$v0;$v1;$v2;$v3;$v4]$c0 [$v0;$v1;$v2;$v3;$v4]$c1 [$v0;$v1;$v2;$v3;$v4]$c2 [$v0;$v1;$v2;$v3;$v4]$c3) ]. - -(* ex5_5 *) - -Inductive ex5_5 [A0,A1,A2,A3,A4:Set; P0,P1,P2,P3,P4:A0->A1->A2->A3->A4->Prop] : Prop := - ex5_5_intro : (x0:A0; x1:A1; x2:A2; x3:A3; x4:A4)(P0 x0 x1 x2 x3 x4)->(P1 x0 x1 x2 x3 x4)->(P2 x0 x1 x2 x3 x4)->(P3 x0 x1 x2 x3 x4)->(P4 x0 x1 x2 x3 x4)->(ex5_5 A0 A1 A2 A3 A4 P0 P1 P2 P3 P4). - -Hint ex5_5 : ltlc := Constructors ex5_5. - -Syntactic Definition Ex5_5 := ex5_5 | 1. - -Grammar constr constr10 := - | ex5_5implicit - [ "EX" ident($v0) ident($v1) ident($v2) ident($v3) ident($v4) "|" constr($c0) "&" constr($c1) "&" constr($c2) "&" constr($c3) "&" constr($c4) ] -> - [ (ex5_5 ? ? ? ? ? [$v0;$v1;$v2;$v3;$v4]$c0 [$v0;$v1;$v2;$v3;$v4]$c1 [$v0;$v1;$v2;$v3;$v4]$c2 [$v0;$v1;$v2;$v3;$v4]$c3 [$v0;$v1;$v2;$v3;$v4]$c4) ]. - -(* ex6_6 *) - -Inductive ex6_6 [A0,A1,A2,A3,A4,A5:Set; P0,P1,P2,P3,P4,P5:A0->A1->A2->A3->A4->A5->Prop] : Prop := - ex6_6_intro : (x0:A0; x1:A1; x2:A2; x3:A3; x4:A4; x5:A5)(P0 x0 x1 x2 x3 x4 x5)->(P1 x0 x1 x2 x3 x4 x5)->(P2 x0 x1 x2 x3 x4 x5)->(P3 x0 x1 x2 x3 x4 x5)->(P4 x0 x1 x2 x3 x4 x5)->(P5 x0 x1 x2 x3 x4 x5)->(ex6_6 A0 A1 A2 A3 A4 A5 P0 P1 P2 P3 P4 P5). - -Hint ex6_6 : ltlc := Constructors ex6_6. - -Syntactic Definition Ex6_6 := ex6_6 | 1. - -Grammar constr constr10 := - | ex6_6implicit - [ "EX" ident($v0) ident($v1) ident($v2) ident($v3) ident($v4) ident($v5) "|" constr($c0) "&" constr($c1) "&" constr($c2) "&" constr($c3) "&" constr($c4) "&" constr($c5) ] -> - [ (ex6_6 ? ? ? ? ? ? [$v0;$v1;$v2;$v3;$v4;$v5]$c0 [$v0;$v1;$v2;$v3;$v4;$v5]$c1 [$v0;$v1;$v2;$v3;$v4;$v5]$c2 [$v0;$v1;$v2;$v3;$v4;$v5]$c3 [$v0;$v1;$v2;$v3;$v4;$v5]$c4 [$v0;$v1;$v2;$v3;$v4;$v5]$c5) ]. - -(* ex6_7 *) - -Inductive ex6_7 [A0,A1,A2,A3,A4,A5,A6:Set; P0,P1,P2,P3,P4,P5:A0->A1->A2->A3->A4->A5->A6->Prop] : Prop := - ex6_7_intro : (x0:A0; x1:A1; x2:A2; x3:A3; x4:A4; x5:A5; x6:A6)(P0 x0 x1 x2 x3 x4 x5 x6)->(P1 x0 x1 x2 x3 x4 x5 x6)->(P2 x0 x1 x2 x3 x4 x5 x6)->(P3 x0 x1 x2 x3 x4 x5 x6)->(P4 x0 x1 x2 x3 x4 x5 x6)->(P5 x0 x1 x2 x3 x4 x5 x6)->(ex6_7 A0 A1 A2 A3 A4 A5 A6 P0 P1 P2 P3 P4 P5). - -Hint ex6_7 : ltlc := Constructors ex6_7. - -Syntactic Definition Ex6_7 := ex6_7 | 1. - -Grammar constr constr10 := - | ex6_7implicit - [ "EX" ident($v0) ident($v1) ident($v2) ident($v3) ident($v4) ident($v5) ident($v6) "|" constr($c0) "&" constr($c1) "&" constr($c2) "&" constr($c3) "&" constr($c4) "&" constr($c5) ] -> - [ (ex6_7 ? ? ? ? ? ? ? [$v0;$v1;$v2;$v3;$v4;$v5;$v6]$c0 [$v0;$v1;$v2;$v3;$v4;$v5;$v6]$c1 [$v0;$v1;$v2;$v3;$v4;$v5;$v6]$c2 [$v0;$v1;$v2;$v3;$v4;$v5;$v6]$c3 [$v0;$v1;$v2;$v3;$v4;$v5;$v6]$c4 [$v0;$v1;$v2;$v3;$v4;$v5;$v6]$c5) ]. - -(* extended Decompose tactic *) - -Tactic Definition XDecompose H := - Decompose [and or ex ex2 or3 or4 ex2_2 ex3_2 ex_3 ex3_3 ex4_3 ex3_4 ex4_4 ex4_5 ex5_5 ex6_6 ex6_7] H; Clear H. - diff --git a/helm/coq-contribs/LAMBDA-TYPES/contexts_defs.v b/helm/coq-contribs/LAMBDA-TYPES/contexts_defs.v deleted file mode 100644 index a9a689235..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/contexts_defs.v +++ /dev/null @@ -1,77 +0,0 @@ -(*#* #stop file *) - -Require Export terms_defs. - - Inductive Set C := CSort: nat -> C - | CTail: C -> K -> T -> C. - - Hint f3CKT : ltlc := Resolve (f_equal3 C K T). - - Tactic Definition CGenBase := - Match Context With - | [ H: (CSort ?) = (CSort ?) |- ? ] -> Inversion H; Clear H - | [ H: (CTail ? ? ?) = (CTail ? ? ?) |- ? ] -> Inversion H; Clear H - | _ -> TGenBase. - - Definition r: K -> nat -> nat := [k;i] Cases k of - | (Bind _) => i - | (Flat _) => (S i) - end. - - Fixpoint app [c:C] : nat -> T -> T := [j;t]Cases j c of - | (0) _ => t - | _ (CSort _) => t - | (S i) (CTail c k u) => (app c (r k i) (TTail k u t)) - end. - - Section r_props. (********************************************************) - - Theorem r_S: (k:?; i:?) (r k (S i)) = (S (r k i)). - XElim k; XAuto. - Qed. - - Theorem r_plus_sym: (k:?; i,j:?) (r k (plus i j)) = (plus i (r k j)). - XElim k; Intros; Simpl; XAuto. - Qed. - - Theorem r_minus: (i,n:?) (lt n i) -> - (k:?) (minus (r k i) (S n)) = (r k (minus i (S n))). - XElim k; Intros; Simpl; XEAuto. - Qed. - - Theorem r_dis: (k:?; P:Prop) - (((i:?) (r k i) = i) -> P) -> - (((i:?) (r k i) = (S i)) -> P) -> P. - XElim k; XAuto. - Qed. - - End r_props. - - Tactic Definition RRw := - Repeat (Rewrite r_S Orelse Rewrite r_plus_sym). - - Section r_arith. (********************************************************) - - Theorem r_arith0: (k:?; i:?) (minus (r k (S i)) (1)) = (r k i). - Intros; RRw; Rewrite minus_Sx_SO; XAuto. - Qed. - - Theorem r_arith1: (k:?; i,j:?) (minus (r k (S i)) (S j)) = (minus (r k i) j). - Intros; RRw; XAuto. - Qed. - - End r_arith. - - Section app_props. (******************************************************) - - Theorem app_csort: (t:?; i,n:?) (app (CSort n) i t) = t. - XElim i; Intros; Simpl; XAuto. - Qed. - - Theorem app_O: (c:?; t:?) (app c (0) t) = t. - XElim c; XAuto. - Qed. - - End app_props. - - Hints Resolve app_csort app_O : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/cpr0_defs.v b/helm/coq-contribs/LAMBDA-TYPES/cpr0_defs.v deleted file mode 100644 index 7773a3410..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/cpr0_defs.v +++ /dev/null @@ -1,90 +0,0 @@ -Require Export contexts_defs. -Require Export drop_defs. -Require Export pr0_defs. - -(*#* #caption "current axioms for the relation $\\CprZ{}{}$", - "reflexivity", "compatibility" -*) -(*#* #cap #cap c, c1, c2 #alpha u1 in V1, u2 in V2, k in z *) - - Inductive cpr0 : C -> C -> Prop := - | cpr0_refl : (c:?) (cpr0 c c) - | cpr0_comp : (c1,c2:?) (cpr0 c1 c2) -> (u1,u2:?) (pr0 u1 u2) -> - (k:?) (cpr0 (CTail c1 k u1) (CTail c2 k u2)). - -(*#* #stop file *) - - Hint cpr0 : ltlc := Constructors cpr0. - - Section cpr0_drop. (******************************************************) - - Theorem cpr0_drop : (c1,c2:?) (cpr0 c1 c2) -> (h:?; e1:?; u1:?; k:?) - (drop h (0) c1 (CTail e1 k u1)) -> - (EX e2 u2 | (drop h (0) c2 (CTail e2 k u2)) & - (cpr0 e1 e2) & (pr0 u1 u2) - ). - Intros until 1; XElim H. -(* case 1 : cpr0_refl *) - XEAuto. -(* case 2 : cpr0_comp *) - XElim h. -(* case 2.1 : h = 0 *) - Intros; DropGenBase. - Inversion H2; Rewrite H6 in H1; Rewrite H4 in H; XEAuto. -(* case 2.2 : h > 0 *) - XElim k; Intros; DropGenBase. -(* case 2.2.1 : Bind *) - LApply (H0 n e1 u0 k); [ Clear H0 H3; Intros H0 | XAuto ]. - XElim H0; XEAuto. -(* case 2.2.2 : Flat *) - LApply (H0 (S n) e1 u0 k); [ Clear H0 H3; Intros H0 | XAuto ]. - XElim H0; XEAuto. - Qed. - - Theorem cpr0_drop_back : (c1,c2:?) (cpr0 c2 c1) -> (h:?; e1:?; u1:?; k:?) - (drop h (0) c1 (CTail e1 k u1)) -> - (EX e2 u2 | (drop h (0) c2 (CTail e2 k u2)) & - (cpr0 e2 e1) & (pr0 u2 u1) - ). - Intros until 1; XElim H. -(* case 1 : cpr0_refl *) - XEAuto. -(* case 2 : cpr0_comp *) - XElim h. -(* case 2.1 : h = 0 *) - Intros; DropGenBase. - Inversion H2; Rewrite H6 in H1; Rewrite H4 in H; XEAuto. -(* case 2.2 : h > 0 *) - XElim k; Intros; DropGenBase. -(* case 2.2.1 : Bind *) - LApply (H0 n e1 u0 k); [ Clear H0 H3; Intros H0 | XAuto ]. - XElim H0; XEAuto. -(* case 2.2.2 : Flat *) - LApply (H0 (S n) e1 u0 k); [ Clear H0 H3; Intros H0 | XAuto ]. - XElim H0; XEAuto. - Qed. - - End cpr0_drop. - - Tactic Definition Cpr0Drop := - Match Context With - | [ _: (drop ?1 (0) ?2 (CTail ?3 ?4 ?5)); - _: (cpr0 ?2 ?6) |- ? ] -> - LApply (cpr0_drop ?2 ?6); [ Intros H_x | XAuto ]; - LApply (H_x ?1 ?3 ?5 ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros - | [ _: (drop ?1 (0) ?2 (CTail ?3 ?4 ?5)); - _: (cpr0 ?6 ?2) |- ? ] -> - LApply (cpr0_drop_back ?2 ?6); [ Intros H_x | XAuto ]; - LApply (H_x ?1 ?3 ?5 ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros - | [ _: (drop ?1 (0) (CTail ?2 ?7 ?8) (CTail ?3 ?4 ?5)); - _: (cpr0 ?2 ?6) |- ? ] -> - LApply (cpr0_drop (CTail ?2 ?7 ?8) (CTail ?6 ?7 ?8)); [ Intros H_x | XAuto ]; - LApply (H_x ?1 ?3 ?5 ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros - | [ _: (drop ?1 (0) (CTail ?2 ?7 ?8) (CTail ?3 ?4 ?5)); - _: (cpr0 ?6 ?2) |- ? ] -> - LApply (cpr0_drop_back (CTail ?2 ?7 ?8) (CTail ?6 ?7 ?8)); [ Intros H_x | XAuto ]; - LApply (H_x ?1 ?3 ?5 ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/csub0_defs.v b/helm/coq-contribs/LAMBDA-TYPES/csub0_defs.v deleted file mode 100644 index 2949e83d9..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/csub0_defs.v +++ /dev/null @@ -1,114 +0,0 @@ -(*#* #stop file *) - -Require Export ty0_defs. - - Inductive csub0 [g:G] : C -> C -> Prop := -(* structural rules *) - | csub0_sort: (n:?) (csub0 g (CSort n) (CSort n)) - | csub0_tail: (c1,c2:?) (csub0 g c1 c2) -> (k,u:?) - (csub0 g (CTail c1 k u) (CTail c2 k u)) -(* axioms *) - | csub0_void: (c1,c2:?) (csub0 g c1 c2) -> (b:?) ~b=Void -> (u1,u2:?) - (csub0 g (CTail c1 (Bind Void) u1) (CTail c2 (Bind b) u2)) - | csub0_abst: (c1,c2:?) (csub0 g c1 c2) -> (u,t:?) (ty0 g c2 u t) -> - (csub0 g (CTail c1 (Bind Abst) t) (CTail c2 (Bind Abbr) u)). - - Hint csub0 : ltlc := Constructors csub0. - - Section csub0_props. (****************************************************) - - Theorem csub0_refl: (g:?; c:?) (csub0 g c c). - XElim c; XAuto. - Qed. - - End csub0_props. - - Hints Resolve csub0_refl : ltlc. - - Section csub0_drop. (*****************************************************) - - Theorem csub0_drop_abbr: (g:?; n:?; c1,c2:?) (csub0 g c1 c2) -> (d1,u:?) - (drop n (0) c1 (CTail d1 (Bind Abbr) u)) -> - (EX d2 | (csub0 g d1 d2) & - (drop n (0) c2 (CTail d2 (Bind Abbr) u)) - ). - XElim n. -(* case 1 : n = 0 *) - Intros; DropGenBase; Rewrite H0 in H; Inversion H; XEAuto. -(* case 2 : n > 0 *) - Intros until 2; XElim H0. -(* case 2.1 : csub0_sort *) - Intros; Inversion H0. -(* case 2.2 : csub0_tail *) - XElim k; Intros; DropGenBase. -(* case 2.2.1 : Bind *) - LApply (H c0 c3); [ Clear H; Intros H | XAuto ]. - LApply (H d1 u0); [ Clear H; Intros H | XAuto ]. - XElim H; XEAuto. -(* case 2.2.2 : Flat *) - LApply (H1 d1 u0); [ Clear H1; Intros H1 | XAuto ]. - XElim H1; XEAuto. -(* case 2.3 : csub0_void *) - Intros; DropGenBase. - LApply (H c0 c3); [ Clear H; Intros H | XAuto ]. - LApply (H d1 u); [ Clear H; Intros H | XAuto ]. - XElim H; XEAuto. -(* case 2.4 : csub0_abst *) - Intros; DropGenBase. - LApply (H c0 c3); [ Clear H; Intros H | XAuto ]. - LApply (H d1 u0); [ Clear H; Intros H | XAuto ]. - XElim H; XEAuto. - Qed. - - Theorem csub0_drop_abst: (g:?; n:?; c1,c2:?) (csub0 g c1 c2) -> (d1,t:?) - (drop n (0) c1 (CTail d1 (Bind Abst) t)) -> - (EX d2 | (csub0 g d1 d2) & - (drop n (0) c2 (CTail d2 (Bind Abst) t)) - - ) \/ - (EX d2 u | (csub0 g d1 d2) & - (drop n (0) c2 (CTail d2 (Bind Abbr) u)) & - (ty0 g d2 u t) - ). - XElim n. -(* case 1 : n = 0 *) - Intros; DropGenBase; Rewrite H0 in H; Inversion H; XEAuto. -(* case 2 : n > 0 *) - Intros until 2; XElim H0. -(* case 2.1 : csub0_sort *) - Intros; Inversion H0. -(* case 2.2 : csub0_tail *) - XElim k; Intros; DropGenBase. -(* case 2.2.1 : Bind *) - LApply (H c0 c3); [ Clear H; Intros H | XAuto ]. - LApply (H d1 t); [ Clear H; Intros H | XAuto ]. - XElim H; Intros; XElim H; XEAuto. -(* case 2.2.2 : Flat *) - LApply (H1 d1 t); [ Clear H1; Intros H1 | XAuto ]. - XElim H1; Intros; XElim H1; XEAuto. -(* case 2.3 : csub0_void *) - Intros; DropGenBase. - LApply (H c0 c3); [ Clear H; Intros H | XAuto ]. - LApply (H d1 t); [ Clear H; Intros H | XAuto ]. - XElim H; Intros; XElim H; XEAuto. -(* case 2.4 : csub0_abst *) - Intros; DropGenBase. - LApply (H c0 c3); [ Clear H; Intros H | XAuto ]. - LApply (H d1 t0); [ Clear H; Intros H | XAuto ]. - XElim H; Intros; XElim H; XEAuto. - Qed. - - End csub0_drop. - - Tactic Definition CSub0Drop := - Match Context With - | [ H1: (csub0 ?1 ?2 ?3); - H2: (drop ?4 (0) ?2 (CTail ?5 (Bind Abbr) ?6)) |- ? ] -> - LApply (csub0_drop_abbr ?1 ?4 ?2 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?5 ?6); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (csub0 ?1 ?2 ?3); - H2: (drop ?4 (0) ?2 (CTail ?5 (Bind Abst) ?6)) |- ? ] -> - LApply (csub0_drop_abst ?1 ?4 ?2 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?5 ?6); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros H1; XElim H1; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/csub0_props.v b/helm/coq-contribs/LAMBDA-TYPES/csub0_props.v deleted file mode 100644 index 04c4eddb1..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/csub0_props.v +++ /dev/null @@ -1,67 +0,0 @@ -(*#* #stop file *) - -Require pc3_props. -Require csub0_defs. - - Section csub0_pc3. (*****************************************************) - - Theorem csub0_pr2: (g:?; c1:?; t1,t2:?) (pr2 c1 t1 t2) -> - (c2:?) (csub0 g c1 c2) -> (pr2 c2 t1 t2). - Intros until 1; XElim H; Intros. -(* case 1: pr2_free *) - XAuto. -(* case 2: pr2_delta *) - CSub0Drop; XEAuto. - Qed. - - Hints Resolve csub0_pr2. - - Opaque pc3. - - Theorem csub0_pc3: (g:?; c1:?; t1,t2:?) (pc3 c1 t1 t2) -> - (c2:?) (csub0 g c1 c2) -> (pc3 c2 t1 t2). - Intros until 1; XElimUsing pc3_ind_left H; XEAuto. - Qed. - - End csub0_pc3. - - Hints Resolve csub0_pc3 : ltlc. - - Section csub0_ty0. (*****************************************************) - - Theorem csub0_ty0: (g:?; c1:?; t1,t2:?) (ty0 g c1 t1 t2) -> - (c2:?) (wf0 g c2) -> (csub0 g c1 c2) -> - (ty0 g c2 t1 t2). - Intros until 1; XElim H; Intros. -(* case 1: ty0_conv *) - EApply ty0_conv; XEAuto. -(* case 2: ty0_sort *) - XEAuto. -(* case 3: ty0_abbr *) - CSub0Drop; EApply ty0_abbr; XEAuto. -(* case 4: ty0_abst *) - CSub0Drop; [ EApply ty0_abst | EApply ty0_abbr ]; XEAuto. -(* case 5: ty0_bind *) - EApply ty0_bind; XEAuto. -(* case 6: ty0_appl *) - EApply ty0_appl; XEAuto. -(* case 7: ty0_cast *) - EApply ty0_cast; XAuto. - Qed. - - Theorem csub0_ty0_ld: (g:?; c:?; u,v:?) (ty0 g c u v) -> (t1,t2:?) - (ty0 g (CTail c (Bind Abst) v) t1 t2) -> - (ty0 g (CTail c (Bind Abbr) u) t1 t2). - Intros; EApply csub0_ty0; XEAuto. - Qed. - - End csub0_ty0. - - Hints Resolve csub0_ty0 csub0_ty0_ld : ltlc. - - Tactic Definition CSub0Ty0 := - Match Context With - [ _: (ty0 ?1 ?2 ?4 ?); _: (ty0 ?1 ?2 ?3 ?7); _: (pc3 ?2 ?4 ?7); - H: (ty0 ?1 (CTail ?2 (Bind Abst) ?4) ?5 ?6) |- ? ] -> - LApply (csub0_ty0_ld ?1 ?2 ?3 ?4); [ Intros H_x | EApply ty0_conv; XEAuto ]; - LApply (H_x ?5 ?6); [ Clear H_x H; Intros | XAuto ]. diff --git a/helm/coq-contribs/LAMBDA-TYPES/csubst0_defs.v b/helm/coq-contribs/LAMBDA-TYPES/csubst0_defs.v deleted file mode 100644 index 046b1978c..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/csubst0_defs.v +++ /dev/null @@ -1,197 +0,0 @@ -Require Export contexts_defs. -Require Export subst0_defs. -Require Export drop_defs. - -(*#* #caption "axioms for strict substitution in contexts", - "substituted tail item: second operand", - "substituted tail item: first operand", - "substituted tail item: both operands" -*) -(*#* #cap #cap c, c1, c2 #alpha v in W, u in V, u1 in V1, u2 in V2, k in z, r in q *) - - Inductive csubst0 : nat -> T -> C -> C -> Prop := - | csubst0_snd : (k:?; i:?; v,u1,u2:?) (subst0 (r k i) v u1 u2) -> (c:?) - (csubst0 (S i) v (CTail c k u1) (CTail c k u2)) - | csubst0_fst : (k:?; i:?; c1,c2:?; v:?) (csubst0 (r k i) v c1 c2) -> - (u:?) (csubst0 (S i) v (CTail c1 k u) (CTail c2 k u)) - | csubst0_both : (k:?; i:?; v,u1,u2:?) (subst0 (r k i) v u1 u2) -> - (c1,c2:?) (csubst0 (r k i) v c1 c2) -> - (csubst0 (S i) v (CTail c1 k u1) (CTail c2 k u2)). - -(*#* #stop file *) - - Hint csubst0 : ltlc := Constructors csubst0. - - Section csubst0_gen_base. (***********************************************) - - Theorem csubst0_gen_tail: (k:?; c1,x:?; u1,v:?; i:?) - (csubst0 (S i) v (CTail c1 k u1) x) -> (OR - (EX u2 | x = (CTail c1 k u2) & - (subst0 (r k i) v u1 u2) - ) | - (EX c2 | x = (CTail c2 k u1) & - (csubst0 (r k i) v c1 c2) - ) | - (EX u2 c2 | x = (CTail c2 k u2) & - (subst0 (r k i) v u1 u2) & - (csubst0 (r k i) v c1 c2) - )). - Intros until 1; InsertEq H '(S i); InsertEq H '(CTail c1 k u1). - XCase H; Clear x v y y0; Intros; Inversion H1. -(* case 1: csubst0_snd *) - Inversion H0; Rewrite H3 in H; Rewrite H5 in H; Rewrite H6 in H; XEAuto. -(* case 2: csubst0_fst *) - Inversion H0; Rewrite H3 in H; Rewrite H4 in H; Rewrite H5 in H; XEAuto. -(* case 2: csubst0_both *) - Inversion H2; Rewrite H5 in H; Rewrite H6 in H; Rewrite H7 in H; - Rewrite H4 in H0; Rewrite H5 in H0; Rewrite H7 in H0; XEAuto. - Qed. - - End csubst0_gen_base. - - Tactic Definition CSubst0GenBase := - Match Context With - | [ H: (csubst0 (S ?1) ?2 (CTail ?3 ?4 ?5) ?6) |- ? ] -> - LApply (csubst0_gen_tail ?4 ?3 ?6 ?5 ?2 ?1); [ Clear H; Intros H | XAuto ]; - XElim H; Intros H; XElim H; Intros. - - Section csubst0_drop. (***************************************************) - - Theorem csubst0_drop_ge : (i,n:?) (le i n) -> - (c1,c2:?; v:?) (csubst0 i v c1 c2) -> - (e:?) (drop n (0) c1 e) -> - (drop n (0) c2 e). - XElim i. -(* case 1: i = 0 *) - Intros; Inversion H0. -(* case 2: i > 0 *) - Intros i; XElim n. -(* case 2.1: n = 0 *) - Intros; Inversion H0. -(* case 2.2: n > 0 *) - Intros until 3; Clear H0; InsertEq H2 '(S i); XElim H0; Intros. - DropGenBase. -(* case 2.2.1: csubst0_snd *) - XAuto. -(* case 2.2.2: csubst0_fst *) - XReplaceIn H0 i0 i; DropGenBase; NewInduction k; XEAuto. -(* case 2.2.3: csubst0_both *) - XReplaceIn H0 i0 i; XReplaceIn H2 i0 i. - DropGenBase; NewInduction k; XEAuto. - Qed. - - Tactic Definition IH := - Match Context With - | [ H0: (n:?) (lt n ?1) -> (c1,c2:?; v:?) (csubst0 ?1 v c1 c2) -> (e:C) (drop n (0) c1 e) -> ?; - H1: (csubst0 ?1 ?2 ?3 ?4); H2: (drop ?5 (0) ?3 ?6) |- ? ] -> - LApply (H0 ?5); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?3 ?4 ?2); [ Clear H0 H1; Intros H0 | XAuto ]; - LApply (H0 ?6); [ Clear H0 H2; Intros H0 | XAuto ]; - XElim H0; Intros H0; [ Idtac | XElim H0 | XElim H0 | XElim H0 ]; Intros - | [ H0: (r ? ?1) = (S ?1) -> (e:?) (drop (S ?2) (0) ?3 e) -> ?; - H1: (drop (S ?2) (0) ?3 ?4) |- ? ] -> - LApply H0; [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?4); [ Clear H0 H1; Intros H0 | XAuto ]; - XElim H0; Intros H0; [ Idtac | XElim H0 | XElim H0 | XElim H0 ]; Intros. - - Theorem csubst0_drop_lt : (i,n:?) (lt n i) -> - (c1,c2:?; v:?) (csubst0 i v c1 c2) -> - (e:?) (drop n (0) c1 e) -> (OR - (drop n (0) c2 e) | - (EX k e0 u w | e = (CTail e0 k u) & - (drop n (0) c2 (CTail e0 k w)) & - (subst0 (minus (r k i) (S n)) v u w) - ) | - (EX k e1 e2 u | e = (CTail e1 k u) & - (drop n (0) c2 (CTail e2 k u)) & - (csubst0 (minus (r k i) (S n)) v e1 e2) - ) | - (EX k e1 e2 u w | e = (CTail e1 k u) & - (drop n (0) c2 (CTail e2 k w)) & - (subst0 (minus (r k i) (S n)) v u w) & - (csubst0 (minus (r k i) (S n)) v e1 e2) - )). - XElim i. -(* case 1: i = 0 *) - Intros; Inversion H. -(* case 2: i > 0 *) - Intros i; XElim n. -(* case 2.1: n = 0 *) - Intros H0; Clear H0; Intros until 1; InsertEq H0 '(S i); XElim H0; - Clear H c1 c2 v y; Intros; DropGenBase; XRewrite e; - Rewrite <- r_arith0 in H; Try Rewrite <- r_arith0 in H0; Replace i with i0; XEAuto. -(* case 2.2: n > 0 *) - Intros until 3; Clear H0; InsertEq H2 '(S i); XElim H0; Clear c1 c2 v y; - Intros; DropGenBase. -(* case 2.2.1: csubst0_snd *) - XEAuto. -(* case 2.2.2: csubst0_fst *) - Replace i0 with i; XAuto; XReplaceIn H0 i0 i; XReplaceIn H2 i0 i; Clear H3 i0. - Apply (r_dis k); Intros; Rewrite (H3 i) in H0; Rewrite (H3 n) in H4. -(* case 2.2.2.1: bind *) - IH; XRewrite e; Try Rewrite <- (H3 n) in H; Try Rewrite <- (H3 n) in H0; - Try Rewrite <- r_arith1 in H4; Try Rewrite <- r_arith1 in H5; XEAuto. -(* case 2.2.2.2: flat *) - IH; XRewrite e; Try Rewrite <- (H3 n) in H2; Try Rewrite <- (H3 n) in H4; XEAuto. -(* case 2.2.3: csubst0_both *) - Replace i0 with i; XAuto; XReplaceIn H0 i0 i; XReplaceIn H2 i0 i; XReplaceIn H3 i0 i; Clear H4 i0. - Apply (r_dis k); Intros; Rewrite (H4 i) in H2; Rewrite (H4 n) in H5. -(* case 2.2.2.1: bind *) - IH; XRewrite e; Try Rewrite <- (H4 n) in H; Try Rewrite <- (H4 n) in H2; - Try Rewrite <- r_arith1 in H5; Try Rewrite <- r_arith1 in H6; XEAuto. -(* case 2.2.3.2: flat *) - IH; XRewrite e; Try Rewrite <- (H4 n) in H3; Try Rewrite <- (H4 n) in H5; XEAuto. - Qed. - - Theorem csubst0_drop_ge_back : (i,n:?) (le i n) -> - (c1,c2:?; v:?) (csubst0 i v c1 c2) -> - (e:?) (drop n (0) c2 e) -> - (drop n (0) c1 e). - XElim i. -(* case 1 : i = 0 *) - Intros; Inversion H0. -(* case 2 : i > 0 *) - Intros i; XElim n. -(* case 2.1 : n = 0 *) - Intros; Inversion H0. -(* case 2.2 : n > 0 *) - Intros until 3; Clear H0; InsertEq H2 '(S i); XElim H0; Intros; - DropGenBase. -(* case 2.2.1 : csubst0_snd *) - XAuto. -(* case 2.2.2 : csubst0_fst *) - XReplaceIn H0 i0 i; NewInduction k; XEAuto. -(* case 2.2.3 : csubst0_both *) - XReplaceIn H0 i0 i; XReplaceIn H2 i0 i; NewInduction k; XEAuto. - Qed. - - End csubst0_drop. - - Tactic Definition CSubst0Drop := - Match Context With - | [ H1: (lt ?2 ?1); - H2: (csubst0 ?1 ?3 ?4 ?5); H3: (drop ?2 (0) ?4 ?6) |- ? ] -> - LApply (csubst0_drop_lt ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5 ?3); [ Clear H_x; Intros H_x | XAuto ]; - LApply (H_x ?6); [ Clear H_x H3; Intros H3 | XAuto ]; - XElim H3; - [ Intros | Intros H3; XElim H3; Intros - | Intros H3; XElim H3; Intros | Intros H3; XElim H3; Intros ] - | [ H1: (le ?1 ?2); - H2: (csubst0 ?1 ?3 ?4 ?5); H3: (drop ?2 (0) ?4 ?6) |- ? ] -> - LApply (csubst0_drop_ge ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5 ?3); [ Clear H_x; Intros H_x | XAuto ]; - LApply (H_x ?6); [ Clear H_x H3; Intros | XAuto ] - | [H2: (csubst0 ?1 ?3 ?4 ?5); H3: (drop ?1 (0) ?4 ?6) |- ? ] -> - LApply (csubst0_drop_ge ?1 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5 ?3); [ Clear H_x H2; Intros H2 | XAuto ]; - LApply (H2 ?6); [ Clear H2 H3; Intros | XAuto ] - | [H2: (csubst0 ?1 ?3 ?4 ?5); H3: (drop ?1 (0) ?5 ?6) |- ? ] -> - LApply (csubst0_drop_ge_back ?1 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5 ?3); [ Clear H_x; Intros H_x | XAuto ]; - LApply (H_x ?6); [ Clear H_x H3; Intros | XAuto ] - | [H2: (csubst0 ?1 ?3 ?4 ?5); H3: (drop ?2 (0) ?5 ?6) |- ? ] -> - LApply (csubst0_drop_ge_back ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5 ?3); [ Clear H_x; Intros H_x | XAuto ]; - LApply (H_x ?6); [ Clear H_x H3; Intros | XAuto ]. - diff --git a/helm/coq-contribs/LAMBDA-TYPES/csubst1_defs.v b/helm/coq-contribs/LAMBDA-TYPES/csubst1_defs.v deleted file mode 100644 index 8d1e570b5..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/csubst1_defs.v +++ /dev/null @@ -1,101 +0,0 @@ -(*#* #stop file *) - -Require Export subst1_defs. -Require Export csubst0_defs. - - Inductive csubst1 [i:nat; v:T; c1:C] : C -> Prop := - | csubst1_refl : (csubst1 i v c1 c1) - | csubst1_single : (c2:?) (csubst0 i v c1 c2) -> (csubst1 i v c1 c2). - - Hint csubst1 : ltlc := Constructors csubst1. - - Section csubst1_props. (**************************************************) - - Theorem csubst1_tail: (k:?; i:?; v,u1,u2:?) (subst1 (r k i) v u1 u2) -> - (c1,c2:?) (csubst1 (r k i) v c1 c2) -> - (csubst1 (S i) v (CTail c1 k u1) (CTail c2 k u2)). - Intros until 1; XElim H; Clear u2. -(* case 1: csubst1_refl *) - Intros until 1; XElim H; Clear c2; XAuto. -(* case 2: csubst1_single *) - Intros until 2; XElim H0; Clear c2; XAuto. - Qed. - - End csubst1_props. - - Hints Resolve csubst1_tail : ltlc. - - Section csubst1_gen_base. (***********************************************) - - Theorem csubst1_gen_tail: (k:?; c1,x:?; u1,v:?; i:?) - (csubst1 (S i) v (CTail c1 k u1) x) -> - (EX u2 c2 | x = (CTail c2 k u2) & - (subst1 (r k i) v u1 u2) & - (csubst1 (r k i) v c1 c2) - ). - Intros; InsertEq H '(CTail c1 k u1); InsertEq H '(S i); - XElim H; Clear x; Intros. -(* case 1: csubst1_refl *) - Rewrite H0; XEAuto. -(* case 2: csubst1_single *) - Rewrite H0 in H; Rewrite H1 in H; Clear H0 H1 y y0. - CSubst0GenBase; Rewrite H; XEAuto. - Qed. - - End csubst1_gen_base. - - Tactic Definition CSubst1GenBase := - Match Context With - | [ H: (csubst1 (S ?1) ?2 (CTail ?3 ?4 ?5) ?6) |- ? ] -> - LApply (csubst1_gen_tail ?4 ?3 ?6 ?5 ?2 ?1); [ Clear H; Intros H | XAuto ]; - XElim H; Intros. - - Section csubst1_drop. (***************************************************) - - Theorem csubst1_drop_ge : (i,n:?) (le i n) -> - (c1,c2:?; v:?) (csubst1 i v c1 c2) -> - (e:?) (drop n (0) c1 e) -> - (drop n (0) c2 e). - Intros until 2; XElim H0; Intros; - Try CSubst0Drop; XAuto. - Qed. - - Theorem csubst1_drop_lt : (i,n:?) (lt n i) -> - (c1,c2:?; v:?) (csubst1 i v c1 c2) -> - (e1:?) (drop n (0) c1 e1) -> - (EX e2 | (csubst1 (minus i n) v e1 e2) & - (drop n (0) c2 e2) - ). - Intros until 2; XElim H0; Intros; - Try ( - CSubst0Drop; Try Rewrite H1; Try Rewrite minus_x_Sy; - Try Rewrite r_minus in H3; Try Rewrite r_minus in H4 - ); XEAuto. - Qed. - - Theorem csubst1_drop_ge_back : (i,n:?) (le i n) -> - (c1,c2:?; v:?) (csubst1 i v c1 c2) -> - (e:?) (drop n (0) c2 e) -> - (drop n (0) c1 e). - Intros until 2; XElim H0; Intros; - Try CSubst0Drop; XAuto. - Qed. - - End csubst1_drop. - - Tactic Definition CSubst1Drop := - Match Context With - | [ H1: (lt ?2 ?1); - H2: (csubst1 ?1 ?3 ?4 ?5); H3: (drop ?2 (0) ?4 ?6) |- ? ] -> - LApply (csubst1_drop_lt ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5 ?3); [ Clear H_x; Intros H_x | XAuto ]; - LApply (H_x ?6); [ Clear H_x H3; Intros H3 | XAuto ]; - XElim H3; Intros - | [H2: (csubst1 ?1 ?3 ?4 ?5); H3: (drop ?1 (0) ?4 ?6) |- ? ] -> - LApply (csubst1_drop_ge ?1 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5 ?3); [ Clear H_x H2; Intros H2 | XAuto ]; - LApply (H2 ?6); [ Clear H2 H3; Intros | XAuto ] - | [ H2: (csubst1 ?1 ?3 ?4 ?5); H3: (drop ?2 (0) ?4 ?6) |- ? ] -> - LApply (csubst1_drop_ge ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5 ?3); [ Clear H_x; Intros H_x | XAuto ]; - LApply (H_x ?6); [ Clear H_x H3; Intros | XAuto ]. diff --git a/helm/coq-contribs/LAMBDA-TYPES/description b/helm/coq-contribs/LAMBDA-TYPES/description deleted file mode 100644 index 06f662322..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/description +++ /dev/null @@ -1,13 +0,0 @@ -Name: lambda-delta -Title: A formalization of a lambda-typed lambda-calculus with abbreviations -Author: Ferruccio Guidi -Email: fguidi@cs.unibo.it -Homepage: http://www.cs.unibo.it/~fguidi -Institution: Department of Computer Science, University of Bologna -Address: Mura Anteo Zamboni 7, 40127 Bologna, ITALY -Date: March 31, 2005 -Description: -Url: -Keywords: lambda-types, lambda-calculus, abbreviations -Version: 7.3.1 -Require: diff --git a/helm/coq-contribs/LAMBDA-TYPES/drop_defs.v b/helm/coq-contribs/LAMBDA-TYPES/drop_defs.v deleted file mode 100644 index ee7eea93c..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/drop_defs.v +++ /dev/null @@ -1,130 +0,0 @@ -Require Export contexts_defs. -Require Export lift_defs. - -(*#* #caption "current axioms for dropping", - "base case", "untouched tail item", - "dropped tail item", "updated tail item" -*) -(*#* #cap #alpha c in C1, e in C2, u in V, k in z, n in k, d in i, r in q *) - - Inductive drop: nat -> nat -> C -> C -> Prop := - | drop_sort: (h,d,n:?) (drop h d (CSort n) (CSort n)) - | drop_comp: (c,e:?) (drop (0) (0) c e) -> - (k:?; u:?) (drop (0) (0) (CTail c k u) (CTail e k u)) - | drop_drop: (k:?; h:?; c,e:?) (drop (r k h) (0) c e) -> - (u:?) (drop (S h) (0) (CTail c k u) e) - | drop_skip: (k:?; h,d:?; c,e:?) (drop h (r k d) c e) -> (u:?) - (drop h (S d) (CTail c k (lift h (r k d) u)) (CTail e k u)). - -(*#* #stop file *) - - Hint drop : ltlc := Constructors drop. - - Hint discr : ltlc := Extern 4 (drop ? ? ? ?) Simpl. - - Section drop_gen_base. (**************************************************) - - Theorem drop_gen_sort: (n,h,d:?; x:?) - (drop h d (CSort n) x) -> x = (CSort n). - Intros until 1; InsertEq H '(CSort n); XElim H; Intros; - Try Inversion H1; XAuto. - Qed. - - Theorem drop_gen_refl: (x,e:?) (drop (0) (0) x e) -> x = e. - Intros until 1; Repeat InsertEq H '(0); XElim H; Intros. -(* case 1: drop_sort *) - XAuto. -(* case 2: drop_comp *) - Rewrite H0; XAuto. -(* case 3: drop_drop *) - Inversion H2. -(* case 4: drop_skip *) - Inversion H1. - Qed. - - Theorem drop_gen_drop: (k:?; c,x:?; u:?; h:?) - (drop (S h) (0) (CTail c k u) x) -> - (drop (r k h) (0) c x). - Intros until 1; - InsertEq H '(CTail c k u); InsertEq H '(0); InsertEq H '(S h); - XElim H; Intros. -(* case 1: drop_sort *) - Inversion H1. -(* case 2: drop_comp *) - Inversion H1. -(* case 3: drop_drop *) - Inversion H1; Inversion H3. - Rewrite <- H5; Rewrite <- H6; Rewrite <- H7; XAuto. -(* case 4: drop_skip *) - Inversion H2. - Qed. - - Theorem drop_gen_skip_r: (c,x:?; u:?; h,d:?; k:?) - (drop h (S d) x (CTail c k u)) -> - (EX e | x = (CTail e k (lift h (r k d) u)) & (drop h (r k d) e c)). - Intros; Inversion_clear H; XEAuto. - Qed. - - Theorem drop_gen_skip_l: (c,x:?; u:?; h,d:?; k:?) - (drop h (S d) (CTail c k u) x) -> - (EX e v | x = (CTail e k v) & - u = (lift h (r k d) v) & - (drop h (r k d) c e) - ). - Intros; Inversion_clear H; XEAuto. - Qed. - - End drop_gen_base. - - Hints Resolve drop_gen_refl : ltlc. - - Tactic Definition DropGenBase := - Match Context With - | [ H: (drop (0) (0) ?0 ?1) |- ? ] -> - LApply (drop_gen_refl ?0 ?1); [ Clear H; Intros | XAuto ] - | [ H: (drop ?0 ?1 (CSort ?2) ?3) |- ? ] -> - LApply (drop_gen_sort ?2 ?0 ?1 ?3); [ Clear H; Intros | XAuto ] - | [ H: (drop (S ?0) (0) (CTail ?1 ?2 ?3) ?4) |- ? ] -> - LApply (drop_gen_drop ?2 ?1 ?4 ?3 ?0); [ Clear H; Intros | XAuto ] - | [ H: (drop ?1 (S ?2) ?3 (CTail ?4 ?5 ?6)) |- ? ] -> - LApply (drop_gen_skip_r ?4 ?3 ?6 ?1 ?2 ?5); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (drop ?1 (S ?2) (CTail ?4 ?5 ?6) ?3) |- ? ] -> - LApply (drop_gen_skip_l ?4 ?3 ?6 ?1 ?2 ?5); [ Clear H; Intros H | XAuto ]; - XElim H; Intros. - - Section drop_props. (*****************************************************) - - Theorem drop_skip_bind: (h,d:?; c,e:?) (drop h d c e) -> (b:?; u:?) - (drop h (S d) (CTail c (Bind b) (lift h d u)) (CTail e (Bind b) u)). - Intros; Pattern 2 d; Replace d with (r (Bind b) d); XAuto. - Qed. - - Theorem drop_refl: (c:?) (drop (0) (0) c c). - XElim c; XAuto. - Qed. - - Hints Resolve drop_refl : ltlc. - - Theorem drop_S: (b:?; c,e:?; u:?; h:?) - (drop h (0) c (CTail e (Bind b) u)) -> - (drop (S h) (0) c e). - XElim c. -(* case 1: CSort *) - Intros; DropGenBase; Inversion H. -(* case 2: CTail *) - XElim h; Intros; DropGenBase. -(* case 2.1: h = 0 *) - Inversion H0; XAuto. -(* case 2.1: h > 0 *) - Apply drop_drop; RRw; XEAuto. (**) (* explicit constructor *) - Qed. - - End drop_props. - - Hints Resolve drop_skip_bind drop_refl drop_S : ltlc. - - Tactic Definition DropS := - Match Context With - [ _: (drop ?1 (0) ?2 (CTail ?3 (Bind ?4) ?5)) |- ? ] -> - LApply (drop_S ?4 ?2 ?3 ?5 ?1); [ Intros | XAuto ]. diff --git a/helm/coq-contribs/LAMBDA-TYPES/drop_props.v b/helm/coq-contribs/LAMBDA-TYPES/drop_props.v deleted file mode 100644 index 84c8676fb..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/drop_props.v +++ /dev/null @@ -1,228 +0,0 @@ -(*#* #stop file *) - -Require lift_gen. -Require drop_defs. - -(*#* #caption "main properties of drop" #clauses *) - - Section confluence. (*****************************************************) - - Tactic Definition IH := - Match Context With - [ H1: (drop ?1 ?2 c ?3); H2: (drop ?1 ?2 c ?4) |- ? ] -> - LApply (H ?4 ?2 ?1); [ Clear H H2; Intros H | XAuto ]; - LApply (H ?3); [ Clear H H1; Intros | XAuto ]. - -(*#* #caption "confluence, first case" *) -(*#* #cap #alpha c in C, x1 in C1, x2 in C2, d in i *) - - Theorem drop_mono : (c,x1:?; d,h:?) (drop h d c x1) -> - (x2:?) (drop h d c x2) -> x1 = x2. - XElim c. -(* case 1: CSort *) - Intros; Repeat DropGenBase; Rewrite H0; XAuto. -(* case 2: CTail k *) - XElim d. -(* case 2.1: d = 0 *) - XElim h; Intros; Repeat DropGenBase; Try Rewrite <- H0; XEAuto. -(* case 2.2: d > 0 *) - Intros; Repeat DropGenBase; Rewrite H1; Rewrite H2; Rewrite H5 in H3; - LiftGen; IH; XAuto. - Qed. - -(*#* #caption "confluence, second case" *) -(*#* #cap #alpha c in C1, c0 in E1, e in C2, e0 in E2, u in V1, v in V2, i in k, d in i *) - - Theorem drop_conf_lt: (b:?; i:?; u:?; c0,c:?) - (drop i (0) c (CTail c0 (Bind b) u)) -> - (e:?; h,d:?) (drop h (S (plus i d)) c e) -> - (EX v e0 | u = (lift h d v) & - (drop i (0) e (CTail e0 (Bind b) v)) & - (drop h d c0 e0) - ). - XElim i. -(* case 1 : i = 0 *) - Intros until 1. - DropGenBase. - Rewrite H in H0; Clear H. - Inversion H0; XEAuto. -(* case 2 : i > 0 *) - Intros i; XElim c. -(* case 2.1 : CSort *) - Intros; Inversion H0. -(* case 2.2 : CTail k *) - XElim k; Intros; Repeat DropGenBase; Rewrite H2; Clear H2 H3 e t. -(* case 2.2.1 : Bind *) - LApply (H u c0 c); [ Clear H H0 H1; Intros H | XAuto ]. - LApply (H x0 h d); [ Clear H H9; Intros H | XAuto ]. - XElim H; XEAuto. -(* case 2.2.2 : Flat *) - LApply H0; [ Clear H H0 H1; Intros H | XAuto ]. - LApply (H x0 h d); [ Clear H H9; Intros H | XAuto ]. - XElim H; XEAuto. - Qed. - -(*#* #caption "confluence, third case" *) -(*#* #cap #alpha c in C, a in C1, e in C2, i in k, d in i *) - - Theorem drop_conf_ge: (i:?; a,c:?) (drop i (0) c a) -> - (e:?; h,d:?) (drop h d c e) -> (le (plus d h) i) -> - (drop (minus i h) (0) e a). - XElim i. -(* case 1 : i = 0 *) - Intros until 1. - DropGenBase; Rewrite H in H0; Clear H c. - Inversion H1; Rewrite H2; Simpl; Clear H1. - PlusO; Rewrite H in H0; Rewrite H1 in H0; Clear H H1 d h. - DropGenBase; Rewrite <- H; XAuto. -(* case 2 : i > 0 *) - Intros i; XElim c. -(* case 2.1 : CSort *) - Intros; Repeat DropGenBase; Rewrite H1; Rewrite H0; XAuto. -(* case 2.2 : CTail k *) - XElim k; Intros; DropGenBase; - ( NewInduction d; - [ NewInduction h; DropGenBase; - [ Rewrite <- H2; Simpl; XAuto | Clear IHh ] - | DropGenBase; Rewrite H2; Clear IHd H2 H4 e t ] ). -(* case 2.2.1 : Bind, d = 0, h > 0 *) - LApply (H a c); [ Clear H H0 H1; Intros H | XAuto ]. - LApply (H e h (0)); XAuto. -(* case 2.2.2 : Bind, d > 0 *) - LApply (H a c); [ Clear H H0 H1; Intros H | XAuto ]. - LApply (H x0 h d); [ Clear H H4; Intros H | XAuto ]. - LApply H; [ Clear H; Simpl in H3; Intros H | XAuto ]. - Rewrite <- minus_Sn_m; XEAuto. -(* case 2.2.3 : Flat, d = 0, h > 0 *) - LApply H0; [ Clear H H0 H1; Intros H | XAuto ]. - LApply (H e (S h) (0)); XAuto. -(* case 2.2.4 : Flat, d > 0 *) - LApply H0; [ Clear H H0 H1; Intros H | XAuto ]. - LApply (H x0 h (S d)); [ Clear H H4; Intros H | XAuto ]. - LApply H; [ Clear H; Simpl in H3; Intros H | XAuto ]. - Rewrite <- minus_Sn_m in H; [ Idtac | XEAuto ]. - Rewrite <- minus_Sn_m; XEAuto. - Qed. - - End confluence. - - Section transitivity. (***************************************************) - -(*#* #caption "transitivity, first case" *) -(*#* #cap #alpha c1 in C1, c2 in C2, e1 in D1, e2 in D2, d in i, i in k *) - - Theorem drop_trans_le : (i,d:?) (le i d) -> - (c1,c2:?; h:?) (drop h d c1 c2) -> - (e2:?) (drop i (0) c2 e2) -> - (EX e1 | (drop i (0) c1 e1) & (drop h (minus d i) e1 e2)). - XElim i. -(* case 1 : i = 0 *) - Intros. - DropGenBase; Rewrite H1 in H0. - Rewrite <- minus_n_O; XEAuto. -(* case 2 : i > 0 *) - Intros i IHi; XElim d. -(* case 2.1 : d = 0 *) - Intros; Inversion H. -(* case 2.2 : d > 0 *) - Intros d IHd; XElim c1. -(* case 2.2.1 : CSort *) - Intros. - DropGenBase; Rewrite H0 in H1. - DropGenBase; Rewrite H1; XEAuto. -(* case 2.2.2 : CTail k *) - Intros c1 IHc; XElim k; Intros; - DropGenBase; Rewrite H0 in H1; Rewrite H2; Clear IHd H0 H2 c2 t; - DropGenBase. -(* case 2.2.2.1 : Bind *) - LApply (IHi d); [ Clear IHi; Intros IHi | XAuto ]. - LApply (IHi c1 x0 h); [ Clear IHi H8; Intros IHi | XAuto ]. - LApply (IHi e2); [ Clear IHi H0; Intros IHi | XAuto ]. - XElim IHi; XEAuto. -(* case 2.2.2.2 : Flat *) - LApply (IHc x0 h); [ Clear IHc H8; Intros IHc | XAuto ]. - LApply (IHc e2); [ Clear IHc H0; Intros IHc | XAuto ]. - XElim IHc; XEAuto. - Qed. - -(*#* #caption "transitivity, second case" *) -(*#* #cap #alpha c1 in C1, c2 in C, e2 in C2, d in i, i in k *) - - Theorem drop_trans_ge : (i:?; c1,c2:?; d,h:?) (drop h d c1 c2) -> - (e2:?) (drop i (0) c2 e2) -> (le d i) -> - (drop (plus i h) (0) c1 e2). - XElim i. -(* case 1: i = 0 *) - Intros. - DropGenBase; Rewrite <- H0. - Inversion H1; Rewrite H2 in H; XAuto. -(* case 2 : i > 0 *) - Intros i IHi; XElim c1; Simpl. -(* case 2.1: CSort *) - Intros. - DropGenBase; Rewrite H in H0. - DropGenBase; Rewrite H0; XAuto. -(* case 2.2: CTail *) - Intros c1 IHc; XElim d. -(* case 2.2.1: d = 0 *) - XElim h; Intros. -(* case 2.2.1.1: h = 0 *) - DropGenBase; Rewrite <- H in H0; - DropGenBase; Rewrite <- plus_n_O; XAuto. -(* case 2.2.1.2: h > 0 *) - DropGenBase; Rewrite <- plus_n_Sm. - Apply drop_drop; RRw; XEAuto. (**) (* explicit constructor *) -(* case 2.2.2: d > 0 *) - Intros d IHd; Intros. - DropGenBase; Rewrite H in IHd; Rewrite H in H0; Rewrite H2 in IHd; Rewrite H2; Clear IHd H H2 c2 t; - DropGenBase; Apply drop_drop; NewInduction k; Simpl; XEAuto. (**) (* explicit constructor *) - Qed. - - End transitivity. - - Tactic Definition DropDis := - Match Context With - [ H1: (drop ?1 ?2 ?3 ?4); H2: (drop ?1 ?2 ?3 ?5) |- ? ] -> - LApply (drop_mono ?3 ?5 ?2 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?4); [ Clear H_x H1; Intros H1; Rewrite H1 in H2 | XAuto ] - | [ H1: (drop ?0 (0) ?1 (CTail ?2 (Bind ?3) ?4)); - H2: (drop ?5 (S (plus ?0 ?6)) ?1 ?7) |- ? ] -> - LApply (drop_conf_lt ?3 ?0 ?4 ?2 ?1); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?7 ?5 ?6); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros - | [ _: (drop ?0 (0) ?1 ?2); _: (drop ?5 (0) ?1 ?7); - _: (lt ?5 ?0) |- ? ] -> - LApply (drop_conf_ge ?0 ?2 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?7 ?5 (0)); [ Clear H_x; Intros H_x | XAuto ]; - Simpl in H_x; LApply H_x; [ Clear H_x; Intros | XAuto ] - | [ _: (drop ?1 (0) ?2 (CTail ?3 (Bind ?) ?)); - _: (drop (1) ?1 ?2 ?4) |- ? ] -> - LApply (drop_conf_ge (S ?1) ?3 ?2); [ Intros H_x | XEAuto ]; - LApply (H_x ?4 (1) ?1); [ Clear H_x; Intros H_x | XAuto ]; - LApply H_x; [ Clear H_x; Intros | Rewrite plus_sym; XAuto ]; ( - Match Context With - [ H: (drop (minus (S ?1) (1)) (0) ?4 ?3) |- ? ] -> - Simpl in H; Rewrite <- minus_n_O in H ) - | [ H0: (drop ?0 (0) ?1 ?2); H2: (lt ?6 ?0); - H1: (drop (1) ?6 ?1 ?7) |- ? ] -> - LApply (drop_conf_ge ?0 ?2 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?7 (1) ?6); [ Clear H_x; Intros H_x | XAuto ]; - LApply H_x; [ Clear H_x; Intros | Rewrite plus_sym; XAuto ] - | [ H0: (drop ?0 (0) ?1 ?2); - H1: (drop ?5 ?6 ?1 ?7) |- ? ] -> - LApply (drop_conf_ge ?0 ?2 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?7 ?5 ?6); [ Clear H_x; Intros H_x | XAuto ]; - LApply H_x; [ Clear H_x; Intros | XAuto ] - | [ H0: (lt ?1 ?2); - H1: (drop ?3 ?2 ?4 ?5); H2: (drop ?1 (0) ?5 ?6) |- ? ] -> - LApply (drop_trans_le ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5 ?3); [ Clear H_x H1; Intros H_x | XAuto ]; - LApply (H_x ?6); [ Clear H_x H2; Intros H_x | XAuto ]; - XElim H_x; Intros - | [ H0: (le ?1 ?2); - H1: (drop ?3 ?1 ?4 ?5); H2: (drop ?2 (0) ?5 ?6) |- ? ] -> - LApply (drop_trans_ge ?2 ?4 ?5 ?1 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?6); [ Clear H1 H2; Intros H1 | XAuto ]; - LApply H1; [ Clear H1; Intros | XAuto ]. - -(*#* #single *) diff --git a/helm/coq-contribs/LAMBDA-TYPES/fsubst0_defs.v b/helm/coq-contribs/LAMBDA-TYPES/fsubst0_defs.v deleted file mode 100644 index fa9404936..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/fsubst0_defs.v +++ /dev/null @@ -1,20 +0,0 @@ -Require Export subst0_defs. -Require Export csubst0_defs. - -(*#* #caption "\\kern-1.2pt axioms for strict substitution in focalized terms", - "substituted term part", - "substituted context part", - "substituted both parts" -*) -(*#* #cap #cap c1, c2, t1, t2 #alpha v in W *) - - Inductive fsubst0 [i:nat; v:T; c1:C; t1:T] : C -> T -> Prop := - | fsubst0_snd : (t2:?) (subst0 i v t1 t2) -> (fsubst0 i v c1 t1 c1 t2) - | fsubst0_fst : (c2:?) (csubst0 i v c1 c2) -> (fsubst0 i v c1 t1 c2 t1) - | fsubst0_both : (t2:?) (subst0 i v t1 t2) -> - (c2:?) (csubst0 i v c1 c2) -> (fsubst0 i v c1 t1 c2 t2). - -(*#* #stop file *) - - Hint fsubst0 : ltlc := Constructors fsubst0. - diff --git a/helm/coq-contribs/LAMBDA-TYPES/lift_defs.v b/helm/coq-contribs/LAMBDA-TYPES/lift_defs.v deleted file mode 100644 index 8b69ec4b4..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/lift_defs.v +++ /dev/null @@ -1,238 +0,0 @@ -(*#* #stop file *) - -Require Export terms_defs. - - Fixpoint lref_map [g:nat->nat; d:nat; t:T] : T := Cases t of - | (TSort n) => (TSort n) - | (TLRef n) => - if (blt n d) then (TLRef n) else (TLRef (g n)) - | (TTail k u t) => - (TTail k (lref_map g d u) (lref_map g (s k d) t)) - end. - - Definition lift : nat -> nat -> T -> T := - [h](lref_map [x](plus x h)). - - Section lift_rw. (********************************************************) - - Theorem lift_sort: (n:?; h,d:?) (lift h d (TSort n)) = (TSort n). - XAuto. - Qed. - - Theorem lift_lref_lt: (n:?; h,d:?) (lt n d) -> - (lift h d (TLRef n)) = (TLRef n). - Intros; Unfold lift; Simpl. - Replace (blt n d) with true; XAuto. - Qed. - - Theorem lift_lref_ge: (n:?; h,d:?) (le d n) -> - (lift h d (TLRef n)) = (TLRef (plus n h)). - - Intros; Unfold lift; Simpl. - Replace (blt n d) with false; XAuto. - Qed. - - Theorem lift_tail: (k:?; u,t:?; h,d:?) - (lift h d (TTail k u t)) = - (TTail k (lift h d u) (lift h (s k d) t)). - XAuto. - Qed. - - Theorem lift_bind: (b:?; u,t:?; h,d:?) - (lift h d (TTail (Bind b) u t)) = - (TTail (Bind b) (lift h d u) (lift h (S d) t)). - XAuto. - Qed. - - Theorem lift_flat: (f:?; u,t:?; h,d:?) - (lift h d (TTail (Flat f) u t)) = - (TTail (Flat f) (lift h d u) (lift h d t)). - XAuto. - Qed. - - End lift_rw. - - Hints Resolve lift_lref_lt lift_bind lift_flat : ltlc. - - Tactic Definition LiftTailRw := - Repeat (Rewrite lift_tail Orelse Rewrite lift_bind Orelse Rewrite lift_flat). - - Tactic Definition LiftTailRwBack := - Repeat (Rewrite <- lift_tail Orelse Rewrite <- lift_bind Orelse Rewrite <- lift_flat). - - Section lift_gen. (*******************************************************) - - Theorem lift_gen_sort: (h,d,n:?; t:?) (TSort n) = (lift h d t) -> - t = (TSort n). - XElim t; Intros. -(* case 1 : TSort *) - XAuto. -(* case 2 : TLRef n0 *) - Apply (lt_le_e n0 d); Intros. -(* case 2.1 : n0 < d *) - Rewrite lift_lref_lt in H; [ Inversion H | XAuto ]. -(* case 2.2 : n0 >= d *) - Rewrite lift_lref_ge in H; [ Inversion H | XAuto ]. -(* case 3 : TTail k *) - Rewrite lift_tail in H1; Inversion H1. - Qed. - - Theorem lift_gen_lref_lt: (h,d,n:?) (lt n d) -> - (t:?) (TLRef n) = (lift h d t) -> - t = (TLRef n). - XElim t; Intros. -(* case 1 : TSort *) - XAuto. -(* case 2 : TLRef n0 *) - Apply (lt_le_e n0 d); Intros. -(* case 2.1 : n0 < d *) - Rewrite lift_lref_lt in H0; XAuto. -(* case 2.2 : n0 >= d *) - Rewrite lift_lref_ge in H0; [ Inversion H0; Clear H0 | XAuto ]. - Rewrite H3 in H; Clear H3 n. - EApply le_false; [ Apply H1 | XEAuto ]. -(* case 3 : TTail k *) - Rewrite lift_tail in H2; Inversion H2. - Qed. - - Theorem lift_gen_lref_false: (h,d,n:?) (le d n) -> (lt n (plus d h)) -> - (t:?) (TLRef n) = (lift h d t) -> - (P:Prop) P. - XElim t; Intros. -(* case 1 : TSort *) - Inversion H1. -(* case 2 : TLRef n0 *) - Apply (lt_le_e n0 d); Intros. -(* case 2.1 : n0 < d *) - Rewrite lift_lref_lt in H1; [ Inversion H1; Clear H1 | XAuto ]. - Rewrite <- H4 in H2; Clear H4 n0. - EApply le_false; [ Apply H | XEAuto ]. -(* case 2.2 : n0 >= d *) - Rewrite lift_lref_ge in H1; [ Inversion H1; Clear H1 | XAuto ]. - Rewrite H4 in H0; Clear H4. - EApply le_false; [ Apply H2 | XEAuto ]. -(* case 3 : TTail k *) - Rewrite lift_tail in H3; Inversion H3. - Qed. - - Theorem lift_gen_lref_ge: (h,d,n:?) (le d n) -> - (t:?) (TLRef (plus n h)) = (lift h d t) -> - t = (TLRef n). - XElim t; Intros. -(* case 1 : TSort *) - Inversion H0. -(* case 2 : TLRef n0 *) - Apply (lt_le_e n0 d); Intros. -(* case 2.1 : n0 < d *) - Rewrite lift_lref_lt in H0; [ Inversion H0; Clear H0 | XAuto ]. - Rewrite <- H3 in H1; Clear H3 n0. - EApply le_false; [ Apply H | XEAuto ]. -(* case 2.2 : n0 >= d *) - Rewrite lift_lref_ge in H0; [ Inversion H0; XEAuto | XAuto ]. -(* case 3 : TTail k *) - Rewrite lift_tail in H2; Inversion H2. - Qed. - -(* NOTE: lift_gen_tail should be used instead of these two *) (**) - Theorem lift_gen_bind: (b:?; u,t,x:?; h,d:?) - (TTail (Bind b) u t) = (lift h d x) -> - (EX y z | x = (TTail (Bind b) y z) & - u = (lift h d y) & - t = (lift h (S d) z) - ). - XElim x; Intros. -(* case 1 : TSort *) - Inversion H. -(* case 2 : TLRef n *) - Apply (lt_le_e n d); Intros. -(* case 2.1 : n < d *) - Rewrite lift_lref_lt in H; [ Inversion H | XAuto ]. -(* case 2.2 : n >= d *) - Rewrite lift_lref_ge in H; [ Inversion H | XAuto ]. -(* case 3 : TTail k *) - Rewrite lift_tail in H1; Inversion H1. - XEAuto. - Qed. - - Theorem lift_gen_flat: (f:?; u,t,x:?; h,d:?) - (TTail (Flat f) u t) = (lift h d x) -> - (EX y z | x = (TTail (Flat f) y z) & - u = (lift h d y) & - t = (lift h d z) - ). - XElim x; Intros. -(* case 1 : TSort *) - Inversion H. -(* case 2 : TLRef n *) - Apply (lt_le_e n d); Intros. -(* case 2.1 : n < d *) - Rewrite lift_lref_lt in H; [ Inversion H | XAuto ]. -(* case 2.2 : n >= d *) - Rewrite lift_lref_ge in H; [ Inversion H | XAuto ]. -(* case 3 : TTail k *) - Rewrite lift_tail in H1; Inversion H1. - XEAuto. - Qed. - - End lift_gen. - - Tactic Definition LiftGenBase := - Match Context With - | [ H: (TSort ?0) = (lift ?1 ?2 ?3) |- ? ] -> - LApply (lift_gen_sort ?1 ?2 ?0 ?3); [ Clear H; Intros | XAuto ] - | [ H1: (le ?1 ?2); H2: (lt ?2 (plus ?1 ?3)); - H3: (TLRef ?2) = (lift ?3 ?1 ?4) |- ? ] -> - Apply (lift_gen_lref_false ?3 ?1 ?2 H1 H2 ?4 H3); XAuto - | [ _: (TLRef ?1) = (lift (S ?1) (0) ?2) |- ? ] -> - EApply lift_gen_lref_false; [ Idtac | Idtac | XEAuto ]; XEAuto - | [ H: (TLRef ?1) = (lift (1) ?1 ?2) |- ? ] -> - LApply (lift_gen_lref_false (1) ?1 ?1); [ Intros H_x | XAuto ]; - LApply H_x; [ Clear H_x; Intros H_x | Arith7' ?1; XAuto ]; - LApply (H_x ?2); [ Clear H_x; Intros H_x | XAuto ]; - Apply H_x - | [ H: (TLRef (plus ?0 ?1)) = (lift ?1 ?2 ?3) |- ? ] -> - LApply (lift_gen_lref_ge ?1 ?2 ?0); [ Intros H_x | XAuto ]; - LApply (H_x ?3); [ Clear H_x H; Intros | XAuto ] - | [ H1: (TLRef ?0) = (lift ?1 ?2 ?3); H2: (lt ?0 ?4) |- ? ] -> - LApply (lift_gen_lref_lt ?1 ?2 ?0); - [ Intros H_x | Apply lt_le_trans with m:=?4; XEAuto ]; - LApply (H_x ?3); [ Clear H_x H1; Intros | XAuto ] - | [ H: (TLRef ?0) = (lift ?1 ?2 ?3) |- ? ] -> - LApply (lift_gen_lref_lt ?1 ?2 ?0); [ Intros H_x | XEAuto ]; - LApply (H_x ?3); [ Clear H_x H; Intros | XAuto ] - | [ H: (TTail (Bind ?0) ?1 ?2) = (lift ?3 ?4 ?5) |- ? ] -> - LApply (lift_gen_bind ?0 ?1 ?2 ?5 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (TTail (Flat ?0) ?1 ?2) = (lift ?3 ?4 ?5) |- ? ] -> - LApply (lift_gen_flat ?0 ?1 ?2 ?5 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XElim H; Intros. - - Section lift_props. (*****************************************************) - - Theorem lift_r: (t:?; d:?) (lift (0) d t) = t. - XElim t; Intros. -(* case 1: TSort *) - XAuto. -(* case 2: TLRef n *) - Apply (lt_le_e n d); Intros. -(* case 2.1: n < d *) - Rewrite lift_lref_lt; XAuto. -(* case 2.2: n >= d *) - Rewrite lift_lref_ge; XAuto. -(* case 3: TTail *) - LiftTailRw; XAuto. - Qed. - - Theorem lift_lref_gt : (d,n:?) (lt d n) -> - (lift (1) d (TLRef (pred n))) = (TLRef n). - Intros. - Rewrite lift_lref_ge. -(* case 1: first branch *) - Rewrite <- plus_sym; Simpl; Rewrite <- (S_pred n d); XAuto. -(* case 2: second branch *) - Apply le_S_n; Rewrite <- (S_pred n d); XAuto. - Qed. - - End lift_props. - - Hints Resolve lift_r lift_lref_gt : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/lift_gen.v b/helm/coq-contribs/LAMBDA-TYPES/lift_gen.v deleted file mode 100644 index 63b74709d..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/lift_gen.v +++ /dev/null @@ -1,116 +0,0 @@ -(*#* #stop file *) - -Require lift_defs. - - Section lift_ini. (*******************************************************) - - Tactic Definition IH := - Match Context With - | [ H1: (lift ?1 ?2 t) = (lift ?1 ?2 ?3) |- ? ] -> - LApply (H ?3 ?1 ?2); [ Clear H H1; Intros | XAuto ] - | [ H1: (lift ?1 ?2 t0) = (lift ?1 ?2 ?3) |- ? ] -> - LApply (H0 ?3 ?1 ?2); [ Clear H0 H1; Intros | XAuto ]. - -(*#* #caption "main properties of lift" #clauses lift_props *) - -(*#* #caption "injectivity" *) -(*#* #cap #alpha x in T1, t in T2, d in i *) - - Theorem lift_inj : (x,t:?; h,d:?) (lift h d x) = (lift h d t) -> x = t. - XElim x. -(* case 1 : TSort *) - Intros; Rewrite lift_sort in H; LiftGenBase; XAuto. -(* case 2 : TLRef n *) - Intros; Apply (lt_le_e n d); Intros. -(* case 2.1 : n < d *) - Rewrite lift_lref_lt in H; [ LiftGenBase; XAuto | XAuto ]. -(* case 2.2 : n >= d *) - Rewrite lift_lref_ge in H; [ LiftGenBase; XAuto | XAuto ]. -(* case 3 : TTail k *) - XElim k; Intros; [ Rewrite lift_bind in H1 | Rewrite lift_flat in H1 ]; - LiftGenBase; Rewrite H1; IH; IH; XAuto. - Qed. - - End lift_ini. - - Section lift_gen_lift. (**************************************************) - - Tactic Definition IH := - Match Context With - | [ H_x: (lift ?0 ?1 t) = (lift ?2 (plus ?3 ?0) ?4) |- ? ] -> - LApply (H ?4 ?0 ?2 ?1 ?3); [ Clear H; Intros H | XAuto ]; - LApply H; [ Clear H H_x; Intros H | XAuto ]; - XElim H; Intros - | [ H_x: (lift ?0 ?1 t0) = (lift ?2 (plus ?3 ?0) ?4) |- ? ] -> - LApply (H0 ?4 ?0 ?2 ?1 ?3); [ Clear H0; Intros H0 | XAuto ]; - LApply H0; [ Clear H0 H_x; Intros H0 | XAuto ]; - XElim H0; Intros. - -(*#* #caption "generation lemma for lift" *) -(*#* #cap #cap t1 #alpha t2 in T, x in T2, d1 in i1, d2 in i2 *) - - Theorem lift_gen_lift : (t1,x:?; h1,h2,d1,d2:?) (le d1 d2) -> - (lift h1 d1 t1) = (lift h2 (plus d2 h1) x) -> - (EX t2 | x = (lift h1 d1 t2) & - t1 = (lift h2 d2 t2) - ). - XElim t1; Intros. -(* case 1 : TSort *) - Rewrite lift_sort in H0. - LiftGenBase; Rewrite H0; Clear H0 x. - EApply ex2_intro; Rewrite lift_sort; XAuto. -(* case 2 : TLRef n *) - Apply (lt_le_e n d1); Intros. -(* case 2.1 : n < d1 *) - Rewrite lift_lref_lt in H0; [ Idtac | XAuto ]. - LiftGenBase; Rewrite H0; Clear H0 x. - EApply ex2_intro; Rewrite lift_lref_lt; XEAuto. -(* case 2.2 : n >= d1 *) - Rewrite lift_lref_ge in H0; [ Idtac | XAuto ]. - Apply (lt_le_e n d2); Intros. -(* case 2.2.1 : n < d2 *) - LiftGenBase; Rewrite H0; Clear H0 x. - EApply ex2_intro; [ Rewrite lift_lref_ge | Rewrite lift_lref_lt ]; XEAuto. -(* case 2.2.2 : n >= d2 *) - Apply (lt_le_e n (plus d2 h2)); Intros. -(* case 2.2.2.1 : n < d2 + h2 *) - EApply lift_gen_lref_false; [ Idtac | Idtac | Apply H0 ]; - [ XAuto | Rewrite plus_permute_2_in_3; XAuto ]. -(* case 2.2.2.2 : n >= d2 + h2 *) - Rewrite (le_plus_minus_sym h2 (plus n h1)) in H0; [ Idtac | XEAuto ]. - LiftGenBase; Rewrite H0; Clear H0 x. - EApply ex2_intro; - [ Rewrite le_minus_plus; [ Idtac | XEAuto ] - | Rewrite (le_plus_minus_sym h2 n); [ Idtac | XEAuto ] ]; - Rewrite lift_lref_ge; XEAuto. -(* case 3 : TTail k *) - NewInduction k. -(* case 3.1 : Bind *) - Rewrite lift_bind in H2. - LiftGenBase; Rewrite H2; Clear H2 x. - IH; Rewrite H; Rewrite H2; Clear H H2 x0. - Arith4In H4 d2 h1; IH; Rewrite H; Rewrite H0; Clear H H0 x1 t t0. - EApply ex2_intro; Rewrite lift_bind; XAuto. -(* case 3.2 : Flat *) - Rewrite lift_flat in H2. - LiftGenBase; Rewrite H2; Clear H2 x. - IH; Rewrite H; Rewrite H2; Clear H H2 x0. - IH; Rewrite H; Rewrite H0; Clear H H0 x1 t t0. - EApply ex2_intro; Rewrite lift_flat; XAuto. - Qed. - - End lift_gen_lift. - - Tactic Definition LiftGen := - Match Context With - | [ H: (lift ?1 ?2 ?3) = (lift ?1 ?2 ?4) |- ? ] -> - LApply (lift_inj ?3 ?4 ?1 ?2); [ Clear H; Intros | XAuto ] - | [ H: (lift ?0 ?1 ?2) = (lift ?3 (plus ?4 ?0) ?5) |- ? ] -> - LApply (lift_gen_lift ?2 ?5 ?0 ?3 ?1 ?4); [ Intros H_x | XAuto ]; - LApply H_x; [ Clear H H_x; Intros H | XAuto ]; - XElim H; Intros - | [ H: (lift (1) (0) ?1) = (lift (1) (S ?2) ?3) |- ? ] -> - LApply (lift_gen_lift ?1 ?3 (1) (1) (0) ?2); [ Intros H_x | XAuto ]; - LApply H_x; [ Clear H_x H; Intros H | Arith7' ?2; XAuto ]; - XElim H; Intros - | _ -> LiftGenBase. diff --git a/helm/coq-contribs/LAMBDA-TYPES/lift_props.v b/helm/coq-contribs/LAMBDA-TYPES/lift_props.v deleted file mode 100644 index 366ad999b..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/lift_props.v +++ /dev/null @@ -1,43 +0,0 @@ -(*#* #stop file *) - -Require lift_defs. - - Section lift_props. (*****************************************************) - - Theorem lift_free: (t:?; h,k,d,e:?) (le e (plus d h)) -> (le d e) -> - (lift k e (lift h d t)) = (lift (plus k h) d t). - XElim t; Intros. -(* case 1: TSort *) - Repeat Rewrite lift_sort; XAuto. -(* case 2: TLRef n *) - Apply (lt_le_e n d); Intros. -(* case 2.1: n < d *) - Repeat Rewrite lift_lref_lt; XEAuto. -(* case 2.2: n >= d *) - Repeat Rewrite lift_lref_ge; XEAuto. -(* case 3: TTail k *) - LiftTailRw; XAuto. - Qed. - - Theorem lift_d : (t:?; h,k,d,e:?) (le e d) -> - (lift h (plus k d) (lift k e t)) = (lift k e (lift h d t)). - XElim t; Intros. -(* case 1: TSort *) - Repeat Rewrite lift_sort; XAuto. -(* case 2: TLRef n *) - Apply (lt_le_e n e); Intros. -(* case 2.1: n < e *) - Cut (lt n d); Intros; Repeat Rewrite lift_lref_lt; XEAuto. -(* case 2.2: n >= e *) - Rewrite lift_lref_ge; [ Idtac | XAuto ]. - Rewrite plus_sym; Apply (lt_le_e n d); Intros. -(* case 2.2.1: n < d *) - Do 2 (Rewrite lift_lref_lt; [ Idtac | XAuto ]). - Rewrite lift_lref_ge; XAuto. -(* case 2.2.2: n >= d *) - Repeat Rewrite lift_lref_ge; XAuto. -(* case 3: TTail k *) - LiftTailRw; SRw; XAuto. - Qed. - - End lift_props. diff --git a/helm/coq-contribs/LAMBDA-TYPES/lift_tlt.v b/helm/coq-contribs/LAMBDA-TYPES/lift_tlt.v deleted file mode 100644 index 7319f3264..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/lift_tlt.v +++ /dev/null @@ -1,87 +0,0 @@ -(*#* #stop file *) - -Require tlt_defs. -Require lift_defs. - - Hint discr : ltlc := Extern 4 (lt (weight_map (wadd ? ?) (lift (S ?) ? ?)) (wadd ? ? ?)) - Simpl; Rewrite <- lift_weight_add_O. - - Hint discr : ltlc := Extern 4 (lt (weight_map ? (lift (0) (0) ?)) ?) - Rewrite lift_r. - - Section lift_tlt_props. (*************************************************) - - Theorem lift_weight_map: (t:?; h,d:?; f:?) - ((m:?) (le d m) -> (f m)=(0)) -> - (weight_map f (lift h d t)) = (weight_map f t). - XElim t; Intros. -(* case 1: TSort *) - XAuto. -(* case 2: TLRef n *) - Apply (lt_le_e n d); Intros. -(* case 2.1: n < d *) - Rewrite lift_lref_lt; XAuto. -(* case 2.2: n >= d *) - Rewrite lift_lref_ge; [ Simpl | XAuto ]. - Rewrite (H n); XAuto. -(* case 3: TTail k *) - XElim k; Intros; LiftTailRw; Simpl. -(* case 3.1: Bind *) - XElim b; [ Rewrite H; [ Idtac | XAuto ] | Idtac | Idtac ]; - Rewrite H0; Intros; Try (LeLtGen; Rewrite H2; Simpl); XAuto. -(* case 3.2: Flat *) - XAuto. - Qed. - - Hints Resolve lift_weight_map : ltlc. - - Theorem lift_weight : (t:?; h,d:?) (weight (lift h d t)) = (weight t). - Unfold weight; XAuto. - Qed. - - Theorem lift_weight_add : (w:?; t:?; h,d:?; f,g:?) - ((m:?) (lt m d) -> (g m) = (f m)) -> - (g d) = w -> - ((m:?) (le d m) -> (g (S m)) = (f m)) -> - (weight_map f (lift h d t)) = - (weight_map g (lift (S h) d t)). - XElim t; Intros. -(* case 1: TSort *) - XAuto. -(* case 2: TLRef *) - Apply (lt_le_e n d); Intros. -(* case 2.1: n < d *) - Repeat Rewrite lift_lref_lt; Simpl; XAuto. -(* case 2.2: n >= d *) - Repeat Rewrite lift_lref_ge; Simpl; Try Rewrite <- plus_n_Sm; XAuto. -(* case 3: TTail k *) - XElim k; Intros; LiftTailRw; Simpl. -(* case 1 : bind b *) - XElim b; Simpl; - Apply (f_equal nat); - (Apply (f_equal2 nat nat); [ XAuto | Idtac ]); - ( Apply H0; Simpl; Intros; Try (LeLtGen; Rewrite H4; Simpl); XAuto). -(* case 2 : Flat *) - XAuto. - Qed. - - Theorem lift_weight_add_O: (w:?; t:?; h:?; f:?) - (weight_map f (lift h (0) t)) = - (weight_map (wadd f w) (lift (S h) (0) t)). - Intros. - EApply lift_weight_add; XAuto. - Intros; Inversion H. - Qed. - - Theorem lift_tlt_dx: (k:?; u,t:?; h,d:?) - (tlt t (TTail k u (lift h d t))). - Unfold tlt; Intros. - Rewrite <- (lift_weight t h d). - Fold (tlt (lift h d t) (TTail k u (lift h d t))); XAuto. - Qed. - - End lift_tlt_props. - - Hints Resolve lift_tlt_dx : ltlc. - -(*#* #single *) diff --git a/helm/coq-contribs/LAMBDA-TYPES/pc1_defs.v b/helm/coq-contribs/LAMBDA-TYPES/pc1_defs.v deleted file mode 100644 index 22b4fcefb..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pc1_defs.v +++ /dev/null @@ -1,50 +0,0 @@ -(*#* #stop file *) - -Require Export pr0_defs. -Require Export pr1_defs. - - Definition pc1 := [t1,t2:?] (EX t | (pr1 t1 t) & (pr1 t2 t)). - - Hints Unfold pc1 : ltlc. - - Tactic Definition Pc1Unfold := - Match Context With - [ H: (pc1 ?2 ?3) |- ? ] -> Unfold pc1 in H; XDecompose H. - - Section pc1_props. (******************************************************) - - Theorem pc1_pr0_r: (t1,t2:?) (pr0 t1 t2) -> (pc1 t1 t2). - XEAuto. - Qed. - - Theorem pc1_pr0_x: (t1,t2:?) (pr0 t2 t1) -> (pc1 t1 t2). - XEAuto. - Qed. - - Theorem pc1_pr0_u: (t2,t1:?) (pr0 t1 t2) -> - (t3:?) (pc1 t2 t3) -> (pc1 t1 t3). - Intros; Pc1Unfold; XEAuto. - Qed. - - Theorem pc1_refl: (t:?) (pc1 t t). - XEAuto. - Qed. - - Theorem pc1_s: (t2,t1:?) (pc1 t1 t2) -> (pc1 t2 t1). - Intros; Pc1Unfold; XEAuto. - Qed. - - Theorem pc1_tail_1: (u1,u2:?) (pc1 u1 u2) -> - (t:?; k:?) (pc1 (TTail k u1 t) (TTail k u2 t)). - Intros; Pc1Unfold; XEAuto. - Qed. - - Theorem pc1_tail_2: (t1,t2:?) (pc1 t1 t2) -> - (u:?; k:?) (pc1 (TTail k u t1) (TTail k u t2)). - Intros; Pc1Unfold; XEAuto. - Qed. - - End pc1_props. - - Hints Resolve pc1_refl pc1_pr0_u pc1_pr0_r pc1_pr0_x pc1_s - pc1_tail_1 pc1_tail_2 : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pc1_props.v b/helm/coq-contribs/LAMBDA-TYPES/pc1_props.v deleted file mode 100644 index 840a79c84..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pc1_props.v +++ /dev/null @@ -1,25 +0,0 @@ -Require pr1_confluence. -Require pc1_defs. - -(*#* #stop file *) - - Section pc1_trans. (******************************************************) - - Theorem pc1_t: (t2,t1:?) (pc1 t1 t2) -> - (t3:?) (pc1 t2 t3) -> (pc1 t1 t3). - Intros; Repeat Pc1Unfold; Pr1Confluence; XEAuto. - Qed. - - Theorem pc1_pr0_u2: (t0,t1:?) (pr0 t0 t1) -> - (t2:?) (pc1 t0 t2) -> (pc1 t1 t2). - Intros; Apply (pc1_t t0); XAuto. - Qed. - - Theorem pc1_tail: (u1,u2:?) (pc1 u1 u2) -> (t1,t2:?) (pc1 t1 t2) -> - (k:?) (pc1 (TTail k u1 t1) (TTail k u2 t2)). - Intros; EApply pc1_t; [ EApply pc1_tail_1 | EApply pc1_tail_2 ]; XAuto. - Qed. - - End pc1_trans. - - Hints Resolve pc1_t pc1_tail : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pc3_defs.v b/helm/coq-contribs/LAMBDA-TYPES/pc3_defs.v deleted file mode 100644 index 35b114f40..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pc3_defs.v +++ /dev/null @@ -1,84 +0,0 @@ -Require Export pr2_defs. -Require Export pr3_defs. -Require Export pc1_defs. - -(*#* #caption "the relation $\\PcT{}{}{}$" *) -(*#* #cap #cap c, t, t1, t2 *) - - Definition pc3 := [c:?; t1,t2:?] (EX t | (pr3 c t1 t) & (pr3 c t2 t)). - -(*#* #stop file *) - - Hints Unfold pc3 : ltlc. - - Tactic Definition Pc3Unfold := - Match Context With - [ H: (pc3 ?1 ?2 ?3) |- ? ] -> Unfold pc3 in H; XDecompose H. - - Section pc3_props. (******************************************************) - - Theorem pc3_pr2_r: (c,t1,t2:?) (pr2 c t1 t2) -> (pc3 c t1 t2). - XEAuto. - Qed. - - Theorem pc3_pr2_x: (c,t1,t2:?) (pr2 c t2 t1) -> (pc3 c t1 t2). - XEAuto. - Qed. - - Theorem pc3_pr3_r: (c:?; t1,t2) (pr3 c t1 t2) -> (pc3 c t1 t2). - XEAuto. - Qed. - - Theorem pc3_pr3_x: (c:?; t1,t2) (pr3 c t2 t1) -> (pc3 c t1 t2). - XEAuto. - Qed. - - Theorem pc3_pr3_t: (c:?; t1,t0:?) (pr3 c t1 t0) -> - (t2:?) (pr3 c t2 t0) -> (pc3 c t1 t2). - XEAuto. - Qed. - - Theorem pc3_pr2_u: (c:?; t2,t1:?) (pr2 c t1 t2) -> - (t3:?) (pc3 c t2 t3) -> (pc3 c t1 t3). - Intros; Pc3Unfold; XEAuto. - Qed. - - Theorem pc3_refl: (c:?; t:?) (pc3 c t t). - XEAuto. - Qed. - - Theorem pc3_s: (c,t2,t1:?) (pc3 c t1 t2) -> (pc3 c t2 t1). - Intros; Pc3Unfold; XEAuto. - Qed. - - Theorem pc3_thin_dx: (c:? ;t1,t2:?) (pc3 c t1 t2) -> - (u:?; f:?) (pc3 c (TTail (Flat f) u t1) - (TTail (Flat f) u t2)). - Intros; Pc3Unfold; XEAuto. - Qed. - - Theorem pc3_tail_1: (c:?; u1,u2:?) (pc3 c u1 u2) -> - (k:?; t:?) (pc3 c (TTail k u1 t) (TTail k u2 t)). - Intros; Pc3Unfold; XEAuto. - Qed. - - Theorem pc3_tail_2: (c:?; u,t1,t2:?; k:?) (pc3 (CTail c k u) t1 t2) -> - (pc3 c (TTail k u t1) (TTail k u t2)). - Intros; Pc3Unfold; XEAuto. - Qed. - - Theorem pc3_shift: (h:?; c,e:?) (drop h (0) c e) -> - (t1,t2:?) (pc3 c t1 t2) -> - (pc3 e (app c h t1) (app c h t2)). - Intros; Pc3Unfold; XEAuto. - Qed. - - Theorem pc3_pc1: (t1,t2:?) (pc1 t1 t2) -> (c:?) (pc3 c t1 t2). - Intros; Pc1Unfold; XEAuto. - Qed. - - End pc3_props. - - Hints Resolve pc3_refl pc3_pr2_r pc3_pr2_x pc3_pr3_r pc3_pr3_x - pc3_s pc3_pr3_t pc3_thin_dx pc3_tail_1 pc3_tail_2 - pc3_pr2_u pc3_shift pc3_pc1 : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pc3_gen.v b/helm/coq-contribs/LAMBDA-TYPES/pc3_gen.v deleted file mode 100644 index 8a27227e6..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pc3_gen.v +++ /dev/null @@ -1,88 +0,0 @@ -(*#* #stop file *) - -Require lift_gen. -Require pr3_props. -Require pr3_gen. -Require pc3_defs. -Require pc3_props. - - Section pc3_gen. (********************************************************) - - Theorem pc3_gen_sort: (c:?; m,n:?) (pc3 c (TSort m) (TSort n)) -> m = n. - Intros; Pc3Unfold; Repeat Pr3GenBase. - Rewrite H0 in H; Clear H0 x c. - TGenBase; XAuto. - Qed. - - Theorem pc3_gen_abst: (c:?; u1,u2,t1,t2:?) - (pc3 c (TTail (Bind Abst) u1 t1) - (TTail (Bind Abst) u2 t2) - ) -> - (pc3 c u1 u2) /\ - (b:?; u:?) (pc3 (CTail c (Bind b) u) t1 t2). - Intros. - Pc3Unfold; Repeat Pr3GenBase; Rewrite H1 in H; Clear H1 x. - TGenBase; Rewrite H1 in H4; Rewrite H6 in H5. - XEAuto. - Qed. - - Theorem pc3_gen_lift: (c:?; t1,t2:?; h,d:?) - (pc3 c (lift h d t1) (lift h d t2)) -> - (e:?) (drop h d c e) -> - (pc3 e t1 t2). - Intros. - Pc3Unfold; Repeat Pr3Gen; Rewrite H2 in H; Clear H2 x. - LiftGen; Rewrite H in H4; XEAuto. - Qed. - - Theorem pc3_gen_not_abst: (b:?) ~b=Abst -> (c:?; t1,t2,u1,u2:?) - (pc3 c (TTail (Bind b) u1 t1) - (TTail (Bind Abst) u2 t2) - ) -> - (pc3 (CTail c (Bind b) u1) t1 - (lift (1) (0) (TTail (Bind Abst) u2 t2)) - ). - XElim b; Intros; - Try EqFalse; Pc3Unfold; Repeat Pr3Gen; - Try (Rewrite H0 in H3; TGenBase); - Rewrite H1 in H0; Clear H H1 x; - EApply pc3_pr3_t; XEAuto. - Qed. - - Theorem pc3_gen_lift_abst: (c:?; t,t2,u2:?; h,d:?) - (pc3 c (lift h d t) - (TTail (Bind Abst) u2 t2) - ) -> - (e:?) (drop h d c e) -> - (EX u1 t1 | (pr3 e t (TTail (Bind Abst) u1 t1)) & - (pr3 c u2 (lift h d u1)) & - (b:B; u:T)(pr3 (CTail c (Bind b) u) t2 (lift h (S d) t1)) - ). - Intros. - Pc3Unfold; Repeat Pr3Gen; Rewrite H1 in H; Clear H1 x. - LiftGenBase; Rewrite H in H3; Rewrite H1 in H4; Rewrite H2 in H5; XEAuto. - Qed. - - End pc3_gen. - - Tactic Definition Pc3Gen := - Match Context With - | [H: (pc3 ?1 (TSort ?2) (TSort ?3)) |- ? ] -> - LApply (pc3_gen_sort ?1 ?2 ?3); [ Clear H; Intros | XAuto ] - | [ _: (pc3 ?1 (lift ?2 ?3 ?4) (lift ?2 ?3 ?5)); - _: (drop ?2 ?3 ?1 ?6) |- ? ] -> - LApply (pc3_gen_lift ?1 ?4 ?5 ?2 ?3); [ Intros H_x | XAuto ]; - LApply (H_x ?6); [ Clear H_x; Intros | XAuto ] - | [ H: (pc3 ?1 (TTail (Bind Abst) ?2 ?3) (TTail (Bind Abst) ?4 ?5)) |- ? ] -> - LApply (pc3_gen_abst ?1 ?2 ?4 ?3 ?5);[ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (pc3 ?1 (TTail (Bind ?2) ?3 ?4) (TTail (Bind Abst) ?5 ?6)); - _: ~ ?2 = Abst |- ? ] -> - LApply (pc3_gen_not_abst ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?1 ?4 ?6 ?3 ?5); [ Clear H H_x; Intros | XAuto ] - | [ _: (pc3 ?1 (lift ?2 ?3 ?4) (TTail (Bind Abst) ?5 ?6)); - _: (drop ?2 ?3 ?1 ?7) |- ? ] -> - LApply (pc3_gen_lift_abst ?1 ?4 ?6 ?5 ?2 ?3); [ Intros H_x | XAuto ]; - LApply (H_x ?7); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros - | _ -> Pr3Gen. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pc3_gen_context.v b/helm/coq-contribs/LAMBDA-TYPES/pc3_gen_context.v deleted file mode 100644 index 42f03f2ab..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pc3_gen_context.v +++ /dev/null @@ -1,22 +0,0 @@ -(*#* #stop file *) - -Require subst1_confluence. -Require csubst1_defs. -Require pr3_gen_context. -Require pc3_defs. -Require pc3_props. - - Section pc3_gen_context. (************************************************) - - Theorem pc3_gen_cabbr: (c:?; t1,t2:?) (pc3 c t1 t2) -> (e:?; u:?; d:?) - (drop d (0) c (CTail e (Bind Abbr) u)) -> - (a0:?) (csubst1 d u c a0) -> - (a:?) (drop (1) d a0 a) -> - (x1:?) (subst1 d u t1 (lift (1) d x1)) -> - (x2:?) (subst1 d u t2 (lift (1) d x2)) -> - (pc3 a x1 x2). - Intros; Pc3Unfold; Repeat Pr3GenContext. - Subst1Confluence; Rewrite H3 in H5; Clear H3 x3; XEAuto. - Qed. - - End pc3_gen_context. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pc3_props.v b/helm/coq-contribs/LAMBDA-TYPES/pc3_props.v deleted file mode 100644 index 28aa03150..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pc3_props.v +++ /dev/null @@ -1,233 +0,0 @@ -(*#* #stop file *) - -Require subst0_subst0. -Require pr0_subst0. -Require cpr0_defs. -Require pr3_defs. -Require pr3_props. -Require pr3_confluence. -Require pc3_defs. - - Section pc3_trans. (******************************************************) - - Theorem pc3_t: (t2,c,t1:?) (pc3 c t1 t2) -> - (t3:?) (pc3 c t2 t3) -> (pc3 c t1 t3). - Intros; Repeat Pc3Unfold; Pr3Confluence; XEAuto. - Qed. - - Theorem pc3_pr2_u2: (c:?; t0,t1:?) (pr2 c t0 t1) -> - (t2:?) (pc3 c t0 t2) -> (pc3 c t1 t2). - Intros; Apply (pc3_t t0); XAuto. - Qed. - - Theorem pc3_tail_12: (c:?; u1,u2:?) (pc3 c u1 u2) -> - (k:?; t1,t2:?) (pc3 (CTail c k u2) t1 t2) -> - (pc3 c (TTail k u1 t1) (TTail k u2 t2)). - Intros. - EApply pc3_t; [ Apply pc3_tail_1 | Apply pc3_tail_2 ]; XAuto. - Qed. - - Theorem pc3_tail_21: (c:?; u1,u2:?) (pc3 c u1 u2) -> - (k:?; t1,t2:?) (pc3 (CTail c k u1) t1 t2) -> - (pc3 c (TTail k u1 t1) (TTail k u2 t2)). - Intros. - EApply pc3_t; [ Apply pc3_tail_2 | Apply pc3_tail_1 ]; XAuto. - Qed. - - End pc3_trans. - - Hints Resolve pc3_t pc3_tail_12 pc3_tail_21 : ltlc. - - Tactic Definition Pc3T := - Match Context With - | [ _: (pr3 ?1 ?2 (TTail ?3 ?4 ?5)); _: (pc3 ?1 ?6 ?4) |- ? ] -> - LApply (pc3_t (TTail ?3 ?4 ?5) ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x (TTail ?3 ?6 ?5)); [ Clear H_x; Intros | Apply pc3_s; XAuto ] - | [ _: (pc3 ?1 ?2 ?3); _: (pr3 ?1 ?3 ?4) |- ? ] -> - LApply (pc3_t ?3 ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?4); [ Clear H_x; Intros | XAuto ] - | [ _: (pc3 ?1 ?2 ?3); _: (pc3 ?1 ?4 ?3) |- ? ] -> - LApply (pc3_t ?3 ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?4); [ Clear H_x; Intros | XAuto ]. - - Section pc3_context. (****************************************************) - - Theorem pc3_pr0_pr2_t: (u1,u2:?) (pr0 u2 u1) -> - (c:?; t1,t2:?; k:?) (pr2 (CTail c k u2) t1 t2) -> - (pc3 (CTail c k u1) t1 t2). - Intros. - Inversion H0; Clear H0; [ XAuto | NewInduction i ]. -(* case 1: pr2_delta i = 0 *) - DropGenBase; Inversion H0; Clear H0 H4 H5 H6 c k t. - Rewrite H7 in H; Clear H7 u2. - Pr0Subst0; Apply pc3_pr3_t with t0:=x; XEAuto. -(* case 2: pr2_delta i > 0 *) - NewInduction k; DropGenBase; XEAuto. - Qed. - - Theorem pc3_pr2_pr2_t: (c:?; u1,u2:?) (pr2 c u2 u1) -> - (t1,t2:?; k:?) (pr2 (CTail c k u2) t1 t2) -> - (pc3 (CTail c k u1) t1 t2). - Intros until 1; Inversion H; Clear H; Intros. -(* case 1: pr2_free *) - EApply pc3_pr0_pr2_t; [ Apply H0 | XAuto ]. -(* case 2: pr2_delta *) - Inversion H; [ XAuto | NewInduction i0 ]. -(* case 2.1: i0 = 0 *) - DropGenBase; Inversion H4; Clear H3 H4 H7 t t4. - Rewrite <- H9; Rewrite H10 in H; Rewrite <- H11 in H6; Clear H9 H10 H11 d0 k u0. - Pr0Subst0; Subst0Subst0; Arith9'In H6 i. - EApply pc3_pr2_u. - EApply pr2_delta; XEAuto. - Apply pc3_pr2_x; EApply pr2_delta; [ Idtac | XEAuto | XEAuto ]; XEAuto. -(* case 2.2: i0 > 0 *) - Clear IHi0; NewInduction k; DropGenBase; XEAuto. - Qed. - - Theorem pc3_pr2_pr3_t: (c:?; u2,t1,t2:?; k:?) - (pr3 (CTail c k u2) t1 t2) -> - (u1:?) (pr2 c u2 u1) -> - (pc3 (CTail c k u1) t1 t2). - Intros until 1; XElim H; Intros. -(* case 1: pr3_refl *) - XAuto. -(* case 2: pr3_sing *) - EApply pc3_t. - EApply pc3_pr2_pr2_t; [ Apply H2 | Apply H ]. - XAuto. - Qed. - - Theorem pc3_pr3_pc3_t: (c:?; u1,u2:?) (pr3 c u2 u1) -> - (t1,t2:?; k:?) (pc3 (CTail c k u2) t1 t2) -> - (pc3 (CTail c k u1) t1 t2). - Intros until 1; XElim H; Intros. -(* case 1: pr3_refl *) - XAuto. -(* case 2: pr3_sing *) - Apply H1; Pc3Unfold. - EApply pc3_t; [ Idtac | Apply pc3_s ]; EApply pc3_pr2_pr3_t; XEAuto. - Qed. - - End pc3_context. - - Tactic Definition Pc3Context := - Match Context With - | [ H1: (pr0 ?3 ?2); H2: (pr2 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pc3_pr0_pr2_t ?2 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?1 ?5 ?6 ?4); [ Clear H1 H2; Intros | XAuto ] - | [ H1: (pr0 ?3 ?2); H2: (pr3 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pc3_pr2_pr3_t ?1 ?3 ?5 ?6 ?4); [ Clear H2; Intros H2 | XAuto ]; - LApply (H2 ?2); [ Clear H1 H2; Intros | XAuto ] - | [ H1: (pr2 ?1 ?3 ?2); H2: (pr2 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pc3_pr2_pr2_t ?1 ?2 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?5 ?6 ?4); [ Clear H1 H2; Intros | XAuto ] - | [ H1: (pr2 ?1 ?3 ?2); H2: (pr3 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pc3_pr2_pr3_t ?1 ?3 ?5 ?6 ?4); [ Clear H2; Intros H2 | XAuto ]; - LApply (H2 ?2); [ Clear H1 H2; Intros | XAuto ] - | [ H1: (pr3 ?1 ?3 ?2); H2: (pc3 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pc3_pr3_pc3_t ?1 ?2 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?5 ?6 ?4); [ Clear H1 H2; Intros | XAuto ] - | _ -> Pr3Context. - - Section pc3_lift. (*******************************************************) - - Theorem pc3_lift: (c,e:?; h,d:?) (drop h d c e) -> - (t1,t2:?) (pc3 e t1 t2) -> - (pc3 c (lift h d t1) (lift h d t2)). - - Intros. - Pc3Unfold. - EApply pc3_pr3_t; (EApply pr3_lift; [ XEAuto | Apply H1 Orelse Apply H2 ]). - Qed. - - End pc3_lift. - - Hints Resolve pc3_lift : ltlc. - - Section pc3_cpr0. (*******************************************************) - - Remark pc3_cpr0_t_aux: (c1,c2:?) (cpr0 c1 c2) -> - (k:?; u,t1,t2:?) (pr3 (CTail c1 k u) t1 t2) -> - (pc3 (CTail c2 k u) t1 t2). - Intros; XElim H0; Intros. -(* case 1.1: pr3_refl *) - XAuto. -(* case 1.2: pr3_sing *) - EApply pc3_t; [ Idtac | XEAuto ]. Clear H2 t1 t2. - Inversion_clear H0. -(* case 1.2.1: pr2_free *) - XAuto. -(* case 1.2.2: pr2_delta *) - Cpr0Drop; Pr0Subst0. - EApply pc3_pr2_u; [ EApply pr2_delta; XEAuto | XAuto ]. - Qed. - - Theorem pc3_cpr0_t: (c1,c2:?) (cpr0 c1 c2) -> - (t1,t2:?) (pr3 c1 t1 t2) -> - (pc3 c2 t1 t2). - Intros until 1; XElim H; Intros. -(* case 1: cpr0_refl *) - XAuto. -(* case 2: cpr0_comp *) - Pc3Context; Pc3Unfold. - EApply pc3_t; [ Idtac | Apply pc3_s ]; EApply pc3_cpr0_t_aux; XEAuto. - Qed. - - Theorem pc3_cpr0: (c1,c2:?) (cpr0 c1 c2) -> (t1,t2:?) (pc3 c1 t1 t2) -> - (pc3 c2 t1 t2). - Intros; Pc3Unfold. - EApply pc3_t; [ Idtac | Apply pc3_s ]; EApply pc3_cpr0_t; XEAuto. - Qed. - - End pc3_cpr0. - - Hints Resolve pc3_cpr0 : ltlc. - - Section pc3_ind_left. (***************************************************) - - Inductive pc3_left [c:C] : T -> T -> Prop := - | pc3_left_r : (t:?) (pc3_left c t t) - | pc3_left_ur: (t1,t2:?) (pr2 c t1 t2) -> (t3:?) (pc3_left c t2 t3) -> - (pc3_left c t1 t3) - | pc3_left_ux: (t1,t2:?) (pr2 c t1 t2) -> (t3:?) (pc3_left c t1 t3) -> - (pc3_left c t2 t3). - - Hint pc3_left: ltlc := Constructors pc3_left. - - Remark pc3_left_pr3: (c:?; t1,t2:?) (pr3 c t1 t2) -> (pc3_left c t1 t2). - Intros; XElim H; XEAuto. - Qed. - - Remark pc3_left_trans: (c:?; t1,t2:?) (pc3_left c t1 t2) -> - (t3:?) (pc3_left c t2 t3) -> (pc3_left c t1 t3). - Intros until 1; XElim H; XEAuto. - Qed. - - Hints Resolve pc3_left_trans : ltlc. - - Remark pc3_left_sym: (c:?; t1,t2:?) (pc3_left c t1 t2) -> - (pc3_left c t2 t1). - Intros; XElim H; XEAuto. - Qed. - - Hints Resolve pc3_left_sym pc3_left_pr3 : ltlc. - - Remark pc3_left_pc3: (c:?; t1,t2:?) (pc3 c t1 t2) -> (pc3_left c t1 t2). - Intros; Pc3Unfold; XEAuto. - Qed. - - Remark pc3_pc3_left: (c:?; t1,t2:?) (pc3_left c t1 t2) -> (pc3 c t1 t2). - Intros; XElim H; XEAuto. - Qed. - - Hints Resolve pc3_left_pc3 pc3_pc3_left : ltlc. - - Theorem pc3_ind_left: (c:C; P:(T->T->Prop)) - ((t:T) (P t t)) -> - ((t1,t2:T) (pr2 c t1 t2) -> (t3:T) (pc3 c t2 t3) -> (P t2 t3) -> (P t1 t3)) -> - ((t1,t2:T) (pr2 c t1 t2) -> (t3:T) (pc3 c t1 t3) -> (P t1 t3) -> (P t2 t3)) -> - (t,t0:T) (pc3 c t t0) -> (P t t0). - Intros; ElimType (pc3_left c t t0); XEAuto. - Qed. - - End pc3_ind_left. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pc3_subst0.v b/helm/coq-contribs/LAMBDA-TYPES/pc3_subst0.v deleted file mode 100644 index 02a5d8a38..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pc3_subst0.v +++ /dev/null @@ -1,136 +0,0 @@ -(*#* #stop file *) - -Require subst0_subst0. -Require fsubst0_defs. -Require pr0_subst0. -Require pc3_defs. -Require pc3_props. - - Section pc3_fsubst0. (****************************************************) - - Theorem pc3_pr2_fsubst0: (c1:?; t1,t:?) (pr2 c1 t1 t) -> - (i:?; u,c2,t2:?) (fsubst0 i u c1 t1 c2 t2) -> - (e:?) (drop i (0) c1 (CTail e (Bind Abbr) u)) -> - (pc3 c2 t2 t). - Intros until 1; XElim H. -(* case 1: pr2_free *) - Intros until 2; XElim H0; Intros. -(* case 1.1: fsubst0_snd *) - Pr0Subst0; [ XAuto | Apply (pc3_pr2_u c1 x); XEAuto ]. -(* case 1.2: fsubst0_fst *) - XAuto. -(* case 1.3: fsubst0_both *) - Pr0Subst0; CSubst0Drop; [ XAuto | Apply (pc3_pr2_u c0 x); XEAuto ]. -(* case 2 : pr2_delta *) - Intros until 4; XElim H2; Intros. -(* case 2.1: fsubst0_snd. *) - Apply (pc3_t t1); [ Apply pc3_s; XEAuto | XEAuto ]. -(* case 2.2: fsubst0_fst. *) - Apply (lt_le_e i i0); Intros; CSubst0Drop. -(* case 2.2.1: i < i0, none *) - XEAuto. -(* case 2.2.2: i < i0, csubst0_snd *) - CGenBase; Rewrite <- H8 in H5; Rewrite <- H9 in H5; Rewrite <- H9 in H6; Rewrite <- H10 in H6; Clear H8 H9 H10 c2 t3 x0 x1 x2. - Subst0Subst0; Rewrite <- lt_plus_minus_r in H7; [ CSubst0Drop | XAuto ]. - Apply (pc3_pr2_u c0 x); XEAuto. -(* case 2.2.3: i < i0, csubst0_fst *) - CGenBase; Rewrite <- H8 in H6; Rewrite <- H9 in H5; Rewrite <- H9 in H6; Rewrite <- H10 in H5; Clear H8 H9 H10 c2 t3 x0 x1 x3. - Apply pc3_pr2_r; XEAuto. -(* case 2.2.4: i < i0, csubst0_both *) - CGenBase; Rewrite <- H9 in H7; Rewrite <- H10 in H5; Rewrite <- H10 in H6; Rewrite <- H10 in H7; Rewrite <- H11 in H6; Clear H9 H10 H11 c2 t3 x0 x1 x3. - Subst0Subst0; Rewrite <- lt_plus_minus_r in H8; [ CSubst0Drop | XAuto ]. - Apply (pc3_pr2_u c0 x); XEAuto. -(* case 2.2.5: i >= i0 *) - XEAuto. -(* case 2.3: fsubst0_both *) - Apply (lt_le_e i i0); Intros; CSubst0Drop. -(* case 2.3.1 : i < i0, none *) - CSubst0Drop; Apply pc3_pr2_u2 with t0 := t1; XEAuto. -(* case 2.3.2 : i < i0, csubst0_snd *) - CGenBase; Rewrite <- H9 in H6; Rewrite <- H10 in H6; Rewrite <- H10 in H7; Rewrite <- H11 in H7; Clear H9 H10 H11 c2 t3 x0 x1 x2. - Subst0Subst0; Rewrite <- lt_plus_minus_r in H8; [ CSubst0Drop | XAuto ]. - Apply (pc3_pr2_u2 c0 t1); [ Idtac | Apply (pc3_pr2_u c0 x) ]; XEAuto. -(* case 2.3.3: i < i0, csubst0_fst *) - CGenBase; Rewrite <- H9 in H7; Rewrite <- H10 in H6; Rewrite <- H10 in H7; Rewrite <- H11 in H6; Clear H9 H10 H11 c2 t3 x0 x1 x3. - CSubst0Drop; Apply (pc3_pr2_u2 c0 t1); [ Idtac | Apply pc3_pr2_r ]; XEAuto. -(* case 2.3.4: i < i0, csubst0_both *) - CGenBase; Rewrite <- H10 in H8; Rewrite <- H11 in H6; Rewrite <- H11 in H7; Rewrite <- H11 in H8; Rewrite <- H12 in H7; Clear H10 H11 H12 c2 t3 x0 x1 x3. - Subst0Subst0; Rewrite <- lt_plus_minus_r in H9; [ CSubst0Drop | XAuto ]. - Apply (pc3_pr2_u2 c0 t1); [ Idtac | Apply (pc3_pr2_u c0 x) ]; XEAuto. -(* case 2.3.5: i >= i0 *) - CSubst0Drop; Apply (pc3_pr2_u2 c0 t1); XEAuto. - Qed. - - Theorem pc3_pr2_fsubst0_back: (c1:?; t,t1:?) (pr2 c1 t t1) -> - (i:?; u,c2,t2:?) (fsubst0 i u c1 t1 c2 t2) -> - (e:?) (drop i (0) c1 (CTail e (Bind Abbr) u)) -> - (pc3 c2 t t2). - Intros until 1; XElim H. -(* case 1: pr2_free *) - Intros until 2; XElim H0; Intros. -(* case 1.1: fsubst0_snd. *) - Apply (pc3_pr2_u c1 t2); XEAuto. -(* case 1.2: fsubst0_fst. *) - XAuto. -(* case 1.3: fsubst0_both. *) - CSubst0Drop; Apply (pc3_pr2_u c0 t2); XEAuto. -(* case 2: pr2_delta *) - Intros until 4; XElim H2; Intros. -(* case 2.1: fsubst0_snd. *) - Apply (pc3_t t2); Apply pc3_pr3_r; XEAuto. -(* case 2.2: fsubst0_fst. *) - Apply (lt_le_e i i0); Intros; CSubst0Drop. -(* case 2.2.1: i < i0, none *) - XEAuto. -(* case 2.2.2: i < i0, csubst0_bind *) - CGenBase; Rewrite <- H8 in H5; Rewrite <- H9 in H5; Rewrite <- H9 in H6; Rewrite <- H10 in H6; Clear H8 H9 H10 c2 t3 x0 x1 x2. - Subst0Subst0; Rewrite <- lt_plus_minus_r in H7; [ CSubst0Drop | XAuto ]. - Apply (pc3_pr2_u c0 x); XEAuto. -(* case 2.2.3: i < i0, csubst0_fst *) - CGenBase; Rewrite <- H8 in H6; Rewrite <- H9 in H5; Rewrite <- H9 in H6; Rewrite <- H10 in H5; Clear H8 H9 H10 c2 t3 x0 x1 x3. - Apply pc3_pr2_r; XEAuto. -(* case 2.2.4: i < i0, csubst0_both *) - CGenBase; Rewrite <- H9 in H7; Rewrite <- H10 in H5; Rewrite <- H10 in H6; Rewrite <- H10 in H7; Rewrite <- H11 in H6; Clear H9 H10 H11 c2 t3 x0 x1 x3. - Subst0Subst0; Rewrite <- lt_plus_minus_r in H8; [ CSubst0Drop | XAuto ]. - Apply (pc3_pr2_u c0 x); XEAuto. -(* case 2.2.5: i >= i0 *) - XEAuto. -(* case 2.3: fsubst0_both *) - Apply (lt_le_e i i0); Intros; CSubst0Drop. -(* case 2.3.1 : i < i0, none *) - CSubst0Drop; Apply pc3_pr2_u with t2:=t2; Try Apply pc3_pr3_r; XEAuto. -(* case 2.3.2 : i < i0, csubst0_snd *) - CGenBase; Rewrite <- H9 in H6; Rewrite <- H10 in H6; Rewrite <- H10 in H7; Rewrite <- H11 in H7; Clear H9 H10 H11 c2 t3 x0 x1 x2. - Subst0Subst0; Rewrite <- lt_plus_minus_r in H8; [ CSubst0Drop | XAuto ]. - Apply (pc3_pr2_u c0 x); [ Idtac | Apply (pc3_pr2_u2 c0 t0) ]; XEAuto. -(* case 2.3.3: i < i0, csubst0_fst *) - CGenBase; Rewrite <- H9 in H7; Rewrite <- H10 in H6; Rewrite <- H10 in H7; Rewrite <- H11 in H6; Clear H9 H10 H11 c2 t3 x0 x1 x3. - CSubst0Drop; Apply (pc3_pr2_u c0 t0); [ Idtac | Apply pc3_pr2_r ]; XEAuto. -(* case 2.3.4: i < i0, csubst0_both *) - CGenBase; Rewrite <- H10 in H8; Rewrite <- H11 in H6; Rewrite <- H11 in H7; Rewrite <- H11 in H8; Rewrite <- H12 in H7; Clear H10 H11 H12 c2 t3 x0 x1 x3. - Subst0Subst0; Rewrite <- lt_plus_minus_r in H9; [ CSubst0Drop | XAuto ]. - Apply (pc3_pr2_u c0 x); [ Idtac | Apply (pc3_pr2_u2 c0 t0) ]; XEAuto. -(* case 2.3.5: i >= i0 *) - CSubst0Drop; Apply (pc3_pr2_u c0 t0); XEAuto. - Qed. - - Opaque pc3. - - Theorem pc3_fsubst0: (c1:?; t1,t:?) (pc3 c1 t1 t) -> - (i:?; u,c2,t2:?) (fsubst0 i u c1 t1 c2 t2) -> - (e:?) (drop i (0) c1 (CTail e (Bind Abbr) u)) -> - (pc3 c2 t2 t). - Intros until 1; XElimUsing pc3_ind_left H. -(* case 1: pc3_refl *) - Intros until 1; XElim H; Intros; Try CSubst0Drop; XEAuto. -(* case 2: pc3_pr2_u *) - Intros until 4; XElim H2; Intros; - (Apply (pc3_t t2); [ EApply pc3_pr2_fsubst0; XEAuto | XEAuto ]). -(* case 2: pc3_pr2_u2 *) - Intros until 4; XElim H2; Intros; - (Apply (pc3_t t0); [ Apply pc3_s; EApply pc3_pr2_fsubst0_back; XEAuto | XEAuto ]). - Qed. - - End pc3_fsubst0. - - Hints Resolve pc3_fsubst0 : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr0_confluence.v b/helm/coq-contribs/LAMBDA-TYPES/pr0_confluence.v deleted file mode 100644 index c23d6743f..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr0_confluence.v +++ /dev/null @@ -1,176 +0,0 @@ -(*#* #stop file *) - -Require tlt_defs. -Require lift_gen. -Require lift_tlt. -Require subst0_gen. -Require subst0_confluence. -Require pr0_defs. -Require pr0_lift. -Require pr0_gen. -Require pr0_subst0. - - Section pr0_confluence. (*************************************************) - - Tactic Definition SSubstInv := - Match Context With - | [ H0: (TTail ? ? ?) = (TTail ? ? ?) |- ? ] -> - Inversion H0; Clear H0 - | [ H0: (pr0 (TTail (Bind ?) ? ?) ?) |- ? ] -> - Inversion H0; Clear H0 - | _ -> EqFalse Orelse LiftGen Orelse Pr0Gen. - - Tactic Definition SSubstBack := - Match Context With - | [ H0: Abst = ?1; H1:? |- ? ] -> - Rewrite <- H0 in H1 Orelse Rewrite <- H0 Orelse Clear H0 ?1 - | [ H0: Abbr = ?1; H1:? |- ? ] -> - Rewrite <- H0 in H1 Orelse Rewrite <- H0 Orelse Clear H0 ?1 - | [ H0: (? ?) = ?1; H1:? |- ? ] -> - Rewrite <- H0 in H1 Orelse Rewrite <- H0 Orelse Clear H0 ?1 - | [ H0: (? ? ? ?) = ?1; H1:? |- ? ] -> - Rewrite <- H0 in H1 Orelse Rewrite <- H0 Orelse Clear H0 ?1. - - Tactic Definition SSubst := - Match Context With - [ H0: ?1 = ?; H1:? |- ? ] -> - Rewrite H0 in H1 Orelse Rewrite H0 Orelse Clear H0 ?1. - - Tactic Definition XSubst := - Repeat (SSubstInv Orelse SSubstBack Orelse SSubst). - - Tactic Definition IH := - Match Context With - | [ H0: (pr0 ?1 ?2); H1: (pr0 ?1 ?3) |- ? ] -> - LApply (H ?1); [ Intros H_x | XEAuto ]; - LApply (H_x ?2); [ Clear H_x; Intros H_x | XAuto ]; - LApply (H_x ?3); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Clear H0 H1; Intros. - -(* case pr0_cong pr0_upsilon pr0_refl ***************************************) - - Remark pr0_cong_upsilon_refl: (b:?) ~ b = Abst -> - (u0,u3:?) (pr0 u0 u3) -> - (t4,t5:?) (pr0 t4 t5) -> - (u2,v2,x:?) (pr0 u2 x) -> (pr0 v2 x) -> - (EX t:T | (pr0 (TTail (Flat Appl) u2 (TTail (Bind b) u0 t4)) t) & - (pr0 (TTail (Bind b) u3 (TTail (Flat Appl) (lift (1) (0) v2) t5)) t)). - Intros. - Apply ex2_intro with x:=(TTail (Bind b) u3 (TTail (Flat Appl) (lift (1) (0) x) t5)); XAuto. - Qed. - -(* case pr0_cong pr0_upsilon pr0_cong ***************************************) - - Remark pr0_cong_upsilon_cong: (b:?) ~ b = Abst -> - (u2,v2,x:?) (pr0 u2 x) -> (pr0 v2 x) -> - (t2,t5,x0:?) (pr0 t2 x0) -> (pr0 t5 x0) -> - (u5,u3,x1:?) (pr0 u5 x1) -> (pr0 u3 x1) -> - (EX t:T | (pr0 (TTail (Flat Appl) u2 (TTail (Bind b) u5 t2)) t) & - (pr0 (TTail (Bind b) u3 (TTail (Flat Appl) (lift (1) (0) v2) t5)) t)). - Intros. - Apply ex2_intro with x:=(TTail (Bind b) x1 (TTail (Flat Appl) (lift (1) (0) x) x0)); XAuto. - Qed. - -(* case pr0_cong pr0_upsilon pr0_delta **************************************) - - Remark pr0_cong_upsilon_delta: ~ Abbr = Abst -> - (u5,t2,w:?) (subst0 (0) u5 t2 w) -> - (u2,v2,x:?) (pr0 u2 x) -> (pr0 v2 x) -> - (t5,x0:?) (pr0 t2 x0) -> (pr0 t5 x0) -> - (u3,x1:?) (pr0 u5 x1) -> (pr0 u3 x1) -> - (EX t:T | (pr0 (TTail (Flat Appl) u2 (TTail (Bind Abbr) u5 w)) t) & - (pr0 (TTail (Bind Abbr) u3 (TTail (Flat Appl) (lift (1) (0) v2) t5)) t)). - Intros; Pr0Subst0. -(* case 1: x0 is a lift *) - Apply ex2_intro with x:=(TTail (Bind Abbr) x1 (TTail (Flat Appl) (lift (1) (0) x) x0)); XAuto. -(* case 2: x0 is not a lift *) - Apply ex2_intro with x:=(TTail (Bind Abbr) x1 (TTail (Flat Appl) (lift (1) (0) x) x2)); XEAuto. - Qed. - -(* case pr0_cong pr0_upsilon pr0_zeta ***************************************) - - Remark pr0_cong_upsilon_zeta: (b:?) ~ b = Abst -> - (u0,u3:?) (pr0 u0 u3) -> - (u2,v2,x0:?) (pr0 u2 x0) -> (pr0 v2 x0) -> - (x,t3,x1:?) (pr0 x x1) -> (pr0 t3 x1) -> - (EX t:T | (pr0 (TTail (Flat Appl) u2 t3) t) & - (pr0 (TTail (Bind b) u3 (TTail (Flat Appl) (lift (1) (0) v2) (lift (1) (0) x))) t)). - Intros; LiftTailRwBack; XEAuto. - Qed. - -(* case pr0_cong pr0_delta **************************************************) - - Remark pr0_cong_delta: (u3,t5,w:?) (subst0 (0) u3 t5 w) -> - (u2,x:?) (pr0 u2 x) -> (pr0 u3 x) -> - (t3,x0:?) (pr0 t3 x0) -> (pr0 t5 x0) -> - (EX t:T | (pr0 (TTail (Bind Abbr) u2 t3) t) & - (pr0 (TTail (Bind Abbr) u3 w) t)). - Intros; Pr0Subst0; XEAuto. - Qed. - -(* case pr0_upsilon pr0_upsilon *********************************************) - - Remark pr0_upsilon_upsilon: (b:?) ~ b = Abst -> - (v1,v2,x0:?) (pr0 v1 x0) -> (pr0 v2 x0) -> - (u1,u2,x1:?) (pr0 u1 x1) -> (pr0 u2 x1) -> - (t1,t2,x2:?) (pr0 t1 x2) -> (pr0 t2 x2) -> - (EX t:T | (pr0 (TTail (Bind b) u1 (TTail (Flat Appl) (lift (1) (0) v1) t1)) t) & - (pr0 (TTail (Bind b) u2 (TTail (Flat Appl) (lift (1) (0) v2) t2)) t)). - Intros. - Apply ex2_intro with x:=(TTail (Bind b) x1 (TTail (Flat Appl) (lift (1) (0) x0) x2)); XAuto. - Qed. - -(* case pr0_delta pr0_delta *************************************************) - - Remark pr0_delta_delta: (u2,t3,w:?) (subst0 (0) u2 t3 w) -> - (u3,t5,w0:?) (subst0 (0) u3 t5 w0) -> - (x:?) (pr0 u2 x) -> (pr0 u3 x) -> - (x0:?) (pr0 t3 x0) -> (pr0 t5 x0) -> - (EX t:T | (pr0 (TTail (Bind Abbr) u2 w) t) & - (pr0 (TTail (Bind Abbr) u3 w0) t)). - Intros; Pr0Subst0; Pr0Subst0; Try Subst0Confluence; XSubst; XEAuto. - Qed. - -(* case pr0_delta pr0_epsilon ***********************************************) - - Remark pr0_delta_epsilon: (u2,t3,w:?) (subst0 (0) u2 t3 w) -> - (t4:?) (pr0 (lift (1) (0) t4) t3) -> - (t2:?) (EX t:T | (pr0 (TTail (Bind Abbr) u2 w) t) & (pr0 t2 t)). - Intros; Pr0Gen; XSubst; Subst0Gen. - Qed. - -(* main *********************************************************************) - - Hints Resolve pr0_cong_upsilon_refl pr0_cong_upsilon_cong : ltlc. - Hints Resolve pr0_cong_upsilon_delta pr0_cong_upsilon_zeta : ltlc. - Hints Resolve pr0_cong_delta : ltlc. - Hints Resolve pr0_upsilon_upsilon : ltlc. - Hints Resolve pr0_delta_delta pr0_delta_epsilon : ltlc. - -(*#* #start file *) - -(*#* #caption "confluence with itself: Church-Rosser property" *) -(*#* #cap #cap t0, t1, t2, t *) - - Theorem pr0_confluence: (t0,t1:?) (pr0 t0 t1) -> (t2:?) (pr0 t0 t2) -> - (EX t | (pr0 t1 t) & (pr0 t2 t)). - -(*#* #stop file *) - - XElimUsing tlt_wf_ind t0; Intros. - Inversion H0; Inversion H1; Clear H0 H1; - XSubst; Repeat IH; XDEAuto 4. - Qed. - - End pr0_confluence. - - Tactic Definition Pr0Confluence := - Match Context With - [ H1: (pr0 ?1 ?2); H2: (pr0 ?1 ?3) |-? ] -> - LApply (pr0_confluence ?1 ?2); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?3); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros. - -(*#* #start file *) - -(*#* #single *) diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr0_defs.v b/helm/coq-contribs/LAMBDA-TYPES/pr0_defs.v deleted file mode 100644 index 640b56f1f..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr0_defs.v +++ /dev/null @@ -1,101 +0,0 @@ -Require Export subst0_defs. - -(*#* #caption "axioms for the relation $\\PrZ{}{}$", - "reflexivity", "compatibility", "$\\beta$-contraction", "$\\upsilon$-swap", - "$\\delta$-expansion", "$\\zeta$-contraction", "$\\epsilon$-contraction" -*) -(*#* #cap #cap t, t1, t2 #alpha u in V, u1 in V1, u2 in V2, v1 in W1, v2 in W2, w in T, k in z *) - - Inductive pr0 : T -> T -> Prop := -(* structural rules *) - | pr0_refl : (t:?) (pr0 t t) - | pr0_comp : (u1,u2:?) (pr0 u1 u2) -> (t1,t2:?) (pr0 t1 t2) -> - (k:?) (pr0 (TTail k u1 t1) (TTail k u2 t2)) -(* axiom rules *) - | pr0_beta : (u,v1,v2:?) (pr0 v1 v2) -> (t1,t2:?) (pr0 t1 t2) -> - (pr0 (TTail (Flat Appl) v1 (TTail (Bind Abst) u t1)) - (TTail (Bind Abbr) v2 t2)) - | pr0_upsilon: (b:?) ~b=Abst -> (v1,v2:?) (pr0 v1 v2) -> - (u1,u2:?) (pr0 u1 u2) -> (t1,t2:?) (pr0 t1 t2) -> - (pr0 (TTail (Flat Appl) v1 (TTail (Bind b) u1 t1)) - (TTail (Bind b) u2 (TTail (Flat Appl) (lift (1) (0) v2) t2))) - | pr0_delta : (u1,u2:?) (pr0 u1 u2) -> (t1,t2:?) (pr0 t1 t2) -> - (w:?) (subst0 (0) u2 t2 w) -> - (pr0 (TTail (Bind Abbr) u1 t1) (TTail (Bind Abbr) u2 w)) - | pr0_zeta : (b:?) ~b=Abst -> (t1,t2:?) (pr0 t1 t2) -> - (u:?) (pr0 (TTail (Bind b) u (lift (1) (0) t1)) t2) - | pr0_epsilon: (t1,t2:?) (pr0 t1 t2) -> - (u:?) (pr0 (TTail (Flat Cast) u t1) t2). - -(*#* #stop file *) - - Hint pr0 : ltlc := Constructors pr0. - - Section pr0_gen_base. (***************************************************) - - Theorem pr0_gen_sort : (x:?; n:?) (pr0 (TSort n) x) -> x = (TSort n). - Intros; Inversion H; XAuto. - Qed. - - Theorem pr0_gen_lref : (x:?; n:?) (pr0 (TLRef n) x) -> x = (TLRef n). - Intros; Inversion H; XAuto. - Qed. - - Theorem pr0_gen_abst : (u1,t1,x:?) (pr0 (TTail (Bind Abst) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Bind Abst) u2 t2) & - (pr0 u1 u2) & (pr0 t1 t2) - ). - - Intros; Inversion H; Clear H. -(* case 1 : pr0_refl *) - XEAuto. -(* case 2 : pr0_cont *) - XEAuto. -(* case 3 : pr0_zeta *) - XElim H4; XAuto. - Qed. - - Theorem pr0_gen_appl : (u1,t1,x:?) (pr0 (TTail (Flat Appl) u1 t1) x) -> (OR - (EX u2 t2 | x = (TTail (Flat Appl) u2 t2) & - (pr0 u1 u2) & (pr0 t1 t2) - ) | - (EX y1 z1 u2 t2 | t1 = (TTail (Bind Abst) y1 z1) & - x = (TTail (Bind Abbr) u2 t2) & - (pr0 u1 u2) & (pr0 z1 t2) - ) | - (EX b y1 z1 u2 v2 t2 | - ~b=Abst & - t1 = (TTail (Bind b) y1 z1) & - x = (TTail (Bind b) v2 (TTail (Flat Appl) (lift (1) (0) u2) t2)) & - (pr0 u1 u2) & (pr0 y1 v2) & (pr0 z1 t2)) - ). - Intros; Inversion H; XEAuto. - Qed. - - Theorem pr0_gen_cast : (u1,t1,x:?) (pr0 (TTail (Flat Cast) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Flat Cast) u2 t2) & - (pr0 u1 u2) & (pr0 t1 t2) - ) \/ - (pr0 t1 x). - Intros; Inversion H; XEAuto. - Qed. - - End pr0_gen_base. - - Hints Resolve pr0_gen_sort pr0_gen_lref : ltlc. - - Tactic Definition Pr0GenBase := - Match Context With - | [ H: (pr0 (TSort ?1) ?2) |- ? ] -> - LApply (pr0_gen_sort ?2 ?1); [ Clear H; Intros | XAuto ] - | [ H: (pr0 (TLRef ?1) ?2) |- ? ] -> - LApply (pr0_gen_lref ?2 ?1); [ Clear H; Intros | XAuto ] - | [ H: (pr0 (TTail (Bind Abst) ?1 ?2) ?3) |- ? ] -> - LApply (pr0_gen_abst ?1 ?2 ?3); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (pr0 (TTail (Flat Appl) ?1 ?2) ?3) |- ? ] -> - LApply (pr0_gen_appl ?1 ?2 ?3); [ Clear H; Intros H | XAuto ]; - XElim H; Intros H; XElim H; Intros - | [ H: (pr0 (TTail (Flat Cast) ?1 ?2) ?3) |- ? ] -> - LApply (pr0_gen_cast ?1 ?2 ?3); [ Clear H; Intros H | XAuto ]; - XElim H; [ Intros H; XElim H; Intros | Intros ]. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr0_gen.v b/helm/coq-contribs/LAMBDA-TYPES/pr0_gen.v deleted file mode 100644 index bfe189586..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr0_gen.v +++ /dev/null @@ -1,99 +0,0 @@ -(*#* #stop file *) - -Require lift_gen. -Require lift_props. -Require subst0_gen. -Require pr0_defs. -Require pr0_lift. - - Section pr0_gen_abbr. (***************************************************) - - Theorem pr0_gen_abbr : (u1,t1,x:?) (pr0 (TTail (Bind Abbr) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Bind Abbr) u2 t2) & - (pr0 u1 u2) & - (pr0 t1 t2) \/ - (EX y | (pr0 t1 y) & (subst0 (0) u2 y t2)) - ) \/ - (pr0 t1 (lift (1) (0) x)). - Intros. - Inversion H; Clear H; XDEAuto 6. - Qed. - - End pr0_gen_abbr. - - Section pr0_gen_void. (***************************************************) - - Theorem pr0_gen_void : (u1,t1,x:?) (pr0 (TTail (Bind Void) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Bind Void) u2 t2) & - (pr0 u1 u2) & (pr0 t1 t2) - ) \/ - (pr0 t1 (lift (1) (0) x)). - Intros. - Inversion H; Clear H; XEAuto. - Qed. - - End pr0_gen_void. - - Section pr0_gen_lift. (***************************************************) - - Tactic Definition IH := - Match Context With - | [ H: (_:?; _:?) ?0 = (lift ? ? ?) -> ?; - H0: ?0 = (lift ? ?2 ?3) |- ? ] -> - LApply (H ?3 ?2); [ Clear H H0; Intros H_x | XAuto ]; - XElim H_x; Intro; Intros H_x; Intro; - Try Rewrite H_x; Try Rewrite H_x in H3; Clear H_x. - -(*#* #caption "generation lemma for lift" *) -(*#* #cap #alpha t1 in U1, t2 in U2, x in T, d in i *) - - Theorem pr0_gen_lift : (t1,x:?; h,d:?) (pr0 (lift h d t1) x) -> - (EX t2 | x = (lift h d t2) & (pr0 t1 t2)). - Intros until 1; InsertEq H '(lift h d t1); - UnIntro H d; UnIntro H t1; XElim H; Clear y x; Intros; - Rename x into t3; Rename x0 into d. -(* case 1 : pr0_r *) - XEAuto. -(* case 2 : pr0_c *) - NewInduction k; LiftGen; Rewrite H3; Clear H3 t0; - IH; IH; XEAuto. -(* case 3 : pr0_beta *) - LiftGen; Rewrite H3; Clear H3 t0. - LiftGen; Rewrite H3; Clear H3 H5 x1 k. - IH; IH; XEAuto. -(* case 4 : pr0_upsilon *) - LiftGen; Rewrite H6; Clear H6 t0. - LiftGen; Rewrite H6; Clear H6 x1. - IH; IH; IH. - Rewrite <- lift_d; [ Simpl | XAuto ]. - Rewrite <- lift_flat; XEAuto. -(* case 5 : pr0_delta *) - LiftGen; Rewrite H4; Clear H4 t0. - IH; IH; Arith3In H3 d; Subst0Gen. - Rewrite H3; XEAuto. -(* case 6 : pr0_zeta *) - LiftGen; Rewrite H2; Clear H2 t0. - Arith7In H4 d; LiftGen; Rewrite H2; Clear H2 x1. - IH; XEAuto. -(* case 7 : pr0_zeta *) - LiftGen; Rewrite H1; Clear H1 t0. - IH; XEAuto. - Qed. - - End pr0_gen_lift. - - Tactic Definition Pr0Gen := - Match Context With - | [ H: (pr0 (TTail (Bind Abbr) ?1 ?2) ?3) |- ? ] -> - LApply (pr0_gen_abbr ?1 ?2 ?3); [ Clear H; Intros H | XAuto ]; - XElim H; - [ Intros H; XElim H; Do 4 Intro; Intros H_x; - XElim H_x; [ Intros | Intros H_x; XElim H_x; Intros ] - | Intros ] - | [ H: (pr0 (TTail (Bind Void) ?1 ?2) ?3) |- ? ] -> - LApply (pr0_gen_void ?1 ?2 ?3); [ Clear H; Intros H | XAuto ]; - XElim H; [ Intros H; XElim H; Intros | Intros ] - | [ H: (pr0 (lift ?0 ?1 ?2) ?3) |- ? ] -> - LApply (pr0_gen_lift ?2 ?3 ?0 ?1); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | _ -> Pr0GenBase. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr0_lift.v b/helm/coq-contribs/LAMBDA-TYPES/pr0_lift.v deleted file mode 100644 index b6d9ba247..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr0_lift.v +++ /dev/null @@ -1,39 +0,0 @@ -Require lift_props. -Require subst0_lift. -Require pr0_defs. - -(*#* #caption "main properties of the relation $\\PrZ{}{}$" *) -(*#* #clauses pr0_props *) - -(*#* #stop file *) - - Section pr0_lift. (*******************************************************) - -(*#* #caption "conguence with lift" *) -(*#* #cap #cap t1,t2 #alpha d in i *) - - Theorem pr0_lift: (t1,t2:?) (pr0 t1 t2) -> - (h,d:?) (pr0 (lift h d t1) (lift h d t2)). - - Intros until 1; XElim H; Intros. -(* case 1: pr0_refl *) - XAuto. -(* case 2: pr0_cong *) - LiftTailRw; XAuto. -(* case 3 : pr0_beta *) - LiftTailRw; XAuto. -(* case 4: pr0_upsilon *) - LiftTailRw; Simpl; Arith0 d; Rewrite lift_d; XAuto. -(* case 5: pr0_delta *) - LiftTailRw; Simpl. - EApply pr0_delta; [ XAuto | Apply H2 | Idtac ]. - LetTac d' := (S d); Arith10 d; Unfold d'; XAuto. -(* case 6: pr0_zeta *) - LiftTailRw; Simpl; Arith0 d; Rewrite lift_d; XAuto. -(* case 7: pr0_epsilon *) - LiftTailRw; XAuto. - Qed. - - End pr0_lift. - - Hints Resolve pr0_lift : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr0_subst0.v b/helm/coq-contribs/LAMBDA-TYPES/pr0_subst0.v deleted file mode 100644 index 46a137e18..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr0_subst0.v +++ /dev/null @@ -1,105 +0,0 @@ -Require subst0_gen. -Require subst0_lift. -Require subst0_subst0. -Require subst0_confluence. -Require pr0_defs. -Require pr0_lift. - -(*#* #stop file *) - - Section pr0_subst0. (*****************************************************) - - Tactic Definition IH := - Match Context With - | [ H1: (u1:?) (pr0 u1 ?1) -> ?; H2: (pr0 ?2 ?1) |- ? ] -> - LApply (H1 ?2); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (u1:?) (pr0 ?1 u1) -> ?; H2: (pr0 ?1 ?2) |- ? ] -> - LApply (H1 ?2); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (v1,w1:?; i:?) (subst0 i v1 ?1 w1) -> (v2:T) (pr0 v1 v2) -> ?; - H2: (subst0 ?2 ?3 ?1 ?4); H3: (pr0 ?3 ?5) |- ? ] -> - LApply (H1 ?3 ?4 ?2); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?5); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; [ Intros | Intros H1; XElim H1; Intros ]. - - Theorem pr0_subst0_back: (u2,t1,t2:?; i:?) (subst0 i u2 t1 t2) -> - (u1:?) (pr0 u1 u2) -> - (EX t | (subst0 i u1 t1 t) & (pr0 t t2)). - Intros until 1; XElim H; Intros; - Repeat IH; XEAuto. - Qed. - - Theorem pr0_subst0_fwd: (u2,t1,t2:?; i:?) (subst0 i u2 t1 t2) -> - (u1:?) (pr0 u2 u1) -> - (EX t | (subst0 i u1 t1 t) & (pr0 t2 t)). - Intros until 1; XElim H; Intros; - Repeat IH; XEAuto. - Qed. - - Hints Resolve pr0_subst0_fwd : ltlc. - -(*#* #start file *) - -(*#* #caption "confluence with strict substitution" *) -(*#* #cap #cap t1, t2 #alpha v1 in W1, v2 in W2, w1 in U1, w2 in U2 *) - - Theorem pr0_subst0: (t1,t2:?) (pr0 t1 t2) -> - (v1,w1:?; i:?) (subst0 i v1 t1 w1) -> - (v2:?) (pr0 v1 v2) -> - (pr0 w1 t2) \/ - (EX w2 | (pr0 w1 w2) & (subst0 i v2 t2 w2)). - -(*#* #stop file *) - - Intros until 1; XElim H; Clear t1 t2; Intros. -(* case 1: pr0_refl *) - XEAuto. -(* case 2: pr0_cong *) - Subst0Gen; Rewrite H3; Repeat IH; XEAuto. -(* case 3: pr0_beta *) - Repeat Subst0Gen; Rewrite H3; Try Rewrite H5; Try Rewrite H6; - Repeat IH; XEAuto. -(* case 4: pr0_upsilon *) - Repeat Subst0Gen; Rewrite H6; Try Rewrite H8; Try Rewrite H9; - Repeat IH; XDEAuto 7. -(* case 5: pr0_delta *) - Subst0Gen; Rewrite H4; Repeat IH; - [ XEAuto | Idtac | XEAuto | Idtac | XEAuto | Idtac | Idtac | Idtac ]. - Subst0Subst0; Arith9'In H9 i; XEAuto. - Subst0Confluence; XEAuto. - Subst0Subst0; Arith9'In H10 i; XEAuto. - Subst0Confluence; XEAuto. - Subst0Subst0; Arith9'In H11 i; Subst0Confluence; XDEAuto 6. -(* case 6: pr0_zeta *) - Repeat Subst0Gen; Rewrite H2; Try Rewrite H4; Try Rewrite H5; - Try (Simpl in H5; Rewrite <- minus_n_O in H5); - Try (Simpl in H6; Rewrite <- minus_n_O in H6); - Try IH; XEAuto. -(* case 7: pr0_epsilon *) - Subst0Gen; Rewrite H1; Try IH; XEAuto. - Qed. - - End pr0_subst0. - - Tactic Definition Pr0Subst0 := - Match Context With - | [ H1: (pr0 ?1 ?2); H2: (subst0 ?3 ?4 ?1 ?5); - H3: (pr0 ?4 ?6) |- ? ] -> - LApply (pr0_subst0 ?1 ?2); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4 ?5 ?3); [ Clear H1 H2; Intros H1 | XAuto ]; - LApply (H1 ?6); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; [ Intros | Intros H1; XElim H1; Intros ] - | [ H1: (pr0 ?1 ?2); H2: (subst0 ?3 ?4 ?1 ?5) |- ? ] -> - LApply (pr0_subst0 ?1 ?2); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4 ?5 ?3); [ Clear H1 H2; Intros H1 | XAuto ]; - LApply (H1 ?4); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; [ Intros | Intros H1; XElim H1; Intros ] - | [ _: (subst0 ?0 ?1 ?2 ?3); _: (pr0 ?4 ?1) |- ? ] -> - LApply (pr0_subst0_back ?1 ?2 ?3 ?0); [ Intros H_x | XAuto ]; - LApply (H_x ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros - | [ H1: (subst0 ?0 ?1 ?2 ?3); H2: (pr0 ?1 ?4) |- ? ] -> - LApply (pr0_subst0_fwd ?1 ?2 ?3 ?0); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr0_subst1.v b/helm/coq-contribs/LAMBDA-TYPES/pr0_subst1.v deleted file mode 100644 index fbf8e8b38..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr0_subst1.v +++ /dev/null @@ -1,63 +0,0 @@ -(*#* #stop file *) - -Require subst1_defs. -Require pr0_defs. -Require pr0_subst0. - - Section pr0_subst1_props. (***********************************************) - - Theorem pr0_delta1: (u1,u2:?) (pr0 u1 u2) -> (t1,t2:?) (pr0 t1 t2) -> - (w:?) (subst1 (0) u2 t2 w) -> - (pr0 (TTail (Bind Abbr) u1 t1) (TTail (Bind Abbr) u2 w)). - Intros until 3; XElim H1; Clear w; XEAuto. - Qed. - - Theorem pr0_subst1_back: (u2,t1,t2:?; i:?) (subst1 i u2 t1 t2) -> - (u1:?) (pr0 u1 u2) -> - (EX t | (subst1 i u1 t1 t) & (pr0 t t2)). - Intros until 1; XElim H; Intros; - Try Pr0Subst0; XEAuto. - Qed. - - Theorem pr0_subst1_fwd: (u2,t1,t2:?; i:?) (subst1 i u2 t1 t2) -> - (u1:?) (pr0 u2 u1) -> - (EX t | (subst1 i u1 t1 t) & (pr0 t2 t)). - Intros until 1; XElim H; Intros; - Try Pr0Subst0; XEAuto. - Qed. - - Theorem pr0_subst1: (t1,t2:?) (pr0 t1 t2) -> - (v1,w1:?; i:?) (subst1 i v1 t1 w1) -> - (v2:?) (pr0 v1 v2) -> - (EX w2 | (pr0 w1 w2) & (subst1 i v2 t2 w2)). - Intros until 2; XElim H0; Intros; - Try Pr0Subst0; XEAuto. - Qed. - - End pr0_subst1_props. - - Hints Resolve pr0_delta1 : ltlc. - - Tactic Definition Pr0Subst1 := - Match Context With - | [ H1: (pr0 ?1 ?2); H2: (subst1 ?3 ?4 ?1 ?5); - H3: (pr0 ?4 ?6) |- ? ] -> - LApply (pr0_subst1 ?1 ?2); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4 ?5 ?3); [ Clear H1 H2; Intros H1 | XAuto ]; - LApply (H1 ?6); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (pr0 ?1 ?2); H2: (subst1 ?3 ?4 ?1 ?5) |- ? ] -> - LApply (pr0_subst1 ?1 ?2); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4 ?5 ?3); [ Clear H1 H2; Intros H1 | XAuto ]; - LApply (H1 ?4); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (subst1 ?0 ?1 ?2 ?3); H2: (pr0 ?4 ?1) |- ? ] -> - LApply (pr0_subst1_back ?1 ?2 ?3 ?0); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (subst1 ?0 ?1 ?2 ?3); H2: (pr0 ?1 ?4) |- ? ] -> - LApply (pr0_subst1_fwd ?1 ?2 ?3 ?0); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros - | _ -> Pr0Subst0. - diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr1_confluence.v b/helm/coq-contribs/LAMBDA-TYPES/pr1_confluence.v deleted file mode 100644 index fac076d31..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr1_confluence.v +++ /dev/null @@ -1,56 +0,0 @@ -(*#* #stop file *) - -Require pr0_confluence. -Require pr1_defs. - -(*#* #caption "main properties of predicate \\texttt{pr1}" *) -(*#* #clauses pr1_props *) - - Section pr1_confluence. (*************************************************) - -(*#* #caption "confluence with single step reduction: strip lemma" *) -(*#* #cap #cap t0, t1, t2, t *) - - Theorem pr1_strip : (t0,t1:?) (pr1 t0 t1) -> (t2:?) (pr0 t0 t2) -> - (EX t | (pr1 t1 t) & (pr1 t2 t)). - Intros until 1; XElim H; Intros. -(* case 1 : pr1_r *) - XEAuto. -(* case 2 : pr1_u *) - Pr0Confluence. - LApply (H1 x); [ Clear H1 H2; Intros H1 | XAuto ]. - XElim H1; Intros; XEAuto. - Qed. - -(*#* #caption "confluence with itself: Church-Rosser property" *) -(*#* #cap #cap t0, t1, t2, t *) - - Theorem pr1_confluence : (t0,t1:?) (pr1 t0 t1) -> (t2:?) (pr1 t0 t2) -> - (EX t | (pr1 t1 t) & (pr1 t2 t)). - Intros until 1; XElim H; Intros. -(* case 1 : pr1_r *) - XEAuto. -(* case 2 : pr1_u *) - LApply (pr1_strip t3 t5); [ Clear H2; Intros H2 | XAuto ]. - LApply (H2 t2); [ Clear H H2; Intros H | XAuto ]. - XElim H; Intros. - LApply (H1 x); [ Clear H1 H2; Intros H1 | XAuto ]. - XElim H1; Intros; XEAuto. - Qed. - - End pr1_confluence. - - Tactic Definition Pr1Confluence := - Match Context With - | [ H1: (pr1 ?1 ?2); H2: (pr0 ?1 ?3) |-? ] -> - LApply (pr1_strip ?1 ?2); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?3); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (pr1 ?1 ?2); H2: (pr1 ?1 ?3) |-? ] -> - LApply (pr1_confluence ?1 ?2); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?3); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros - | _ -> Pr0Confluence. - -(*#* #single *) - diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr1_defs.v b/helm/coq-contribs/LAMBDA-TYPES/pr1_defs.v deleted file mode 100644 index ed05b0e5d..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr1_defs.v +++ /dev/null @@ -1,34 +0,0 @@ -(*#* #stop file *) - -Require Export pr0_defs. - - Inductive pr1 : T -> T -> Prop := - | pr1_r: (t:?) (pr1 t t) - | pr1_u: (t2,t1:?) (pr0 t1 t2) -> (t3:?) (pr1 t2 t3) -> (pr1 t1 t3). - - Hint pr1 : ltlc := Constructors pr1. - - Section pr1_props. (******************************************************) - - Theorem pr1_pr0: (t1,t2:?) (pr0 t1 t2) -> (pr1 t1 t2). - XEAuto. - Qed. - - Theorem pr1_t: (t2,t1:?) (pr1 t1 t2) -> - (t3:?) (pr1 t2 t3) -> (pr1 t1 t3). - Intros until 1; XElim H; XEAuto. - Qed. - - Theorem pr1_tail_1: (u1,u2:?) (pr1 u1 u2) -> - (t:?; k:?) (pr1 (TTail k u1 t) (TTail k u2 t)). - Intros; XElim H; XEAuto. - Qed. - - Theorem pr1_tail_2: (t1,t2:?) (pr1 t1 t2) -> - (u:?; k:?) (pr1 (TTail k u t1) (TTail k u t2)). - Intros; XElim H; XEAuto. - Qed. - - End pr1_props. - - Hints Resolve pr1_pr0 pr1_t pr1_tail_1 pr1_tail_2 : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr2_confluence.v b/helm/coq-contribs/LAMBDA-TYPES/pr2_confluence.v deleted file mode 100644 index 8b2fd4769..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr2_confluence.v +++ /dev/null @@ -1,74 +0,0 @@ -(*#* #stop file *) - -Require subst0_confluence. -Require drop_props. -Require pr0_subst0. -Require pr0_confluence. -Require pr2_defs. - - Section pr2_confluence. (*************************************************) - -(* case 1.1 : pr2_free pr2_free *********************************************) - - Remark pr2_free_free: (c:?; t0,t1,t2:?) - (pr0 t0 t1) -> (pr0 t0 t2) -> - (EX t:T | (pr2 c t1 t) & (pr2 c t2 t)). - Intros; Pr0Confluence; XEAuto. - Qed. - -(* case 1.2 : pr2_free pr2_delta ********************************************) - - Remark pr2_free_delta: (c,d:?; t0,t1,t2,t4,u:?; i:?) - (pr0 t0 t1) -> - (drop i (0) c (CTail d (Bind Abbr) u)) -> - (pr0 t0 t4) -> - (subst0 i u t4 t2) -> - (EX t | (pr2 c t1 t) & (pr2 c t2 t)). - Intros; Pr0Confluence; Pr0Subst0; XEAuto. - Qed. - -(* case 2.2 : pr2_delta pr2_delta *******************************************) - - Remark pr2_delta_delta: (c,d,d0:?; t0,t1,t2,t3,t4,u,u0:?; i,i0:?) - (drop i (0) c (CTail d (Bind Abbr) u)) -> - (pr0 t0 t3) -> - (subst0 i u t3 t1) -> - (drop i0 (0) c (CTail d0 (Bind Abbr) u0)) -> - (pr0 t0 t4) -> - (subst0 i0 u0 t4 t2) -> - (EX t:T | (pr2 c t1 t) & (pr2 c t2 t)). - Intros; Pr0Confluence; Repeat Pr0Subst0; - [ XEAuto | XEAuto | XEAuto | Idtac ]. - Apply (neq_eq_e i i0); Intros. -(* case 1 : i != i0 *) - Subst0Confluence; XEAuto. -(* case 2 : i = i0 *) - Rewrite H5 in H; Rewrite H5 in H3; Clear H5 i. - DropDis; Inversion H2; Rewrite H7 in H3; Clear H2 H6 H7 d u. - Subst0Confluence; [ Rewrite H2 in H0; XEAuto | XEAuto | XEAuto | XEAuto ]. - Qed. - -(* main *********************************************************************) - - Hints Resolve pr2_free_free pr2_free_delta pr2_delta_delta : ltlc. - -(*#* #caption "confluence with itself: Church-Rosser property" *) -(*#* #cap #cap c, t0, t1, t2, t *) - - Theorem pr2_confluence: (c,t0,t1:?) (pr2 c t0 t1) -> - (t2:?) (pr2 c t0 t2) -> - (EX t | (pr2 c t1 t) & (pr2 c t2 t)). - Intros; Inversion H; Inversion H0; XDEAuto 3. - Qed. - - End pr2_confluence. - - Tactic Definition Pr2Confluence := - Match Context With - | [ H1: (pr2 ?1 ?2 ?3); H2: (pr2 ?1 ?2 ?4) |-? ] -> - LApply (pr2_confluence ?1 ?2 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros - | _ -> Pr0Confluence. - -(*#* #single *) diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr2_defs.v b/helm/coq-contribs/LAMBDA-TYPES/pr2_defs.v deleted file mode 100644 index 9dab9cafe..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr2_defs.v +++ /dev/null @@ -1,137 +0,0 @@ -Require Export drop_defs. -Require Export pr0_defs. - -(*#* #caption "current axioms for the relation $\\PrS{}{}{}$", - "context-free case", "context-dependent $\\delta$-expansion" -*) -(*#* #cap #cap c, d, t, t1, t2 #alpha u in V *) - - Inductive pr2 [c:C; t1:T] : T -> Prop := -(* structural rules *) - | pr2_free : (t2:?) (pr0 t1 t2) -> (pr2 c t1 t2) -(* axiom rules *) - | pr2_delta: (d:?; u:?; i:?) - (drop i (0) c (CTail d (Bind Abbr) u)) -> - (t2:?) (pr0 t1 t2) -> (t:?) (subst0 i u t2 t) -> - (pr2 c t1 t). - -(*#* #stop file *) - - Hint pr2 : ltlc := Constructors pr2. - - Section pr2_gen_base. (***************************************************) - - Theorem pr2_gen_sort: (c:?; x:?; n:?) (pr2 c (TSort n) x) -> - x = (TSort n). - Intros; Inversion H; Pr0GenBase; - [ XAuto | Rewrite H1 in H2; Subst0GenBase ]. - Qed. - - Theorem pr2_gen_lref: (c:?; x:?; n:?) (pr2 c (TLRef n) x) -> - x = (TLRef n) \/ - (EX d u | (drop n (0) c (CTail d (Bind Abbr) u)) & - x = (lift (S n) (0) u) - ). - Intros; Inversion H; Pr0GenBase; - [ XAuto | Rewrite H1 in H2; Subst0GenBase; Rewrite <- H2 in H0; XEAuto ]. - Qed. - - Theorem pr2_gen_abst: (c:?; u1,t1,x:?) - (pr2 c (TTail (Bind Abst) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Bind Abst) u2 t2) & - (pr2 c u1 u2) & (b:?; u:?) - (pr2 (CTail c (Bind b) u) t1 t2) - ). - Intros; Inversion H; Pr0GenBase; - [ XEAuto | Rewrite H1 in H2; Subst0GenBase; XDEAuto 6 ]. - Qed. - - Theorem pr2_gen_appl: (c:?; u1,t1,x:?) - (pr2 c (TTail (Flat Appl) u1 t1) x) -> (OR - (EX u2 t2 | x = (TTail (Flat Appl) u2 t2) & - (pr2 c u1 u2) & (pr2 c t1 t2) - ) | - (EX y1 z1 u2 t2 | t1 = (TTail (Bind Abst) y1 z1) & - x = (TTail (Bind Abbr) u2 t2) & - (pr2 c u1 u2) & (b:?; u:?) - (pr2 (CTail c (Bind b) u) z1 t2) - ) | - (EX b y1 z1 z2 u2 v2 t2 | - ~b=Abst & - t1 = (TTail (Bind b) y1 z1) & - x = (TTail (Bind b) v2 z2) & - (pr2 c u1 u2) & (pr2 c y1 v2) & (pr0 z1 t2)) - ). - Intros; Inversion H; Pr0GenBase; - Try Rewrite H1 in H2; Try Rewrite H4 in H2; Try Rewrite H5 in H2; - Try Subst0GenBase; XDEAuto 7. - Qed. - - Theorem pr2_gen_cast: (c:?; u1,t1,x:?) - (pr2 c (TTail (Flat Cast) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Flat Cast) u2 t2) & - (pr2 c u1 u2) & (pr2 c t1 t2) - ) \/ - (pr2 c t1 x). - Intros; Inversion H; Pr0GenBase; - Try Rewrite H1 in H2; Try Subst0GenBase; XEAuto. - Qed. - - End pr2_gen_base. - - Tactic Definition Pr2GenBase := - Match Context With - | [ H: (pr2 ?1 (TSort ?2) ?3) |- ? ] -> - LApply (pr2_gen_sort ?1 ?3 ?2); [ Clear H; Intros | XAuto ] - | [ H: (pr2 ?1 (TLRef ?2) ?3) |- ? ] -> - LApply (pr2_gen_lref ?1 ?3 ?2); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (pr2 ?1 (TTail (Bind Abst) ?2 ?3) ?4) |- ? ] -> - LApply (pr2_gen_abst ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (pr2 ?1 (TTail (Flat Appl) ?2 ?3) ?4) |- ? ] -> - LApply (pr2_gen_appl ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (pr2 ?1 (TTail (Flat Cast) ?2 ?3) ?4) |- ? ] -> - LApply (pr2_gen_cast ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H. - - Section pr2_props. (******************************************************) - - Theorem pr2_thin_dx: (c:?; t1,t2:?) (pr2 c t1 t2) -> - (u:?; f:?) (pr2 c (TTail (Flat f) u t1) - (TTail (Flat f) u t2)). - Intros; XElim H; XEAuto. - Qed. - - Theorem pr2_tail_1: (c:?; u1,u2:?) (pr2 c u1 u2) -> - (k:?; t:?) (pr2 c (TTail k u1 t) (TTail k u2 t)). - Intros; XElim H; XEAuto. - Qed. - - Theorem pr2_tail_2: (c:?; u,t1,t2:?; k:?) (pr2 (CTail c k u) t1 t2) -> - (pr2 c (TTail k u t1) (TTail k u t2)). - XElim k; Intros; ( - XElim H; [ XAuto | XElim i; Intros; DropGenBase; CGenBase; XEAuto ]). - Qed. - - Hints Resolve pr2_tail_2 : ltlc. - - Theorem pr2_shift: (i:?; c,e:?) (drop i (0) c e) -> - (t1,t2:?) (pr2 c t1 t2) -> - (pr2 e (app c i t1) (app c i t2)). - XElim i. -(* case 1: i = 0 *) - Intros; DropGenBase; Rewrite H in H0. - Repeat Rewrite app_O; XAuto. -(* case 2: i > 0 *) - XElim c. -(* case 2.1: CSort *) - Intros; DropGenBase; Rewrite H0; XAuto. -(* case 2.2: CTail *) - XElim k; Intros; Simpl; DropGenBase; XAuto. - Qed. - - End pr2_props. - - Hints Resolve pr2_thin_dx pr2_tail_1 pr2_tail_2 pr2_shift : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr2_gen.v b/helm/coq-contribs/LAMBDA-TYPES/pr2_gen.v deleted file mode 100644 index 98d128233..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr2_gen.v +++ /dev/null @@ -1,78 +0,0 @@ -(*#* #stop file *) - -Require subst0_gen. -Require subst0_lift. -Require drop_props. -Require pr0_gen. -Require pr0_subst0. -Require pr2_defs. - - Section pr2_gen. (********************************************************) - - Theorem pr2_gen_abbr: (c:?; u1,t1,x:?) - (pr2 c (TTail (Bind Abbr) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Bind Abbr) u2 t2) & - (pr2 c u1 u2) & (OR - (b:?; u:?) (pr2 (CTail c (Bind b) u) t1 t2) | - (EX u | (pr0 u1 u) & (pr2 (CTail c (Bind Abbr) u) t1 t2)) | - (EX y z | (pr2 (CTail c (Bind Abbr) u1) t1 y) & (pr0 y z) & (pr2 (CTail c (Bind Abbr) u1) z t2)) - )) \/ (b:?; u:?) - (pr2 (CTail c (Bind b) u) t1 (lift (1) (0) x)). - Intros; Inversion H; - Pr0Gen; Try Rewrite H1 in H2; Try Subst0Gen; Try Pr0Subst0; XDEAuto 10. - Qed. - - Theorem pr2_gen_void: (c:?; u1,t1,x:?) - (pr2 c (TTail (Bind Void) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Bind Void) u2 t2) & - (pr2 c u1 u2) & (b:?; u:?) - (pr2 (CTail c (Bind b) u) t1 t2) - ) \/ (b:?; u:?) - (pr2 (CTail c (Bind b) u) t1 (lift (1) (0) x)). - Intros; Inversion H; - Try Pr0Gen; Try Rewrite H1 in H2; Try Subst0Gen; XDEAuto 7. - Qed. - -(*#* #caption "generation lemma for lift" *) -(*#* #cap #cap c #alpha e in D, t1 in U1, t2 in U2, x in T, d in i *) - - Theorem pr2_gen_lift: (c:?; t1,x:?; h,d:?) (pr2 c (lift h d t1) x) -> - (e:?) (drop h d c e) -> - (EX t2 | x = (lift h d t2) & (pr2 e t1 t2)). - Intros. - Inversion H; Clear H; Pr0Gen. -(* case 1 : pr2_free *) - XEAuto. -(* case 2 : pr2_delta *) - Rewrite H in H3; Clear H H4 t t2. - Apply (lt_le_e i d); Intros. -(* case 2.1 : i < d *) - Rewrite (lt_plus_minus i d) in H0; [ Idtac | XAuto ]. - Rewrite (lt_plus_minus i d) in H3; [ Idtac | XAuto ]. - DropDis; Rewrite H0 in H3; Clear H0 u. - Subst0Gen; Rewrite <- lt_plus_minus in H0; XEAuto. -(* case 2.2 : i >= d *) - Apply (lt_le_e i (plus d h)); Intros. -(* case 2.2.1 : i < d + h *) - EApply subst0_gen_lift_false; [ Apply H | Apply H4 | XEAuto ]. -(* case 2.2.2 : i >= d + h *) - DropDis; Subst0Gen; XEAuto. - Qed. - - End pr2_gen. - - Tactic Definition Pr2Gen := - Match Context With - | [ H: (pr2 ?1 (TTail (Bind Abbr) ?2 ?3) ?4) |- ? ] -> - LApply (pr2_gen_abbr ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (pr2 ?1 (TTail (Bind Void) ?2 ?3) ?4) |- ? ] -> - LApply (pr2_gen_void ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H0: (pr2 ?1 (lift ?2 ?3 ?4) ?5); - H1: (drop ?2 ?3 ?1 ?6) |- ? ] -> - LApply (pr2_gen_lift ?1 ?4 ?5 ?2 ?3); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?6); [ Clear H0; Intros H0 | XAuto ]; - XDecompose H0 - | _ -> Pr2GenBase. - diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr2_gen_context.v b/helm/coq-contribs/LAMBDA-TYPES/pr2_gen_context.v deleted file mode 100644 index 61d2ffef7..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr2_gen_context.v +++ /dev/null @@ -1,62 +0,0 @@ -(*#* #stop file *) - -Require drop_props. -Require subst1_gen. -Require subst1_subst1. -Require subst1_confluence. -Require csubst1_defs. -Require pr0_gen. -Require pr0_subst1. -Require pr2_defs. -Require pr2_gen. -Require pr2_subst1. - - Section pr2_gen_context. (************************************************) - - Theorem pr2_gen_cabbr: (c:?; t1,t2:?) (pr2 c t1 t2) -> (e:?; u:?; d:?) - (drop d (0) c (CTail e (Bind Abbr) u)) -> - (a0:?) (csubst1 d u c a0) -> - (a:?) (drop (1) d a0 a) -> - (x1:?) (subst1 d u t1 (lift (1) d x1)) -> - (EX x2 | (subst1 d u t2 (lift (1) d x2)) & - (pr2 a x1 x2) - ). - Intros until 1; XElim H; Intros; - Pr0Subst1; Pr0Gen. -(* case 1: pr2_free *) - Rewrite H in H3; Clear H x; XEAuto. -(* case 2: pr2_delta *) - Rewrite H0 in H5; Clear H0 x. - Apply (lt_eq_gt_e i d0); Intros. -(* case 2.1: i < d0 *) - Subst1Confluence; CSubst1Drop. - Rewrite minus_x_Sy in H; [ Idtac | XAuto ]. - CSubst1GenBase; Rewrite H in H7; Clear H x2. - Rewrite (lt_plus_minus i d0) in H4; [ Idtac | XAuto ]. - DropDis; Rewrite H in H8; Clear H x3. - Subst1Subst1; Pattern 2 d0 in H; Rewrite (lt_plus_minus i d0) in H; [ Idtac | XAuto ]. - Subst1Gen; Rewrite H in H10; Simpl in H10; Clear H x3. - Rewrite <- lt_plus_minus in H10; [ Idtac | XAuto ]. - Rewrite <- lt_plus_minus_r in H10; XEAuto. -(* case 2.2: i = d0 *) - Rewrite H0 in H; Rewrite H0 in H1; Clear H0 i. - DropDis; Inversion H; Rewrite <- H8 in H1; Rewrite <- H8 in H2; Rewrite <- H8; Clear H H7 H8 e u. - Subst1Confluence; Subst1Gen; Rewrite H0 in H; Clear H0 x; XEAuto. -(* case 2.3: i > d0 *) - Subst1Confluence; Subst1Gen; Rewrite H5 in H1; Clear H2 H5 x. - CSubst1Drop; DropDis; XEAuto. - Qed. - - End pr2_gen_context. - - Tactic Definition Pr2GenContext := - Match Context With - | [ H0: (pr2 ?1 ?2 ?3); H1: (drop ?4 (0) ?1 (CTail ?5 (Bind Abbr) ?6)); - H2: (csubst1 ?4 ?6 ?1 ?7); H3: (drop (1) ?4 ?7 ?8); - H4: (subst1 ?4 ?6 ?2 (lift (1) ?4 ?9)) |- ? ] -> - LApply (pr2_gen_cabbr ?1 ?2 ?3); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?5 ?6 ?4); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?7); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?8); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?9); [ Clear H0 H4; Intros H0 | XAuto ]; - XElim H0; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr2_lift.v b/helm/coq-contribs/LAMBDA-TYPES/pr2_lift.v deleted file mode 100644 index 3546cb5f2..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr2_lift.v +++ /dev/null @@ -1,33 +0,0 @@ -(*#* #stop file *) - -Require subst0_lift. -Require drop_props. -Require pr0_lift. -Require pr2_defs. - -(*#* #caption "main properties of predicate \\texttt{pr2}" *) -(*#* #clauses pr2_props *) - - Section pr2_lift. (*******************************************************) - -(*#* #caption "conguence with lift" *) -(*#* #cap #cap c, t1, t2 #alpha e in D, d in i *) - - Theorem pr2_lift : (c,e:?; h,d:?) (drop h d c e) -> - (t1,t2:?) (pr2 e t1 t2) -> - (pr2 c (lift h d t1) (lift h d t2)). - Intros until 2; XElim H0; Intros. -(* case 1 : pr2_free *) - XAuto. -(* case 2 : pr2_delta *) - Apply (lt_le_e i d); Intros; DropDis. -(* case 2.1 : i < d *) - Rewrite minus_x_Sy in H0; [ Idtac | XAuto ]. - DropGenBase; Rewrite H0 in H; Simpl in H; XEAuto. -(* case 2.2 : i >= d *) - XEAuto. - Qed. - - End pr2_lift. - - Hints Resolve pr2_lift : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr2_subst1.v b/helm/coq-contribs/LAMBDA-TYPES/pr2_subst1.v deleted file mode 100644 index 5c7302875..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr2_subst1.v +++ /dev/null @@ -1,48 +0,0 @@ -(*#* #stop file *) - -Require subst1_defs. -Require subst1_confluence. -Require drop_props. -Require pr0_subst1. -Require pr2_defs. - - Section pr2_subst1_props. (***********************************************) - - Theorem pr2_delta1: (c,d:?; u:?; i:?) (drop i (0) c (CTail d (Bind Abbr) u)) -> - (t1,t2:?) (pr0 t1 t2) -> (t:?) (subst1 i u t2 t) -> - (pr2 c t1 t). - Intros; XElim H1; Clear t; XEAuto. - Qed. - - Hints Resolve pr2_delta1 : ltlc. - - Theorem pr2_subst1: (c,e:?; v:?; i:?) (drop i (0) c (CTail e (Bind Abbr) v)) -> - (t1,t2:?) (pr2 c t1 t2) -> - (w1:?) (subst1 i v t1 w1) -> - (EX w2 | (pr2 c w1 w2) & (subst1 i v t2 w2)). - Intros until 2; XElim H0; Intros; - Pr0Subst1. -(* case 1: pr2_free *) - XEAuto. -(* case 2: pr2_delta *) - Apply (neq_eq_e i i0); Intros. -(* case 2.1: i <> i0 *) - Subst1Confluence; XEAuto. -(* case 2.2: i = i0 *) - Rewrite <- H4 in H0; Rewrite <- H4 in H2; Clear H4 i0. - DropDis; Inversion H0; Rewrite H6 in H3; Clear H0 H5 H6 e v. - Subst1Confluence; XEAuto. - Qed. - - End pr2_subst1_props. - - Hints Resolve pr2_delta1 : ltlc. - - Tactic Definition Pr2Subst1 := - Match Context With - | [ H0: (drop ?1 (0) ?2 (CTail ?3 (Bind Abbr) ?4)); - H1: (pr2 ?2 ?5 ?6); H3: (subst1 ?1 ?4 ?5 ?7) |- ? ] -> - LApply (pr2_subst1 ?2 ?3 ?4 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?5 ?6); [ Clear H_x H1; Intros H1 | XAuto ]; - LApply (H1 ?7); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr3_confluence.v b/helm/coq-contribs/LAMBDA-TYPES/pr3_confluence.v deleted file mode 100644 index 6f5019bc9..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr3_confluence.v +++ /dev/null @@ -1,59 +0,0 @@ -Require pr2_confluence. -Require pr3_defs. - - Section pr3_confluence. (*************************************************) - -(*#* #stop theorem *) - -(*#* #caption "confluence with single step reduction: strip lemma" *) -(*#* #cap #cap c, t0, t1, t2, t *) - - Theorem pr3_strip : (c:?; t0,t1:?) (pr3 c t0 t1) -> (t2:?) (pr2 c t0 t2) -> - (EX t | (pr3 c t1 t) & (pr3 c t2 t)). - Intros until 1; XElim H; Intros. -(* case 1 : pr3_refl *) - XEAuto. -(* case 2 : pr3_sing *) - Pr2Confluence. - LApply (H1 x); [ Clear H1 H2; Intros H1 | XAuto ]. - XElim H1; Intros; XEAuto. - Qed. - -(*#* #start theorem *) - -(*#* #caption "confluence with itself: Church-Rosser property" *) -(*#* #cap #cap c, t0, t1, t2, t *) - - Theorem pr3_confluence : (c:?; t0,t1:?) (pr3 c t0 t1) -> (t2:?) (pr3 c t0 t2) -> - (EX t | (pr3 c t1 t) & (pr3 c t2 t)). - -(*#* #stop file *) - - Intros until 1; XElim H; Intros. -(* case 1 : pr3_refl *) - XEAuto. -(* case 2 : pr3_sing *) - LApply (pr3_strip c t3 t5); [ Clear H2; Intros H2 | XAuto ]. - LApply (H2 t2); [ Clear H H2; Intros H | XAuto ]. - XElim H; Intros. - LApply (H1 x); [ Clear H1 H2; Intros H1 | XAuto ]. - XElim H1; Intros; XEAuto. - Qed. - - End pr3_confluence. - - Tactic Definition Pr3Confluence := - Match Context With - | [ H1: (pr3 ?1 ?2 ?3); H2: (pr2 ?1 ?2 ?4) |-? ] -> - LApply (pr3_strip ?1 ?2 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (pr3 ?1 ?2 ?3); H2: (pr3 ?1 ?2 ?4) |-? ] -> - LApply (pr3_confluence ?1 ?2 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros - | _ -> Pr2Confluence. - -(*#* #start file *) - -(*#* #single *) diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr3_defs.v b/helm/coq-contribs/LAMBDA-TYPES/pr3_defs.v deleted file mode 100644 index df6764b3f..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr3_defs.v +++ /dev/null @@ -1,194 +0,0 @@ -Require Export pr1_defs. -Require Export pr2_defs. - -(*#* #caption "axioms for the relation $\\PrT{}{}{}$", - "reflexivity", "single step transitivity" -*) -(*#* #cap #cap c, t, t1, t2, t3 *) - - Inductive pr3 [c:C] : T -> T -> Prop := - | pr3_refl: (t:?) (pr3 c t t) - | pr3_sing: (t2,t1:?) (pr2 c t1 t2) -> - (t3:?) (pr3 c t2 t3) -> (pr3 c t1 t3). - -(*#* #stop file *) - - Hint pr3: ltlc := Constructors pr3. - - Section pr3_gen_base. (***************************************************) - - Theorem pr3_gen_sort: (c:?; x:?; n:?) (pr3 c (TSort n) x) -> - x = (TSort n). - Intros; InsertEq H '(TSort n); XElim H; Clear y x; Intros. -(* case 1: pr3_refl *) - XAuto. -(* case 2: pr3_sing *) - Rewrite H2 in H; Clear H2 t1; Pr2GenBase; XAuto. - Qed. - - Tactic Definition IH := - Match Context With - | [ H: (u,t:T) (TTail (Bind Abst) ?1 ?2) = (TTail (Bind Abst) u t) -> ? |- ? ] -> - LApply (H ?1 ?2); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (u,t:T) (TTail (Flat Appl) ?1 ?2) = (TTail (Flat Appl) u t) -> ? |- ? ] -> - LApply (H ?1 ?2); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (u,t:T) (TTail (Flat Cast) ?1 ?2) = (TTail (Flat Cast) u t) -> ? |- ? ] -> - LApply (H ?1 ?2); [ Clear H; Intros H | XAuto ]; - XDecompose H. - - Theorem pr3_gen_abst: (c:?; u1,t1,x:?) - (pr3 c (TTail (Bind Abst) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Bind Abst) u2 t2) & - (pr3 c u1 u2) & (b:?; u:?) - (pr3 (CTail c (Bind b) u) t1 t2) - ). - Intros until 1; InsertEq H '(TTail (Bind Abst) u1 t1); - UnIntro H t1; UnIntro H u1; XElim H; Clear y x; Intros; - Rename x into u0; Rename x0 into t0. -(* case 1 : pr3_refl *) - XEAuto. -(* case 2 : pr3_sing *) - Rewrite H2 in H; Clear H0 H2 t1; Pr2GenBase. - Rewrite H0 in H1; Clear H0 t2; IH; XEAuto. - Qed. - - Theorem pr3_gen_appl: (c:?; u1,t1,x:?) - (pr3 c (TTail (Flat Appl) u1 t1) x) -> (OR - (EX u2 t2 | x = (TTail (Flat Appl) u2 t2) & - (pr3 c u1 u2) & (pr3 c t1 t2) - ) | - (EX y1 z1 u2 t2 | (pr3 c (TTail (Bind Abbr) u2 t2) x) & - (pr3 c u1 u2) & - (pr3 c t1 (TTail (Bind Abst) y1 z1)) & - (b:?; u:?) (pr3 (CTail c (Bind b) u) z1 t2) - ) | - (EX b y1 z1 z2 u2 v2 t2 | - (pr3 c (TTail (Bind b) v2 z2) x) & ~b=Abst & - (pr3 c u1 u2) & - (pr3 c t1 (TTail (Bind b) y1 z1)) & - (pr3 c y1 v2) & (pr0 z1 t2)) - ). - Intros; InsertEq H '(TTail (Flat Appl) u1 t1). - UnIntro t1 H; UnIntro u1 H. - XElim H; Clear y x; Intros; - Rename x into u0; Rename x0 into t0. -(* case 1: pr3_refl *) - XEAuto. -(* case 2: pr3_sing *) - Rewrite H2 in H; Clear H2 t1; Pr2GenBase. -(* case 2.1: short step: compatibility *) - Rewrite H3 in H1; Clear H0 H3 t2. - IH; Try (Rewrite H0; Clear H0 t3); XDEAuto 6. -(* case 2.2: short step: beta *) - Rewrite H4 in H0; Rewrite H3; Clear H1 H3 H4 t0 t2; XEAuto. -(* case 2.3: short step: upsilon *) - Rewrite H5 in H0; Rewrite H4; Clear H1 H4 H5 t0 t2; XEAuto. - Qed. - - Theorem pr3_gen_cast: (c:?; u1,t1,x:?) - (pr3 c (TTail (Flat Cast) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Flat Cast) u2 t2) & - (pr3 c u1 u2) & (pr3 c t1 t2) - ) \/ - (pr3 c t1 x). - Intros; InsertEq H '(TTail (Flat Cast) u1 t1); - UnIntro H t1; UnIntro H u1; XElim H; Clear y x; Intros; - Rename x into u0; Rename x0 into t0. -(* case 1: pr3_refl *) - Rewrite H; Clear H t; XEAuto. -(* case 2: pr3_sing *) - Rewrite H2 in H; Clear H2 t1; Pr2GenBase. -(* case 2.1: short step: compatinility *) - Rewrite H3 in H1; Clear H0 H3 t2; - IH; Try Rewrite H0; XEAuto. -(* case 2.2: short step: epsilon *) - XEAuto. - Qed. - - End pr3_gen_base. - - Tactic Definition Pr3GenBase := - Match Context With - | [ H: (pr3 ?1 (TSort ?2) ?3) |- ? ] -> - LApply (pr3_gen_sort ?1 ?3 ?2); [ Clear H; Intros | XAuto ] - | [ H: (pr3 ?1 (TTail (Bind Abst) ?2 ?3) ?4) |- ? ] -> - LApply (pr3_gen_abst ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (pr3 ?1 (TTail (Flat Appl) ?2 ?3) ?4) |- ? ] -> - LApply (pr3_gen_appl ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (pr3 ?1 (TTail (Flat Cast) ?2 ?3) ?4) |- ? ] -> - LApply (pr3_gen_cast ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H. - - Section pr3_props. (******************************************************) - - Theorem pr3_pr2: (c,t1,t2:?) (pr2 c t1 t2) -> (pr3 c t1 t2). - XEAuto. - Qed. - - Theorem pr3_t: (t2,t1,c:?) (pr3 c t1 t2) -> - (t3:?) (pr3 c t2 t3) -> (pr3 c t1 t3). - Intros until 1; XElim H; XEAuto. - Qed. - - Theorem pr3_thin_dx: (c:?; t1,t2:?) (pr3 c t1 t2) -> - (u:?; f:?) (pr3 c (TTail (Flat f) u t1) - (TTail (Flat f) u t2)). - Intros; XElim H; XEAuto. - Qed. - - Theorem pr3_tail_1: (c:?; u1,u2:?) (pr3 c u1 u2) -> - (k:?; t:?) (pr3 c (TTail k u1 t) (TTail k u2 t)). - Intros until 1; XElim H; Intros. -(* case 1: pr3_refl *) - XAuto. -(* case 2: pr3_sing *) - EApply pr3_sing; [ Apply pr2_tail_1; Apply H | XAuto ]. - Qed. - - Theorem pr3_tail_2: (c:?; u,t1,t2:?; k:?) (pr3 (CTail c k u) t1 t2) -> - (pr3 c (TTail k u t1) (TTail k u t2)). - Intros until 1; XElim H; Intros. -(* case 1: pr3_refl *) - XAuto. -(* case 2: pr3_sing *) - EApply pr3_sing; [ Apply pr2_tail_2; Apply H | XAuto ]. - Qed. - - Hints Resolve pr3_tail_1 pr3_tail_2 : ltlc. - - Theorem pr3_tail_21: (c:?; u1,u2:?) (pr3 c u1 u2) -> - (k:?; t1,t2:?) (pr3 (CTail c k u1) t1 t2) -> - (pr3 c (TTail k u1 t1) (TTail k u2 t2)). - Intros. - EApply pr3_t; [ Apply pr3_tail_2 | Apply pr3_tail_1 ]; XAuto. - Qed. - - Theorem pr3_tail_12: (c:?; u1,u2:?) (pr3 c u1 u2) -> - (k:?; t1,t2:?) (pr3 (CTail c k u2) t1 t2) -> - (pr3 c (TTail k u1 t1) (TTail k u2 t2)). - Intros. - EApply pr3_t; [ Apply pr3_tail_1 | Apply pr3_tail_2 ]; XAuto. - Qed. - - Theorem pr3_shift: (h:?; c,e:?) (drop h (0) c e) -> - (t1,t2:?) (pr3 c t1 t2) -> - (pr3 e (app c h t1) (app c h t2)). - Intros until 2; XElim H0; Clear t1 t2; Intros. -(* case 1: pr3_refl *) - XAuto. -(* case 2: pr3_sing *) - XEAuto. - Qed. - - Theorem pr3_pr1: (t1,t2:?) (pr1 t1 t2) -> (c:?) (pr3 c t1 t2). - Intros until 1; XElim H; XEAuto. - Qed. - - End pr3_props. - - Hints Resolve pr3_pr2 pr3_t pr3_pr1 - pr3_thin_dx pr3_tail_12 pr3_tail_21 pr3_shift : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr3_gen.v b/helm/coq-contribs/LAMBDA-TYPES/pr3_gen.v deleted file mode 100644 index e96f49fc3..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr3_gen.v +++ /dev/null @@ -1,132 +0,0 @@ -(*#* #stop file *) - -Require pr2_gen. -Require pr3_defs. -Require pr3_props. - - Section pr3_gen_lift. (***************************************************) - -(*#* #caption "generation lemma for lift" *) -(*#* #cap #cap c #alpha e in D, t1 in U1, t2 in U2, x in T, d in i *) - - Theorem pr3_gen_lift: (c:?; t1,x:?; h,d:?) (pr3 c (lift h d t1) x) -> - (e:?) (drop h d c e) -> - (EX t2 | x = (lift h d t2) & (pr3 e t1 t2)). - Intros until 1; InsertEq H '(lift h d t1); - UnIntro H t1; XElim H; Clear y x; Intros; Rename x into t4. -(* case 1 : pr3_refl *) - XEAuto. -(* case 2 : pr3_sing *) - Rewrite H2 in H; Pr2Gen. - LApply (H1 x); [ Clear H1; Intros H1 | XAuto ]. - LApply (H1 e); [ Clear H1; Intros H1 | XAuto ]. - XElim H1; XEAuto. - Qed. - - End pr3_gen_lift. - - Section pr3_gen_lref. (***************************************************) - - Theorem pr3_gen_lref: (c:?; x:?; n:?) (pr3 c (TLRef n) x) -> - x = (TLRef n) \/ - (EX d u v | (drop n (0) c (CTail d (Bind Abbr) u)) & - (pr3 d u v) & - x = (lift (S n) (0) v) - ). - Intros; InsertEq H '(TLRef n); XElim H; Clear y x; Intros. -(* case 1: pr3_refl *) - XAuto. -(* case 2: pr3_sing *) - Rewrite H2 in H; Clear H2 t1; Pr2GenBase. -(* case 2.1: pr2_free *) - XAuto. -(* case 2.2: pr2_delta *) - Rewrite H4 in H0; Clear H1 H4 t2. - LApply (pr3_gen_lift c x1 t3 (S n) (0)); [ Clear H0; Intros | XAuto ]. - LApply (H x0); [ Clear H; Intros | XEAuto ]. - XElim H; XEAuto. - Qed. - - End pr3_gen_lref. - - Section pr3_gen_bind. (***************************************************) - - Tactic Definition IH := - Match Context With - | [ H: (u,t:T) (TTail (Bind Void) ?1 ?2) = (TTail (Bind Void) u t) -> ? |- ? ] -> - LApply (H ?1 ?2); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (u,t:T) (TTail (Bind Abbr) ?1 ?2) = (TTail (Bind Abbr) u t) -> ? |- ? ] -> - LApply (H ?1 ?2); [ Clear H; Intros H | XAuto ]; - XDecompose H. - - Theorem pr3_gen_void: (c:?; u1,t1,x:?) (pr3 c (TTail (Bind Void) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Bind Void) u2 t2) & - (pr3 c u1 u2) & (b:?; u:?) - (pr3 (CTail c (Bind b) u) t1 t2) - ) \/ - (pr3 (CTail c (Bind Void) u1) t1 (lift (1) (0) x)). - Intros until 1; InsertEq H '(TTail (Bind Void) u1 t1); - UnIntro t1 H; UnIntro u1 H; XElim H; Intros. -(* case 1 : pr3_refl *) - Rewrite H; XEAuto. -(* case 2 : pr3_sing *) - Rewrite H2 in H; Clear H2 t0; Pr2Gen. -(* case 2.1 : short step: compatibility *) - Rewrite H3 in H1; Clear H0 H3 t2. - IH; Try Pr3Context; Try Rewrite H2; XEAuto. -(* case 2.2 : short step: zeta *) - XEAuto. - Qed. - - Theorem pr3_gen_abbr: (c:?; u1,t1,x:?) (pr3 c (TTail (Bind Abbr) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Bind Abbr) u2 t2) & - (pr3 c u1 u2) & - (pr3 (CTail c (Bind Abbr) u1) t1 t2) - ) \/ - (pr3 (CTail c (Bind Abbr) u1) t1 (lift (1) (0) x)). - Intros until 1; InsertEq H '(TTail (Bind Abbr) u1 t1); - UnIntro H t1; UnIntro H u1; XElim H; Clear y x; Intros; - Rename x into u1; Rename x0 into t4. -(* case 1: pr3_refl *) - Rewrite H; XEAuto. -(* case 2: pr3_sing *) - Rewrite H2 in H; Clear H2 t1; Pr2Gen. -(* case 2.1: short step: compatibility *) - Rewrite H3 in H1; Clear H0 H3 t2. - IH; Repeat Pr3Context; - Try (Rewrite H0; Clear H0 t3; Left; EApply ex3_2_intro); - XEAuto. -(* case 2.2: short step: beta *) - Rewrite H3 in H1; Clear H0 H3 t1. - IH; Repeat Pr3Context; - Try (Rewrite H0; Clear H0 t3; Left; EApply ex3_2_intro); - XEAuto. -(* case 2.3: short step: delta *) - Rewrite H3 in H1; Clear H0 H3 t2. - IH; Repeat Pr3Context; - Try (Rewrite H0; Clear H0 t3; Left; EApply ex3_2_intro); - XDEAuto 7. -(* case 2.4: short step: zeta *) - XEAuto. - Qed. - - End pr3_gen_bind. - - Tactic Definition Pr3Gen := - Match Context With - | [ H: (pr3 ?1 (TLRef ?2) ?3) |- ? ] -> - LApply (pr3_gen_lref ?1 ?3 ?2); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (pr3 ?1 (TTail (Bind Void) ?2 ?3) ?4) |- ? ] -> - LApply (pr3_gen_void ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (pr3 ?1 (TTail (Bind Abbr) ?2 ?3) ?4) |- ? ] -> - LApply (pr3_gen_abbr ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H0: (pr3 ?1 (lift ?2 ?3 ?4) ?5); - H1: (drop ?2 ?3 ?1 ?6) |- ? ] -> - LApply (pr3_gen_lift ?1 ?4 ?5 ?2 ?3); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?6); [ Clear H0; Intros H0 | XAuto ]; - XDecompose H0 - | _ -> Pr3GenBase. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr3_gen_context.v b/helm/coq-contribs/LAMBDA-TYPES/pr3_gen_context.v deleted file mode 100644 index a7f3e92be..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr3_gen_context.v +++ /dev/null @@ -1,42 +0,0 @@ -(*#* #stop file *) - -Require csubst1_defs. -Require pr2_gen_context. -Require pr3_defs. - - Section pr3_gen_context. (************************************************) - - Theorem pr3_gen_cabbr: (c:?; t1,t2:?) (pr3 c t1 t2) -> (e:?; u:?; d:?) - (drop d (0) c (CTail e (Bind Abbr) u)) -> - (a0:?) (csubst1 d u c a0) -> - (a:?) (drop (1) d a0 a) -> - (x1:?) (subst1 d u t1 (lift (1) d x1)) -> - (EX x2 | (subst1 d u t2 (lift (1) d x2)) & - (pr3 a x1 x2) - ). - Intros until 1; XElim H; Intros. -(* case 1: pr3_refl *) - XEAuto. -(* case 1: pr3_refl *) - Pr2GenContext. - LApply (H1 e u d); [ Clear H1; Intros H1 | XAuto ]. - LApply (H1 a0); [ Clear H1; Intros H1 | XAuto ]. - LApply (H1 a); [ Clear H1; Intros H1 | XAuto ]. - LApply (H1 x); [ Clear H1; Intros H1 | XAuto ]. - XElim H1; XEAuto. - Qed. - - End pr3_gen_context. - - Tactic Definition Pr3GenContext := - Match Context With - | [ H0: (pr3 ?1 ?2 ?3); H1: (drop ?4 (0) ?1 (CTail ?5 (Bind Abbr) ?6)); - H2: (csubst1 ?4 ?6 ?1 ?7); H3: (drop (1) ?4 ?7 ?8); - H4: (subst1 ?4 ?6 ?2 (lift (1) ?4 ?9)) |- ? ] -> - LApply (pr3_gen_cabbr ?1 ?2 ?3); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?5 ?6 ?4); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?7); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?8); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?9); [ Clear H0 H4; Intros H0 | XAuto ]; - XElim H0; Intros - | _ -> Pr2GenContext. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr3_props.v b/helm/coq-contribs/LAMBDA-TYPES/pr3_props.v deleted file mode 100644 index b5c7df937..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr3_props.v +++ /dev/null @@ -1,127 +0,0 @@ -Require subst0_subst0. -Require pr0_subst0. -Require cpr0_defs. -Require pr2_lift. -Require pr2_gen. -Require pr3_defs. - -(*#* #caption "main properties of the relation $\\PrT{}{}{}$" *) -(*#* #clauses *) - -(*#* #stop file *) - - Section pr3_context. (****************************************************) - - Theorem pr3_pr0_pr2_t: (u1,u2:?) (pr0 u1 u2) -> - (c:?; t1,t2:?; k:?) (pr2 (CTail c k u2) t1 t2) -> - (pr3 (CTail c k u1) t1 t2). - Intros; Inversion H0; Clear H0; XAuto. - NewInduction i. -(* case 1 : pr2_delta i = 0 *) - DropGenBase; Inversion H0; Clear H0 H4 H5 H6 c k t. - Rewrite H7 in H; Clear H7 u2. - Pr0Subst0; XEAuto. -(* case 2 : pr2_delta i > 0 *) - NewInduction k; DropGenBase; XEAuto. - Qed. - - Theorem pr3_pr2_pr2_t: (c:?; u1,u2:?) (pr2 c u1 u2) -> - (t1,t2:?; k:?) (pr2 (CTail c k u2) t1 t2) -> - (pr3 (CTail c k u1) t1 t2). - Intros until 1; Inversion H; Clear H; Intros. -(* case 1 : pr2_free *) - EApply pr3_pr0_pr2_t; [ Apply H0 | XAuto ]. -(* case 2 : pr2_delta *) - Inversion H; [ XAuto | NewInduction i0 ]. -(* case 2.1 : i0 = 0 *) - DropGenBase; Inversion H4; Clear H3 H4 H7 t t4. - Rewrite <- H9; Rewrite H10 in H; Rewrite <- H11 in H6; Clear H9 H10 H11 d0 k u0. - Subst0Subst0; Arith9'In H4 i; Clear H2 H H6 u2. - Pr0Subst0; Apply pr3_sing with t2:=x0; XEAuto. -(* case 2.2 : i0 > 0 *) - Clear IHi0; NewInduction k; DropGenBase; XEAuto. - Qed. - - Theorem pr3_pr2_pr3_t: (c:?; u2,t1,t2:?; k:?) - (pr3 (CTail c k u2) t1 t2) -> - (u1:?) (pr2 c u1 u2) -> - (pr3 (CTail c k u1) t1 t2). - Intros until 1; XElim H; Intros. -(* case 1 : pr3_refl *) - XAuto. -(* case 2 : pr3_sing *) - EApply pr3_t. - EApply pr3_pr2_pr2_t; [ Apply H2 | Apply H ]. - XAuto. - Qed. - -(*#* #caption "reduction inside context items" *) -(*#* #cap #cap t1, t2 #alpha c in E, u1 in V1, u2 in V2, k in z *) - - Theorem pr3_pr3_pr3_t: (c:?; u1,u2:?) (pr3 c u1 u2) -> - (t1,t2:?; k:?) (pr3 (CTail c k u2) t1 t2) -> - (pr3 (CTail c k u1) t1 t2). - Intros until 1; XElim H; Intros. -(* case 1 : pr3_refl *) - XAuto. -(* case 2 : pr3_sing *) - EApply pr3_pr2_pr3_t; [ Apply H1; XAuto | XAuto ]. - Qed. - - End pr3_context. - - Tactic Definition Pr3Context := - Match Context With - | [ H1: (pr0 ?2 ?3); H2: (pr2 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pr3_pr0_pr2_t ?2 ?3); [ Intros H_x | XAuto ]; - LApply (H_x ?1 ?5 ?6 ?4); [ Clear H_x H2; Intros | XAuto ] - | [ H1: (pr0 ?2 ?3); H2: (pr3 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pr3_pr2_pr3_t ?1 ?3 ?5 ?6 ?4); [ Clear H2; Intros H2 | XAuto ]; - LApply (H2 ?2); [ Clear H2; Intros | XAuto ] - | [ H1: (pr2 ?1 ?2 ?3); H2: (pr2 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pr3_pr2_pr2_t ?1 ?2 ?3); [ Intros H_x | XAuto ]; - LApply (H_x ?5 ?6 ?4); [ Clear H_x H2; Intros | XAuto ] - | [ H1: (pr2 ?1 ?2 ?3); H2: (pr3 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pr3_pr2_pr3_t ?1 ?3 ?5 ?6 ?4); [ Clear H2; Intros H2 | XAuto ]; - LApply (H2 ?2); [ Clear H2; Intros | XAuto ] - | [ H1: (pr3 ?1 ?2 ?3); H2: (pr3 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pr3_pr3_pr3_t ?1 ?2 ?3); [ Intros H_x | XAuto ]; - LApply (H_x ?5 ?6 ?4); [ Clear H_x H2; Intros | XAuto ]. - - Section pr3_lift. (*******************************************************) - -(*#* #caption "conguence with lift" *) -(*#* #cap #cap c, t1, t2 #alpha e in D, d in i *) - - Theorem pr3_lift: (c,e:?; h,d:?) (drop h d c e) -> - (t1,t2:?) (pr3 e t1 t2) -> - (pr3 c (lift h d t1) (lift h d t2)). - Intros until 2; XElim H0; Intros; XEAuto. - Qed. - - End pr3_lift. - - Hints Resolve pr3_lift : ltlc. - - Section pr3_cpr0. (*******************************************************) - - Theorem pr3_cpr0_t: (c1,c2:?) (cpr0 c2 c1) -> (t1,t2:?) (pr3 c1 t1 t2) -> - (pr3 c2 t1 t2). - Intros until 1; XElim H; Intros. -(* case 1 : cpr0_refl *) - XAuto. -(* case 2 : cpr0_comp *) - Pr3Context; Clear H1. - XElim H2; Intros. -(* case 2.1 : pr3_refl *) - XAuto. -(* case 2.2 : pr3_sing *) - EApply pr3_t; [ Idtac | XEAuto ]. Clear H2 H3 c1 c2 t1 t2 t4 u2. - Inversion_clear H1. -(* case 2.2.1 : pr2_free *) - XAuto. -(* case 2.2.1 : pr2_delta *) - Cpr0Drop; Pr0Subst0; Apply pr3_sing with t2:=x; XEAuto. - Qed. - - End pr3_cpr0. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr3_subst1.v b/helm/coq-contribs/LAMBDA-TYPES/pr3_subst1.v deleted file mode 100644 index 3db6ce000..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr3_subst1.v +++ /dev/null @@ -1,32 +0,0 @@ -(*#* #stop file *) - -Require subst1_defs. -Require pr2_subst1. -Require pr3_defs. - - Section pr3_subst1_props. (***********************************************) - - Theorem pr3_subst1: (c,e:?; v:?; i:?) (drop i (0) c (CTail e (Bind Abbr) v)) -> - (t1,t2:?) (pr3 c t1 t2) -> - (w1:?) (subst1 i v t1 w1) -> - (EX w2 | (pr3 c w1 w2) & (subst1 i v t2 w2)). - Intros until 2; XElim H0; Clear t1 t2; Intros. -(* case 1: pr3_refl *) - XEAuto. -(* case 2: pr3_single *) - Pr2Subst1. - LApply (H2 x); [ Clear H2; Intros H2 | XAuto ]. - XElim H2; XEAuto. - Qed. - - End pr3_subst1_props. - - Tactic Definition Pr3Subst1 := - Match Context With - | [ H0: (drop ?1 (0) ?2 (CTail ?3 (Bind Abbr) ?4)); - H1: (pr3 ?2 ?5 ?6); H3: (subst1 ?1 ?4 ?5 ?7) |- ? ] -> - LApply (pr3_subst1 ?2 ?3 ?4 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?5 ?6); [ Clear H_x H1; Intros H1 | XAuto ]; - LApply (H1 ?7); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros - | _ -> Pr2Subst1. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst0_confluence.v b/helm/coq-contribs/LAMBDA-TYPES/subst0_confluence.v deleted file mode 100644 index bbbfdc469..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst0_confluence.v +++ /dev/null @@ -1,80 +0,0 @@ -(*#* #stop file *) - -Require lift_gen. -Require subst0_gen. -Require subst0_defs. - - Section subst0_confluence. (**********************************************) - - Tactic Definition IH := - Match Context With - | [ H1: (t2,u2:?; i2:?) (subst0 i2 u2 ?1 t2) -> ~?2=i2 -> ?; - H2: (subst0 ?3 ?4 ?1 ?5); H3: ~?2=?3 |- ? ] -> - LApply (H1 ?5 ?4 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply H1; [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (t2,u2:?; i2:?) (subst0 i2 u2 ?1 t2) -> ~(s k ?2)=i2 -> ?; - H2: (subst0 (s k ?3) ?4 ?1 ?5); H3: ~?2=?3 |- ? ] -> - LApply (H1 ?5 ?4 (s k ?3)); [ Clear H1; Intros H1 | XAuto ]; - LApply H1; [ Clear H1; Intros H1 | Unfold not in H3; Unfold not; XEAuto ]; - XElim H1; Intros - | [ H1: (t2:T) (subst0 ?1 ?2 ?3 t2) -> ?; H2: (subst0 ?1 ?2 ?3 ?4) |- ? ] -> - LApply (H1 ?4); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros H1; [ Try Rewrite H1 | XElim H1; Intros | Idtac | Idtac ]. - - Theorem subst0_confluence_neq : (t0,t1,u1:?; i1:?) (subst0 i1 u1 t0 t1) -> - (t2,u2:?; i2:?) (subst0 i2 u2 t0 t2) -> - ~i1=i2 -> - (EX t | (subst0 i2 u2 t1 t) & - (subst0 i1 u1 t2 t)). - - Intros until 1; XElim H; Intros; - Subst0GenBase; Try Rewrite H in H0; Try Rewrite H1; Try Rewrite H3; - Try EqFalse; Repeat IH; XEAuto. - Qed. - - Theorem subst0_confluence_eq : (t0,t1,u:?; i:?) (subst0 i u t0 t1) -> - (t2:?) (subst0 i u t0 t2) -> (OR - t1 = t2 | - (EX t | (subst0 i u t1 t) & (subst0 i u t2 t)) | - (subst0 i u t1 t2) | - (subst0 i u t2 t1)). - Intros until 1; XElim H; Intros; - Subst0GenBase; Try Rewrite H1; Try Rewrite H3; - Repeat IH; XEAuto. - Qed. - - End subst0_confluence. - - Tactic Definition Subst0Confluence := - Match Context With - | [ H0: (subst0 ?1 ?2 ?3 ?4); - H1: (subst0 ?1 ?2 ?3 ?5) |- ? ] -> - LApply (subst0_confluence_eq ?3 ?4 ?2 ?1); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?5); [ Clear H0; Intros H0 | XAuto ]; - XElim H0; [ Intros | Intros H0; XElim H0; Intros | Intros | Intros ] - | [ H0: (subst0 ?1 ?2 ?3 ?4); - H1: (subst0 ?5 ?6 ?3 ?7) |- ? ] -> - LApply (subst0_confluence_neq ?3 ?4 ?2 ?1); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?7 ?6 ?5); [ Clear H0 H1; Intros H0 | XAuto ]; - LApply H0; [ Clear H0; Intros H0 | Simpl; XAuto ]; - XElim H0; Intros. - - Section subst0_confluence_lift. (*****************************************) - - Theorem subst0_confluence_lift: (t0,t1,u:?; i:?) (subst0 i u t0 (lift (1) i t1)) -> - (t2:?) (subst0 i u t0 (lift (1) i t2)) -> - t1 = t2. - Intros; Subst0Confluence; - Try Subst0Gen; SymEqual; LiftGen; XEAuto. - Qed. - - End subst0_confluence_lift. - - Tactic Definition Subst0ConfluenceLift := - Match Context With - | [ H0: (subst0 ?1 ?2 ?3 (lift (1) ?1 ?4)); - H1: (subst0 ?1 ?2 ?3 (lift (1) ?1 ?5)) |- ? ] -> - LApply (subst0_confluence_lift ?3 ?4 ?2 ?1); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?5); [ Clear H0; Intros | XAuto ] - | _ -> Subst0Confluence. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst0_defs.v b/helm/coq-contribs/LAMBDA-TYPES/subst0_defs.v deleted file mode 100644 index d99a405db..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst0_defs.v +++ /dev/null @@ -1,62 +0,0 @@ -Require Export lift_defs. - -(*#* #caption "axioms for strict substitution in terms", - "substituted local reference", - "substituted tail item: first operand", - "substituted tail item: second operand", - "substituted tail item: both operands" -*) -(*#* #cap #cap t, t1, t2 #alpha v in W, u in V, u1 in V1, u2 in V2, k in z, s in p *) - - Inductive subst0 : nat -> T -> T -> T -> Prop := - | subst0_lref: (v:?; i:?) (subst0 i v (TLRef i) (lift (S i) (0) v)) - | subst0_fst : (v,u2,u1:?; i:?) (subst0 i v u1 u2) -> - (t:?; k:?) (subst0 i v (TTail k u1 t) (TTail k u2 t)) - | subst0_snd : (k:?; v,t2,t1:?; i:?) (subst0 (s k i) v t1 t2) -> (u:?) - (subst0 i v (TTail k u t1) (TTail k u t2)) - | subst0_both: (v,u1,u2:?; i:?) (subst0 i v u1 u2) -> - (k:?; t1,t2:?) (subst0 (s k i) v t1 t2) -> - (subst0 i v (TTail k u1 t1) (TTail k u2 t2)). - -(*#* #stop file *) - - Hint subst0 : ltlc := Constructors subst0. - - Section subst0_gen_base. (************************************************) - - Theorem subst0_gen_sort : (v,x:?; i,n:?) (subst0 i v (TSort n) x) -> - (P:Prop) P. - Intros; Inversion H. - Qed. - - Theorem subst0_gen_lref : (v,x:?; i,n:?) (subst0 i v (TLRef n) x) -> - n = i /\ x = (lift (S n) (0) v). - Intros; Inversion H; XAuto. - Qed. - - Theorem subst0_gen_tail : (k:?; v,u1,t1,x:?; i:?) - (subst0 i v (TTail k u1 t1) x) -> (OR - (EX u2 | x = (TTail k u2 t1) & - (subst0 i v u1 u2)) | - (EX t2 | x = (TTail k u1 t2) & - (subst0 (s k i) v t1 t2)) | - (EX u2 t2 | x = (TTail k u2 t2) & - (subst0 i v u1 u2) & - (subst0 (s k i) v t1 t2)) - ). - - Intros; Inversion H; XEAuto. - Qed. - - End subst0_gen_base. - - Tactic Definition Subst0GenBase := - Match Context With - | [ H: (subst0 ?1 ?2 (TSort ?3) ?4) |- ? ] -> - Apply (subst0_gen_sort ?2 ?4 ?1 ?3); Apply H - | [ H: (subst0 ?1 ?2 (TLRef ?3) ?4) |- ? ] -> - LApply (subst0_gen_lref ?2 ?4 ?1 ?3); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (subst0 ?1 ?2 (TTail ?3 ?4 ?5) ?6) |- ? ] -> - LApply (subst0_gen_tail ?3 ?2 ?4 ?5 ?6 ?1); [ Clear H; Intros H | XAuto ]; - XElim H; Intros H; XElim H; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst0_gen.v b/helm/coq-contribs/LAMBDA-TYPES/subst0_gen.v deleted file mode 100644 index d46ca3555..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst0_gen.v +++ /dev/null @@ -1,130 +0,0 @@ -(*#* #stop file *) - -Require lift_props. -Require subst0_defs. - - Section subst0_gen_lift_lt. (*********************************************) - - Tactic Definition IH := - Match Context With - [ H1: (x:T; i,h,d:nat) (subst0 i (lift h d ?1) (lift h (S (plus i d)) ?2) x) -> ?; - H2: (subst0 ?3 (lift ?4 ?5 ?1) (lift ?4 (S (plus ?3 ?5)) ?2) ?6) |- ? ] -> - LApply (H1 ?6 ?3 ?4 ?5); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros. - - Theorem subst0_gen_lift_lt : (u,t1,x:?; i,h,d:?) (subst0 i (lift h d u) (lift h (S (plus i d)) t1) x) -> - (EX t2 | x = (lift h (S (plus i d)) t2) & (subst0 i u t1 t2)). - XElim t1; Intros. -(* case 1: TSort *) - Rewrite lift_sort in H; Subst0GenBase. -(* case 2: TLRef n *) - Apply (lt_le_e n (S (plus i d))); Intros. -(* case 2.1: n < 1 + i + d *) - Rewrite lift_lref_lt in H; [ Idtac | XAuto ]. - Subst0GenBase; Rewrite H1; Rewrite H. - Rewrite <- lift_d; Simpl; XEAuto. -(* case 2.2: n >= 1 + i + d *) - Rewrite lift_lref_ge in H; [ Idtac | XAuto ]. - Subst0GenBase; Rewrite <- H in H0. - EApply le_false; [ Idtac | Apply H0 ]; XAuto. -(* case 3: TTail k *) - Rewrite lift_tail in H1; Subst0GenBase; Rewrite H1; Clear H1 x. -(* case 3.1: subst0_fst *) - IH; Rewrite H; Rewrite <- lift_tail; XEAuto. -(* case 3.2: subst0_snd *) - SRwIn H2; IH; Rewrite H0; SRwBack; Rewrite <- lift_tail; XEAuto. -(* case 3.2: subst0_snd *) - SRwIn H3; Repeat IH; Rewrite H; Rewrite H0; SRwBack; - Rewrite <- lift_tail; XEAuto. - Qed. - - End subst0_gen_lift_lt. - - Section subst0_gen_lift_false. (******************************************) - - Theorem subst0_gen_lift_false : (t,u,x:?; h,d,i:?) - (le d i) -> (lt i (plus d h)) -> - (subst0 i u (lift h d t) x) -> - (P:Prop) P. - XElim t; Intros. -(* case 1: TSort *) - Rewrite lift_sort in H1; Subst0GenBase. -(* case 2: TLRef n *) - Apply (lt_le_e n d); Intros. -(* case 2.1: n < d *) - Rewrite lift_lref_lt in H1; [ Idtac | XAuto ]. - Subst0GenBase; Rewrite H1 in H2. - EApply le_false; [ Apply H | XAuto ]. -(* case 2.2: n >= d *) - Rewrite lift_lref_ge in H1; [ Idtac | XAuto ]. - Subst0GenBase; Rewrite <- H1 in H0. - EApply le_false; [ Apply H2 | XEAuto ]. -(* case 3: TTail k *) - Rewrite lift_tail in H3; Subst0GenBase. -(* case 3.1: subst0_fst *) - EApply H; XEAuto. -(* case 3.2: subst0_snd *) - EApply H0; [ Idtac | Idtac | XEAuto ]; [ Idtac | SRwBack ]; XAuto. -(* case 3.3: subst0_both *) - EApply H; XEAuto. - Qed. - - End subst0_gen_lift_false. - - Section subst0_gen_lift_ge. (*********************************************) - - Tactic Definition IH := - Match Context With - [ H1: (x:?; i,h,d:?) (subst0 i ?1 (lift h d ?2) x) -> ?; - H2: (subst0 ?3 ?1 (lift ?4 ?5 ?2) ?6) |- ? ] -> - LApply (H1 ?6 ?3 ?4 ?5); [ Clear H1 H2; Intros H1 | XAuto ]; - LApply H1; [ Clear H1; Intros H1 | SRwBack; XAuto ]; - XElim H1; Intros. - - Theorem subst0_gen_lift_ge : (u,t1,x:?; i,h,d:?) (subst0 i u (lift h d t1) x) -> - (le (plus d h) i) -> - (EX t2 | x = (lift h d t2) & (subst0 (minus i h) u t1 t2)). - XElim t1; Intros. -(* case 1: TSort *) - Rewrite lift_sort in H; Subst0GenBase. -(* case 2: TLRef n *) - Apply (lt_le_e n d); Intros. -(* case 2.1: n < d *) - Rewrite lift_lref_lt in H; [ Idtac | XAuto ]. - Subst0GenBase; Rewrite H in H1. - EApply le_false; [ Apply H0 | XAuto ]. -(* case 2.2: n >= d *) - Rewrite lift_lref_ge in H; [ Idtac | XAuto ]. - Subst0GenBase; Rewrite <- H; Rewrite H2. - Rewrite minus_plus_r. - EApply ex2_intro; [ Idtac | XAuto ]. - Rewrite lift_free; [ Idtac | XEAuto (**) | XAuto ]. - Rewrite plus_sym; Rewrite plus_n_Sm; XAuto. -(* case 3: TTail k *) - Rewrite lift_tail in H1; Subst0GenBase; Rewrite H1; Clear H1 x; - Repeat IH; Try Rewrite H; Try Rewrite H0; - Rewrite <- lift_tail; Try Rewrite <- s_minus in H1; XEAuto. - Qed. - - End subst0_gen_lift_ge. - - Tactic Definition Subst0Gen := - Match Context With - | [ H: (subst0 ?0 (lift ?1 ?2 ?3) (lift ?1 (S (plus ?0 ?2)) ?4) ?5) |- ? ] -> - LApply (subst0_gen_lift_lt ?3 ?4 ?5 ?0 ?1 ?2); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (subst0 ?0 ?1 (lift (1) ?0 ?2) ?3) |- ? ] -> - LApply (subst0_gen_lift_false ?2 ?1 ?3 (1) ?0 ?0); [ Intros H_x | XAuto ]; - LApply H_x; [ Clear H_x; Intros H_x | Rewrite plus_sym; XAuto ]; - LApply H_x; [ Clear H H_x; Intros H | XAuto ]; - Apply H - | [ _: (le ?1 ?2); _: (lt ?2 (plus ?1 ?3)); - _: (subst0 ?2 ?4 (lift ?3 ?1 ?5) ?6) |- ? ] -> - Apply (subst0_gen_lift_false ?5 ?4 ?6 ?3 ?1 ?2); XAuto - | [ _: (subst0 ?1 ?2 (lift (S ?1) (0) ?3) ?4) |- ? ] -> - Apply (subst0_gen_lift_false ?3 ?2 ?4 (S ?1) (0) ?1); XAuto - | [ H: (subst0 ?0 ?1 (lift ?2 ?3 ?4) ?5) |- ? ] -> - LApply (subst0_gen_lift_ge ?1 ?4 ?5 ?0 ?2 ?3); [ Clear H; Intros H | XAuto ]; - LApply H; [ Clear H; Intros H | Simpl; XAuto ]; - XElim H; Intros - | _ -> Subst0GenBase. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst0_lift.v b/helm/coq-contribs/LAMBDA-TYPES/subst0_lift.v deleted file mode 100644 index caabbe0b7..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst0_lift.v +++ /dev/null @@ -1,56 +0,0 @@ -(*#* #stop file *) - -Require lift_props. -Require subst0_defs. - - Section subst0_lift. (****************************************************) - - Theorem subst0_lift_lt: (t1,t2,u:?; i:?) (subst0 i u t1 t2) -> - (d:?) (lt i d) -> (h:?) - (subst0 i (lift h (minus d (S i)) u) (lift h d t1) (lift h d t2)). - Intros until 1; XElim H; Intros. -(* case 1: subst0_lref *) - Rewrite lift_lref_lt; [ Idtac | XAuto ]. - LetTac w := (minus d (S i0)). - Arith8 d '(S i0); Rewrite lift_d; XAuto. -(* case 2: subst0_fst *) - LiftTailRw; XAuto. -(* case 3: subst0_snd *) - SRwBackIn H0; LiftTailRw; Rewrite <- (minus_s_s k); XAuto. -(* case 4: subst0_both *) - SRwBackIn H2; LiftTailRw. - Apply subst0_both; [ Idtac | Rewrite <- (minus_s_s k) ]; XAuto. - Qed. - - Theorem subst0_lift_ge: (t1,t2,u:?; i,h:?) (subst0 i u t1 t2) -> - (d:?) (le d i) -> - (subst0 (plus i h) u (lift h d t1) (lift h d t2)). - Intros until 1; XElim H; Intros. -(* case 1: subst0_lref *) - Rewrite lift_lref_ge; [ Idtac | XAuto ]. - Rewrite lift_free; [ Idtac | Simpl; XAuto | XAuto ]. - Arith5'c h i0; XAuto. -(* case 2: subst0_fst *) - LiftTailRw; XAuto. -(* case 3: subst0_snd *) - SRwBackIn H0; LiftTailRw; XAuto. -(* case 4: subst0_snd *) - SRwBackIn H2; LiftTailRw; XAuto. - Qed. - - Theorem subst0_lift_ge_S: (t1,t2,u:?; i:?) (subst0 i u t1 t2) -> - (d:?) (le d i) -> - (subst0 (S i) u (lift (1) d t1) (lift (1) d t2)). - Intros; Arith7 i; Apply subst0_lift_ge; XAuto. - Qed. - - Theorem subst0_lift_ge_s: (t1,t2,u:?; i:?) (subst0 i u t1 t2) -> - (d:?) (le d i) -> (b:?) - (subst0 (s (Bind b) i) u (lift (1) d t1) (lift (1) d t2)). - Intros; Simpl; Apply subst0_lift_ge_S; XAuto. - Qed. - - End subst0_lift. - - Hints Resolve subst0_lift_lt subst0_lift_ge - subst0_lift_ge_S subst0_lift_ge_s : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst0_subst0.v b/helm/coq-contribs/LAMBDA-TYPES/subst0_subst0.v deleted file mode 100644 index 9f9b6da86..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst0_subst0.v +++ /dev/null @@ -1,68 +0,0 @@ -(*#* #stop file *) - -Require subst0_defs. -Require subst0_gen. -Require subst0_lift. - - Section subst0_subst0. (**************************************************) - - Tactic Definition IH := - Match Context With - | [ H1: (u1,u:?; i:?) (subst0 i u u1 ?1) -> ?; - H2: (subst0 ?2 ?3 ?4 ?1) |- ? ] -> - LApply (H1 ?4 ?3 ?2); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (u1,u:?; i:?) (subst0 i u ?1 u1) -> ?; - H2: (subst0 ?2 ?3 ?1 ?4) |- ? ] -> - LApply (H1 ?4 ?3 ?2); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros. - - Theorem subst0_subst0: (t1,t2,u2:?; j:?) (subst0 j u2 t1 t2) -> - (u1,u:?; i:?) (subst0 i u u1 u2) -> - (EX t | (subst0 j u1 t1 t) & (subst0 (S (plus i j)) u t t2)). - Intros until 1; XElim H; Intros. -(* case 1 : subst0_lref *) - Arith5 i0 i; XEAuto. -(* case 2 : subst0_fst *) - IH; XEAuto. -(* case 3 : subst0_snd *) - IH; SRwBackIn H2; XEAuto. -(* case 4 : subst0_both *) - Repeat IH; SRwBackIn H4; XEAuto. - Qed. - - Theorem subst0_subst0_back: (t1,t2,u2:?; j:?) (subst0 j u2 t1 t2) -> - (u1,u:?; i:?) (subst0 i u u2 u1) -> - (EX t | (subst0 j u1 t1 t) & (subst0 (S (plus i j)) u t2 t)). - Intros until 1; XElim H; Intros. -(* case 1 : subst0_lref *) - Arith5 i0 i; XEAuto. -(* case 2 : subst0_fst *) - IH; XEAuto. -(* case 3 : subst0_snd *) - IH; SRwBackIn H2; XEAuto. -(* case 4 : subst0_both *) - Repeat IH; SRwBackIn H4; XEAuto. - Qed. - - Theorem subst0_trans: (t2,t1,v:?; i:?) (subst0 i v t1 t2) -> - (t3:?) (subst0 i v t2 t3) -> - (subst0 i v t1 t3). - Intros until 1; XElim H; Intros; - Subst0Gen; Try Rewrite H1; Try Rewrite H3; XAuto. - Qed. - - End subst0_subst0. - - Hints Resolve subst0_trans : ltlc. - - Tactic Definition Subst0Subst0 := - Match Context With - | [ H1: (subst0 ?0 ?1 ?2 ?3); H2: (subst0 ?4 ?5 ?6 ?1) |- ? ] -> - LApply (subst0_subst0 ?2 ?3 ?1 ?0); [ Intros H_x | XAuto ]; - LApply (H_x ?6 ?5 ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros - | [ H1: (subst0 ?0 ?1 ?2 ?3); H2: (subst0 ?4 ?5 ?1 ?6) |- ? ] -> - LApply (subst0_subst0_back ?2 ?3 ?1 ?0); [ Intros H_x | XAuto ]; - LApply (H_x ?6 ?5 ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst0_tlt.v b/helm/coq-contribs/LAMBDA-TYPES/subst0_tlt.v deleted file mode 100644 index b5fef207b..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst0_tlt.v +++ /dev/null @@ -1,62 +0,0 @@ -(*#* #stop file *) - -Require tlt_defs. -Require lift_tlt. -Require subst0_defs. - - Section subst0_tlt_props. (***********************************************) - - Theorem subst0_weight_le : (u,t,z:?; d:?) (subst0 d u t z) -> - (f,g:?) ((m:?) (le (f m) (g m))) -> - (lt (weight_map f (lift (S d) (0) u)) (g d)) -> - (le (weight_map f z) (weight_map g t)). - Intros until 1; XElim H. -(* case 1: subst0_lref *) - Intros; XAuto. -(* case 2: subst0_fst *) - XElim k; [ XElim b | Idtac ]; Simpl; [ Auto 7 with ltlc (**) | XAuto | XAuto | XAuto ]. -(* case 3: subst0_snd *) - XElim k; [ XElim b | Idtac ]; Simpl; [ Auto 7 with ltlc (**) | XAuto | XAuto | XAuto ]. -(* case 4: subst0_both *) - XElim k; [ XElim b | Idtac ]; Simpl; [ Auto 7 with ltlc (**) | XAuto | XAuto | XAuto ]. - Qed. - - Theorem subst0_weight_lt : (u,t,z:?; d:?) (subst0 d u t z) -> (f,g:?) - ((m:?) (le (f m) (g m))) -> - (lt (weight_map f (lift (S d) (0) u)) (g d)) -> - (lt (weight_map f z) (weight_map g t)). - Intros until 1; XElim H. -(* case 1: subst0_lref *) - Intros; XAuto. -(* case 2: subst0_fst *) - XElim k; [ XElim b | Idtac ]; Simpl; Intros; - Apply lt_n_S; (Apply lt_le_plus_plus; [ XAuto | Idtac ]); (**) - [ Auto 6 with ltlc (**) | XAuto | XAuto | XAuto ]. -(* case 3: subst0_snd *) - XElim k; [ XElim b | Idtac ]; Simpl; - [ Auto 8 with ltlc | Auto 6 with ltlc | Auto 6 with ltlc | XAuto ]. (**) -(* case 3: subst0_both *) - XElim k; [ XElim b | Idtac ]; Simpl; - Intros; Apply lt_n_S; [ Apply lt_le_plus_plus | Apply lt_plus_plus | Apply lt_plus_plus | Apply lt_plus_plus ]; XAuto. - EApply subst0_weight_le; [ XEAuto | XAuto | XAuto ]. - Qed. - - Theorem subst0_tlt_tail: (u,t,z:?) (subst0 (0) u t z) -> - (tlt (TTail (Bind Abbr) u z) - (TTail (Bind Abbr) u t) - ). - Unfold tlt weight; Intros; Simpl. - Apply lt_n_S; Apply le_lt_plus_plus; [ XAuto | Idtac ]. - EApply subst0_weight_lt; [ XEAuto | XAuto | XAuto ]. - Qed. - - Theorem subst0_tlt: (u,t,z:?) (subst0 (0) u t z) -> - (tlt z (TTail (Bind Abbr) u t)). - Intros. - EApply tlt_trans; [ Idtac | Apply subst0_tlt_tail; XEAuto]. - XAuto. - Qed. - - End subst0_tlt_props. - - Hints Resolve subst0_tlt : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst1_confluence.v b/helm/coq-contribs/LAMBDA-TYPES/subst1_confluence.v deleted file mode 100644 index 0c473e9ef..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst1_confluence.v +++ /dev/null @@ -1,82 +0,0 @@ -(*#* #stop file *) - -Require lift_gen. -Require subst0_gen. -Require subst0_confluence. -Require subst1_defs. -Require subst1_gen. - - Section subst1_confluence. (**********************************************) - - Theorem subst1_confluence_neq: (t0,t1,u1:?; i1:?) (subst1 i1 u1 t0 t1) -> - (t2,u2:?; i2:?) (subst1 i2 u2 t0 t2) -> - ~i1=i2 -> - (EX t | (subst1 i2 u2 t1 t) & - (subst1 i1 u1 t2 t) - ). - Intros until 1; XElim H; Clear t1; Intros. -(* case 1; subst1_refl *) - XEAuto. -(* case 2; subst1_single *) - XElim H0; Intros; Try Subst0Confluence; XEAuto. - Qed. - - Theorem subst1_confluence_eq : (t0,t1,u:?; i:?) (subst1 i u t0 t1) -> - (t2:?) (subst1 i u t0 t2) -> - (EX t | (subst1 i u t1 t) & - (subst1 i u t2 t) - ). - Intros until 1; XElim H; Intros. -(* case 1; subst1_refl *) - XEAuto. -(* case 2; subst1_single *) - XElim H0; Intros; - Try Subst0Confluence; Try Rewrite H0; XEAuto. - Qed. - - Theorem subst1_confluence_lift: (t0,t1,u:?; i:?) (subst1 i u t0 (lift (1) i t1)) -> - (t2:?) (subst1 i u t0 (lift (1) i t2)) -> - t1 = t2. - Intros until 1; InsertEq H '(lift (1) i t1); XElim H; Clear y; Intros. -(* case 1: subst1_refl *) - Rewrite H in H0; Clear H t0. - Subst1Gen; SymEqual; LiftGen; XEAuto. -(* case 2: subst1_single *) - Rewrite H0 in H; Clear H0 t2. - InsertEq H1 '(lift (1) i t3); XElim H0; Clear y; Intros. -(* case 2.1: subst1_refl *) - Rewrite H0 in H; Clear H0 t0; Subst0Gen. -(* case 2.2: subst1_single *) - Rewrite H1 in H0; Clear H1 t2; Subst0ConfluenceLift; XAuto. - Qed. - - End subst1_confluence. - - Tactic Definition Subst1Confluence := - Match Context With - | [ H0: (subst1 ?1 ?2 ?3 (lift (1) ?1 ?4)); - H1: (subst1 ?1 ?2 ?3 (lift (1) ?1 ?5)) |- ? ] -> - LApply (subst1_confluence_lift ?3 ?4 ?2 ?1); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?5); [ Clear H0; Intros | XAuto ] - | [ H0: (subst1 ?1 ?2 ?3 ?4); - H1: (subst1 ?1 ?2 ?3 ?5) |- ? ] -> - LApply (subst1_confluence_eq ?3 ?4 ?2 ?1); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?5); [ Clear H0; Intros H0 | XAuto ]; - XElim H0; Intros - | [ H0: (subst0 ?1 ?2 ?3 ?4); - H1: (subst1 ?1 ?2 ?3 ?5) |- ? ] -> - LApply (subst1_confluence_eq ?3 ?4 ?2 ?1); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?5); [ Clear H0; Intros H0 | XAuto ]; - XElim H0; Intros - | [ H0: (subst1 ?1 ?2 ?3 ?4); - H1: (subst1 ?5 ?6 ?3 ?7) |- ? ] -> - LApply (subst1_confluence_neq ?3 ?4 ?2 ?1); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?7 ?6 ?5); [ Clear H0 H1; Intros H0 | XAuto ]; - LApply H0; [ Clear H0; Intros H0 | XAuto ]; - XElim H0; Intros - | [ H0: (subst0 ?1 ?2 ?3 ?4); - H1: (subst1 ?5 ?6 ?3 ?7) |- ? ] -> - LApply (subst1_confluence_neq ?3 ?4 ?2 ?1); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?7 ?6 ?5); [ Clear H0 H1; Intros H0 | XAuto ]; - LApply H0; [ Clear H0; Intros H0 | XAuto ]; - XElim H0; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst1_defs.v b/helm/coq-contribs/LAMBDA-TYPES/subst1_defs.v deleted file mode 100644 index 93e0d2ecf..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst1_defs.v +++ /dev/null @@ -1,58 +0,0 @@ -(*#* #stop file *) - -Require Export subst0_defs. - - Inductive subst1 [i:nat; v:T; t1:T] : T -> Prop := - | subst1_refl : (subst1 i v t1 t1) - | subst1_single : (t2:?) (subst0 i v t1 t2) -> (subst1 i v t1 t2). - - Hint subst1 : ltlc := Constructors subst1. - - Section subst1_props. (***************************************************) - - Theorem subst1_tail: (v,u1,u2:?; i:?) (subst1 i v u1 u2) -> - (k:?; t1,t2:?) (subst1 (s k i) v t1 t2) -> - (subst1 i v (TTail k u1 t1) (TTail k u2 t2)). - Intros until 1; XElim H; Clear u2. -(* case 1: csubst1_refl *) - Intros until 1; XElim H; Clear t2; XAuto. -(* case 2: csubst1_single *) - Intros until 2; XElim H0; Clear t3; XAuto. - Qed. - - End subst1_props. - - Hints Resolve subst1_tail : ltlc. - - Section subst1_gen_base. (************************************************) - - Theorem subst1_gen_sort : (v,x:?; i,n:?) (subst1 i v (TSort n) x) -> - x = (TSort n). - Intros; XElim H; Clear x; Intros; - Try Subst0GenBase; XAuto. - Qed. - - Theorem subst1_gen_lref : (v,x:?; i,n:?) (subst1 i v (TLRef n) x) -> - x = (TLRef n) \/ - n = i /\ x = (lift (S n) (0) v). - Intros; XElim H; Clear x; Intros; - Try Subst0GenBase; XAuto. - Qed. - - Theorem subst1_gen_tail : (k:?; v,u1,t1,x:?; i:?) - (subst1 i v (TTail k u1 t1) x) -> - (EX u2 t2 | x = (TTail k u2 t2) & - (subst1 i v u1 u2) & - (subst1 (s k i) v t1 t2) - ). - Intros; XElim H; Clear x; Intros; - Try Subst0GenBase; XEAuto. - Qed. - - End subst1_gen_base. - - Tactic Definition Subst1GenBase := - Match Context With - | [ H: (subst1 ?1 ?2 (TTail ?3 ?4 ?5) ?6) |- ? ] -> - LApply (subst1_gen_tail ?3 ?2 ?4 ?5 ?6 ?1); [ Clear H; Intros H | XAuto ]; - XElim H; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst1_gen.v b/helm/coq-contribs/LAMBDA-TYPES/subst1_gen.v deleted file mode 100644 index 0b2d4a170..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst1_gen.v +++ /dev/null @@ -1,44 +0,0 @@ -(*#* #stop file *) - -Require subst0_gen. -Require subst1_defs. - - Section subst1_gen_lift. (************************************************) - - Theorem subst1_gen_lift_lt : (u,t1,x:?; i,h,d:?) (subst1 i (lift h d u) (lift h (S (plus i d)) t1) x) -> - (EX t2 | x = (lift h (S (plus i d)) t2) & (subst1 i u t1 t2)). - Intros; XElim H; Clear x; Intros; - Try Subst0Gen; XEAuto. - Qed. - - Theorem subst1_gen_lift_eq : (t,u,x:?; h,d,i:?) - (le d i) -> (lt i (plus d h)) -> - (subst1 i u (lift h d t) x) -> - x = (lift h d t). - Intros; XElim H1; Clear x; Intros; - Try Subst0Gen; XAuto. - Qed. - - Theorem subst1_gen_lift_ge : (u,t1,x:?; i,h,d:?) (subst1 i u (lift h d t1) x) -> - (le (plus d h) i) -> - (EX t2 | x = (lift h d t2) & (subst1 (minus i h) u t1 t2)). - Intros; XElim H; Clear x; Intros; - Try Subst0Gen; XEAuto. - Qed. - - End subst1_gen_lift. - - Tactic Definition Subst1Gen := - Match Context With - | [ H: (subst1 ?0 (lift ?1 ?2 ?3) (lift ?1 (S (plus ?0 ?2)) ?4) ?5) |- ? ] -> - LApply (subst1_gen_lift_lt ?3 ?4 ?5 ?0 ?1 ?2); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (subst1 ?0 ?1 (lift (1) ?0 ?2) ?3) |- ? ] -> - LApply (subst1_gen_lift_eq ?2 ?1 ?3 (1) ?0 ?0); [ Intros H_x | XAuto ]; - LApply H_x; [ Clear H_x; Intros H_x | Rewrite plus_sym; XAuto ]; - LApply H_x; [ Clear H H_x; Intros | XAuto ] - | [ H0: (subst1 ?0 ?1 (lift (1) ?4 ?2) ?3); H1: (lt ?4 ?0) |- ? ] -> - LApply (subst1_gen_lift_ge ?1 ?2 ?3 ?0 (1) ?4); [ Clear H0; Intros H0 | XAuto ]; - LApply H0; [ Clear H0; Intros H0 | Rewrite plus_sym; XAuto ]; - XElim H0; Intros - | _ -> Subst1GenBase. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst1_lift.v b/helm/coq-contribs/LAMBDA-TYPES/subst1_lift.v deleted file mode 100644 index 396757179..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst1_lift.v +++ /dev/null @@ -1,23 +0,0 @@ -(*#* #stop file *) - -Require lift_props. -Require subst0_lift. -Require subst1_defs. - - Section subst1_lift. (****************************************************) - - Theorem subst1_lift_lt : (t1,t2,u:?; i:?) (subst1 i u t1 t2) -> - (d:?) (lt i d) -> (h:?) - (subst1 i (lift h (minus d (S i)) u) (lift h d t1) (lift h d t2)). - Intros until 1; XElim H; Clear t2; XAuto. - Qed. - - Theorem subst1_lift_ge : (t1,t2,u:?; i,h:?) (subst1 i u t1 t2) -> - (d:?) (le d i) -> - (subst1 (plus i h) u (lift h d t1) (lift h d t2)). - Intros until 1; XElim H; Clear t2; XAuto. - Qed. - - End subst1_lift. - - Hints Resolve subst1_lift_lt subst1_lift_ge : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst1_subst1.v b/helm/coq-contribs/LAMBDA-TYPES/subst1_subst1.v deleted file mode 100644 index 0f437ed9a..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst1_subst1.v +++ /dev/null @@ -1,60 +0,0 @@ -(*#* #stop file *) - -Require subst0_subst0. -Require subst1_defs. - - Section subst1_subst1. (**************************************************) - - Theorem subst1_subst1: (t1,t2,u2:?; j:?) (subst1 j u2 t1 t2) -> - (u1,u:?; i:?) (subst1 i u u1 u2) -> - (EX t | (subst1 j u1 t1 t) & (subst1 (S (plus i j)) u t t2)). - Intros until 1; XElim H; Clear t2. -(* case 1: subst1_refl on first premise *) - XEAuto. -(* case 2: subst1_single on first premise *) - Intros until 2; InsertEq H0 u2; XElim H0; Clear y; Intros. -(* case 2.1: subst1_refl on second premise *) - Rewrite H0; Clear H0 u1; XEAuto. -(* case 2.2: subst1_single on second premise *) - Rewrite H1 in H0; Clear H1 t0; Subst0Subst0; XEAuto. - Qed. - - Theorem subst1_subst1_back: (t1,t2,u2:?; j:?) (subst1 j u2 t1 t2) -> - (u1,u:?; i:?) (subst1 i u u2 u1) -> - (EX t | (subst1 j u1 t1 t) & (subst1 (S (plus i j)) u t2 t)). - Intros until 1; XElim H; Clear t2. -(* case 1: subst1_refl on first premise *) - XEAuto. -(* case 2: subst1_single on first premise *) - Intros until 2; XElim H0; Clear u1; Intros; - Try Subst0Subst0; XEAuto. - Qed. - - Theorem subst1_trans: (t2,t1,v:?; i:?) (subst1 i v t1 t2) -> - (t3:?) (subst1 i v t2 t3) -> - (subst1 i v t1 t3). - Intros until 1; XElim H; Clear t2. -(* case 1: subst1_refl on first premise *) - XEAuto. -(* case 2: subst1_single on first premise *) - Intros until 2; XElim H0; Clear t3; XEAuto. - Qed. - - End subst1_subst1. - - Hints Resolve subst1_trans : ltlc. - - Tactic Definition Subst1Subst1 := - Match Context With - | [ H1: (subst1 ?0 ?1 ?2 ?3); H2: (subst1 ?4 ?5 ?6 ?1) |- ? ] -> - LApply (subst1_subst1 ?2 ?3 ?1 ?0); [ Intros H_x | XAuto ]; - LApply (H_x ?6 ?5 ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros - | [ H1: (subst1 ?0 ?1 ?2 ?3); H2: (subst0 ?4 ?5 ?6 ?1) |- ? ] -> - LApply (subst1_subst1 ?2 ?3 ?1 ?0); [ Intros H_x | XAuto ]; - LApply (H_x ?6 ?5 ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros - | [ H1: (subst1 ?0 ?1 ?2 ?3); H2: (subst1 ?4 ?5 ?1 ?6) |- ? ] -> - LApply (subst1_subst1_back ?2 ?3 ?1 ?0); [ Intros H_x | XAuto ]; - LApply (H_x ?6 ?5 ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/terms_defs.v b/helm/coq-contribs/LAMBDA-TYPES/terms_defs.v deleted file mode 100644 index c84b1c2c7..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/terms_defs.v +++ /dev/null @@ -1,85 +0,0 @@ -(*#* #stop file *) - -Require Export Base. - - Inductive Set B := Abbr: B - | Abst: B - | Void: B. - - Inductive Set F := Appl: F - | Cast: F. - - Inductive Set K := Bind: B -> K - | Flat: F -> K. - - Inductive Set T := TSort: nat -> T - | TLRef: nat -> T - | TTail: K -> T -> T -> T. - - Hint f3KTT : ltlc := Resolve (f_equal3 K T T). - - Tactic Definition TGenBase := - Match Context With - | [ H: (TSort ?) = (TSort ?) |- ? ] -> Inversion H; Clear H - | [ H: (TLRef ?) = (TLRef ?) |- ? ] -> Inversion H; Clear H - | [ H: (TTail ? ? ?) = (TTail ? ? ?) |- ? ] -> Inversion H; Clear H - | _ -> Idtac. - - Definition s: K -> nat -> nat := [k;i] Cases k of - | (Bind _) => (S i) - | (Flat _) => i - end. - - Section s_props. (********************************************************) - - Theorem s_S: (k:?; i:?) (s k (S i)) = (S (s k i)). - XElim k; XAuto. - Qed. - - Theorem s_plus: (k:?; i,j:?) (s k (plus i j)) = (plus (s k i) j). - XElim k; XAuto. - Qed. - - Theorem s_plus_sym: (k:?; i,j:?) (s k (plus i j)) = (plus i (s k j)). - XElim k; [ Intros; Simpl; Rewrite plus_n_Sm | Idtac ]; XAuto. - Qed. - - Theorem s_minus: (k:?; i,j:?) (le j i) -> - (s k (minus i j)) = (minus (s k i) j). - XElim k; [ Intros; Unfold s; Cbv Iota | XAuto ]. - Rewrite minus_Sn_m; XAuto. - Qed. - - Theorem minus_s_s: (k:?; i,j:?) (minus (s k i) (s k j)) = (minus i j). - XElim k; XAuto. - Qed. - - Theorem s_le: (k:?; i,j:?) (le i j) -> (le (s k i) (s k j)). - XElim k; Simpl; XAuto. - Qed. - - Theorem s_lt: (k:?; i,j:?) (lt i j) -> (lt (s k i) (s k j)). - XElim k; Simpl; XAuto. - Qed. - - Theorem s_inj: (k:?; i,j:?) (s k i) = (s k j) -> i = j. - XElim k; XEAuto. - Qed. - - End s_props. - - Hints Resolve s_le s_lt s_inj : ltlc. - - Tactic Definition SRw := - Repeat (Rewrite s_S Orelse Rewrite s_plus_sym). - - Tactic Definition SRwIn H := - Repeat (Rewrite s_S in H Orelse Rewrite s_plus in H). - - Tactic Definition SRwBack := - Repeat (Rewrite <- s_S Orelse Rewrite <- s_plus Orelse Rewrite <- s_plus_sym). - - Tactic Definition SRwBackIn H := - Repeat (Rewrite <- s_S in H Orelse Rewrite <- s_plus in H Orelse Rewrite <- s_plus_sym in H). - - Hint discr : ltlc := Extern 4 (le ? (plus (s ? ?) ?)) SRwBack. diff --git a/helm/coq-contribs/LAMBDA-TYPES/tlt_defs.v b/helm/coq-contribs/LAMBDA-TYPES/tlt_defs.v deleted file mode 100644 index eb3f6fb27..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/tlt_defs.v +++ /dev/null @@ -1,115 +0,0 @@ -(*#* #stop file *) - -Require Export terms_defs. - - Definition wadd : (nat -> nat) -> nat -> (nat -> nat) := - [f;w;n] Cases n of (0) => w | (S m) => (f m) end. - - Fixpoint weight_map [f:nat->nat; t:T] : nat := Cases t of - | (TSort n) => (0) - | (TLRef n) => (f n) - | (TTail (Bind Abbr) u t) => - (S (plus (weight_map f u) (weight_map (wadd f (S (weight_map f u))) t))) - | (TTail (Bind _) u t) => - (S (plus (weight_map f u) (weight_map (wadd f (0)) t))) - | (TTail _ u t) => (S (plus (weight_map f u) (weight_map f t))) - end. - - Definition weight : T -> nat := (weight_map [_](0)). - - Definition tlt : T -> T -> Prop := [t1,t2](lt (weight t1) (weight t2)). - - Section wadd_props. (*****************************************************) - - Theorem wadd_le: (f,g:?) ((n:?) (le (f n) (g n))) -> (v,w:?) (le v w) -> - (n:?) (le (wadd f v n) (wadd g w n)). - XElim n; Simpl; XAuto. - Qed. - - Theorem wadd_lt: (f,g:?) ((n:?) (le (f n) (g n))) -> (v,w:?) (lt v w) -> - (n:?) (le (wadd f v n) (wadd g w n)). - XElim n; Simpl; XAuto. - Qed. - - Theorem wadd_O: (n:?) (wadd [_](0) (0) n) = (0). - XElim n; XAuto. - Qed. - - End wadd_props. - - Hints Resolve wadd_le wadd_lt wadd_O : ltlc. - - Section weight_props. (***************************************************) - - Theorem weight_le : (t:?; f,g:?) ((n:?) (le (f n) (g n))) -> - (le (weight_map f t) (weight_map g t)). - XElim t; [ XAuto | Simpl; XAuto | Idtac ]. - XElim k; Simpl; [ Idtac | XAuto ]. - XElim b; Auto 7 with ltlc. (**) - Qed. - - Theorem weight_eq : (t:?; f,g:?) ((n:?) (f n) = (g n)) -> - (weight_map f t) = (weight_map g t). - Intros; Apply le_antisym; Apply weight_le; - Intros; Rewrite (H n); XAuto. - Qed. - - Hints Resolve weight_le weight_eq : ltlc. - - Theorem weight_add_O : (t:?) (weight_map (wadd [_](0) (0)) t) = (weight_map [_](0) t). - XAuto. - Qed. - - Theorem weight_add_S : (t:?; m:?) (le (weight_map (wadd [_](0) (0)) t) (weight_map (wadd [_](0) (S m)) t)). - XAuto. - Qed. - - End weight_props. - - Hints Resolve weight_le weight_add_S : ltlc. - - Section tlt_props. (******************************************************) - - Theorem tlt_trans: (v,u,t:?) (tlt u v) -> (tlt v t) -> (tlt u t). - Unfold tlt; XEAuto. - Qed. - - Theorem tlt_tail_sx: (k:?; u,t:?) (tlt u (TTail k u t)). - Unfold tlt weight. - XElim k; Simpl; [ XElim b | Idtac ]; XAuto. - Qed. - - Theorem tlt_tail_dx: (k:?; u,t:?) (tlt t (TTail k u t)). - Unfold tlt weight. - XElim k; Simpl; [ Idtac | XAuto ]. - XElim b; Intros; Try Rewrite weight_add_O; [ Idtac | XAuto | XAuto ]. - EApply lt_le_trans; [ Apply lt_n_Sn | Apply le_n_S ]. - EApply le_trans; [ Rewrite <- (weight_add_O t); Apply weight_add_S | XAuto ]. - Qed. - - End tlt_props. - - Hints Resolve tlt_tail_sx tlt_tail_dx tlt_trans : ltlc. - - Section tlt_wf. (*********************************************************) - - Local Q: (T -> Prop) -> nat -> Prop := - [P;n] (t:?) (weight t) = n -> (P t). - - Remark q_ind: (P:T->Prop)((n:?) (Q P n)) -> (t:?) (P t). - Unfold Q; Intros. - Apply (H (weight t) t); XAuto. - Qed. - - Theorem tlt_wf_ind: (P:T->Prop) - ((t:?)((v:?)(tlt v t) -> (P v)) -> (P t)) -> - (t:?)(P t). - Unfold tlt; Intros. - XElimUsing q_ind t; Intros. - Apply lt_wf_ind; Clear n; Intros. - Unfold Q in H0; Unfold Q; Intros. - Rewrite <- H1 in H0; Clear H1. - Apply H; XEAuto. - Qed. - - End tlt_wf. diff --git a/helm/coq-contribs/LAMBDA-TYPES/ty0_defs.v b/helm/coq-contribs/LAMBDA-TYPES/ty0_defs.v deleted file mode 100644 index 073a3282a..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/ty0_defs.v +++ /dev/null @@ -1,125 +0,0 @@ -Require Export pc3_defs. - -(*#* #stop record *) - - Record G : Set := { - next : nat -> nat; - base : nat; - next_lt : (n:?) (lt n (next n)); - base_next: (n:?) (le base n) -> (next n) = (S n) - }. - -(*#* #start record *) - -(*#* #caption "current axioms for typing", - "well formed context sort", "well formed context binder", - "conversion rule", "typed sort", "typed reference to abbreviation", - "typed reference to abstraction", "typed binder", "typed application", - "typed cast" -*) -(*#* #cap #cap c, d, t, t0, t1, t2, w #alpha m in h, n in i, u in V, v in U *) - - Inductive wf0 [g:G] : C -> Prop := - | wf0_sort: (m:?) (wf0 g (CSort m)) - | wf0_bind: (c:?; u,t:?) (ty0 g c u t) -> - (b:?) (wf0 g (CTail c (Bind b) u)) - with ty0 [g:G] : C -> T -> T -> Prop := -(* structural rules *) - | ty0_conv: (c:?; t2,t:?) (ty0 g c t2 t) -> - (u,t1:?) (ty0 g c u t1) -> (pc3 c t1 t2) -> - (ty0 g c u t2) -(* axiom rules *) - | ty0_sort: (c:?) (wf0 g c) -> - (m:?) (ty0 g c (TSort m) (TSort (next g m))) - | ty0_abbr: (c:?) (wf0 g c) -> - (n:?; d:?; u:?) (drop n (0) c (CTail d (Bind Abbr) u)) -> - (t:?) (ty0 g d u t) -> - (ty0 g c (TLRef n) (lift (S n) (0) t)) - | ty0_abst: (c:?) (wf0 g c) -> - (n:?; d:?; u:?) (drop n (0) c (CTail d (Bind Abst) u)) -> - (t:?) (ty0 g d u t) -> - (ty0 g c (TLRef n) (lift (S n) (0) u)) - | ty0_bind: (c:?; u,t:?) (ty0 g c u t) -> - (b:?; t1,t2:?) (ty0 g (CTail c (Bind b) u) t1 t2) -> - (t0:?) (ty0 g (CTail c (Bind b) u) t2 t0) -> - (ty0 g c (TTail (Bind b) u t1) (TTail (Bind b) u t2)) - | ty0_appl: (c:?; w,u:?) (ty0 g c w u) -> - (v,t:?) (ty0 g c v (TTail (Bind Abst) u t)) -> - (ty0 g c (TTail (Flat Appl) w v) - (TTail (Flat Appl) w (TTail (Bind Abst) u t)) - ) - | ty0_cast: (c:?; t1,t2:?) (ty0 g c t1 t2) -> - (t0:?) (ty0 g c t2 t0) -> - (ty0 g c (TTail (Flat Cast) t2 t1) t2). - -(*#* #stop file *) - - Hint wf0 : ltlc := Constructors wf0. - - Hint ty0 : ltlc := Constructors ty0. - - Section wf0_props. (******************************************************) - - Theorem wf0_ty0: (g:?; c:?; u,t:?) (ty0 g c u t) -> (wf0 g c). - Intros; XElim H; XAuto. - Qed. - - Hints Resolve wf0_ty0 : ltlc. - - Theorem wf0_drop_O: (c,e:?; h:?) (drop h (0) c e) -> - (g:?) (wf0 g c) -> (wf0 g e). - XElim c. -(* case 1 : CSort *) - Intros; DropGenBase; Rewrite H; XAuto. -(* case 2 : CTail k *) - Intros c IHc; XElim k; ( - XElim h; Intros; DropGenBase; - [ Rewrite H in H0; XAuto | Inversion H1; XEAuto ] ). - Qed. - - End wf0_props. - - Hints Resolve wf0_ty0 wf0_drop_O : ltlc. - - Tactic Definition Wf0Ty0 := - Match Context With - [ _: (ty0 ?1 ?2 ?3 ?4) |- ? ] -> - LApply (wf0_ty0 ?1 ?2 ?3 ?4); [ Intros H_x | XAuto ]; - Inversion_clear H_x. - - Tactic Definition Wf0DropO := - Match Context With - | [ _: (drop ?1 (0) ?2 ?3); _: (wf0 ?4 ?2) |- ? ] -> - LApply (wf0_drop_O ?2 ?3 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?4); [ Clear H_x; Intros | XAuto ]. - - Section wf0_facilities. (*************************************************) - - Theorem wf0_drop_wf0: (g:?; c:?) (wf0 g c) -> - (b:?; e:?; u:?; h:?) - (drop h (0) c (CTail e (Bind b) u)) -> (wf0 g e). - Intros. - Wf0DropO; Inversion H1; XEAuto. - Qed. - - Theorem ty0_drop_wf0: (g:?; c:?; t1,t2:?) (ty0 g c t1 t2) -> - (b:?; e:?; u:?; h:?) - (drop h (0) c (CTail e (Bind b) u)) -> (wf0 g e). - Intros. - EApply wf0_drop_wf0; [ Idtac | EApply H0 ]; XEAuto. - Qed. - - End wf0_facilities. - - Hints Resolve wf0_drop_wf0 ty0_drop_wf0 : ltlc. - - Tactic Definition DropWf0 := - Match Context With - | [ _: (ty0 ?1 ?2 ?3 ?4); - _: (drop ?5 (0) ?2 (CTail ?6 (Bind ?7) ?8)) |- ? ] -> - LApply (ty0_drop_wf0 ?1 ?2 ?3 ?4); [ Intros H_x | XAuto ]; - LApply (H_x ?7 ?6 ?8 ?5); [ Clear H_x; Intros | XAuto ] - | [ _: (wf0 ?1 ?2); - _: (drop ?5 (0) ?2 (CTail ?6 (Bind ?7) ?8)) |- ? ] -> - LApply (wf0_drop_wf0 ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?7 ?6 ?8 ?5); [ Clear H_x; Intros | XAuto ]. diff --git a/helm/coq-contribs/LAMBDA-TYPES/ty0_gen.v b/helm/coq-contribs/LAMBDA-TYPES/ty0_gen.v deleted file mode 100644 index 29e3d6470..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/ty0_gen.v +++ /dev/null @@ -1,185 +0,0 @@ -Require pc3_props. -Require ty0_defs. - -(*#* #caption "generation lemma of typing" #clauses *) - - Section ty0_gen_base. (***************************************************) - -(*#* #caption "generation lemma for sorts" *) -(*#* #cap #cap c #alpha x in T, n in h *) - - Theorem ty0_gen_sort: (g:?; c:?; x:?; n:?) - (ty0 g c (TSort n) x) -> - (pc3 c (TSort (next g n)) x). - -(*#* #stop proof *) - - Intros until 1; InsertEq H '(TSort n); XElim H; Intros. -(* case 1 : ty0_conv *) - XEAuto. -(* case 2 : ty0_sort *) - Inversion H0; XAuto. -(* case 3 : ty0_abbr *) - Inversion H3. -(* case 4 : ty0_abst *) - Inversion H3. -(* case 5 : ty0_bind *) - Inversion H5. -(* case 6 : ty0_appl *) - Inversion H3. -(* case 7 : ty0_cast *) - Inversion H3. - Qed. - -(*#* #start proof *) - -(*#* #caption "generation lemma for bound references" *) -(*#* #cap #cap c, e #alpha x in T, t in U, u in V, n in i *) - - Theorem ty0_gen_lref: (g:?; c:?; x:?; n:?) (ty0 g c (TLRef n) x) -> - (EX e u t | (pc3 c (lift (S n) (0) t) x) & - (drop n (0) c (CTail e (Bind Abbr) u)) & - (ty0 g e u t) - ) \/ - (EX e u t | (pc3 c (lift (S n) (0) u) x) & - (drop n (0) c (CTail e (Bind Abst) u)) & - (ty0 g e u t) - ). - -(*#* #stop proof *) - - Intros until 1; InsertEq H '(TLRef n); XElim H; Intros. -(* case 1 : ty0_conv *) - LApply H2; [ Clear H2; Intros H2 | XAuto ]. - XElim H2; Intros; XElim H2; XEAuto. -(* case 2 : ty0_sort *) - Inversion H0. -(* case 3 : ty0_abbr *) - Inversion H3 ; Rewrite H5 in H0; XEAuto. -(* case 4 : ty0_abst *) - Inversion H3; Rewrite H5 in H0; XEAuto. -(* case 5 : ty0_bind *) - Inversion H5. -(* case 6 : ty0_appl *) - Inversion H3. -(* case 7 : ty0_cast *) - Inversion H3. - Qed. - -(*#* #start proof *) - -(*#* #caption "generation lemma for binders" *) -(*#* #cap #cap c #alpha x in T, t1 in U1, t2 in U2, u in V, t in U, t0 in U3 *) - - Theorem ty0_gen_bind: (g:?; b:?; c:?; u,t1,x:?) (ty0 g c (TTail (Bind b) u t1) x) -> - (EX t2 t t0 | (pc3 c (TTail (Bind b) u t2) x) & - (ty0 g c u t) & - (ty0 g (CTail c (Bind b) u) t1 t2) & - (ty0 g (CTail c (Bind b) u) t2 t0) - ). - -(*#* #stop proof *) - - Intros until 1; InsertEq H '(TTail (Bind b) u t1); XElim H; Intros. -(* case 1 : ty0_conv *) - LApply H2; [ Clear H2; Intros H2 | XAuto ]. - XElim H2; XEAuto. -(* case 2 : ty0_sort *) - Inversion H0. -(* case 3 : ty0_abbr *) - Inversion H3. -(* case 4 : ty0_abst *) - Inversion H3. -(* case 5 : ty0_bind *) - Inversion H5. - Rewrite H7 in H1; Rewrite H7 in H3. - Rewrite H8 in H; Rewrite H8 in H1; Rewrite H8 in H3. - Rewrite H9 in H1; XEAuto. -(* case 6 : ty0_appl *) - Inversion H3. -(* case 7 : ty0_cast *) - Inversion H3. - Qed. - -(*#* #start proof *) - -(*#* #caption "generation lemma for applications" *) -(*#* #cap #cap c #alpha x in T, v in U1, w in V1, u in V2, t in U2 *) - - Theorem ty0_gen_appl: (g:?; c:?; w,v,x:?) (ty0 g c (TTail (Flat Appl) w v) x) -> - (EX u t | (pc3 c (TTail (Flat Appl) w (TTail (Bind Abst) u t)) x) & - (ty0 g c v (TTail (Bind Abst) u t)) & - (ty0 g c w u) - ). - -(*#* #stop proof *) - - Intros until 1; InsertEq H '(TTail (Flat Appl) w v); XElim H; Intros. -(* case 1 : ty0_conv *) - LApply H2; [ Clear H2; Intros H2 | XAuto ]. - XElim H2; XEAuto. -(* case 2 : ty0_sort *) - Inversion H0. -(* case 3 : ty0_abbr *) - Inversion H3. -(* case 4 : ty0_abst *) - Inversion H3. -(* case 5 : ty0_bind *) - Inversion H5. -(* case 6 : ty0_appl *) - Inversion H3; Rewrite H5 in H; Rewrite H6 in H1; XEAuto. -(* case 7 : ty0_cast *) - Inversion H3. - Qed. - -(*#* #start proof *) - -(*#* #caption "generation lemma for type casts" *) -(*#* #cap #cap c #alpha x in T, t2 in V, t1 in U *) - - Theorem ty0_gen_cast: (g:?; c:?; t1,t2,x:?) - (ty0 g c (TTail (Flat Cast) t2 t1) x) -> - (pc3 c t2 x) /\ (ty0 g c t1 t2). - -(*#* #stop proof *) - - Intros until 1; InsertEq H '(TTail (Flat Cast) t2 t1); XElim H; Intros. -(* case 1 : ty0_conv *) - LApply H2; [ Clear H2; Intros H2 | XAuto ]. - XElim H2; XEAuto. -(* case 2 : ty0_sort *) - Inversion H0. -(* case 3 : ty0_abbr *) - Inversion H3. -(* case 4 : ty0_abst *) - Inversion H3. -(* case 5 : ty0_bind *) - Inversion H5. -(* case 6 : ty0_appl *) - Inversion H3. -(* case 7 : ty0_cast *) - Inversion H3; Rewrite H5 in H; Rewrite H5 in H1; Rewrite H6 in H; XAuto. - Qed. - - End ty0_gen_base. - - Tactic Definition Ty0GenBase := - Match Context With - | [ H: (ty0 ?1 ?2 (TSort ?3) ?4) |- ? ] -> - LApply (ty0_gen_sort ?1 ?2 ?4 ?3); [ Clear H; Intros | XAuto ] - | [ H: (ty0 ?1 ?2 (TLRef ?3) ?4) |- ? ] -> - LApply (ty0_gen_lref ?1 ?2 ?4 ?3); [ Clear H; Intros H | XAuto ]; - XElim H; Intros H; XElim H; Intros - | [ H: (ty0 ?1 ?2 (TTail (Bind ?3) ?4 ?5) ?6) |- ? ] -> - LApply (ty0_gen_bind ?1 ?3 ?2 ?4 ?5 ?6); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (ty0 ?1 ?2 (TTail (Flat Appl) ?3 ?4) ?5) |- ? ] -> - LApply (ty0_gen_appl ?1 ?2 ?3 ?4 ?5); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (ty0 ?1 ?2 (TTail (Flat Cast) ?3 ?4) ?5) |- ? ] -> - LApply (ty0_gen_cast ?1 ?2 ?4 ?3 ?5); [ Clear H; Intros H | XAuto ]; - XElim H; Intros. - -(*#* #start file *) - -(*#* #single *) diff --git a/helm/coq-contribs/LAMBDA-TYPES/ty0_gen_context.v b/helm/coq-contribs/LAMBDA-TYPES/ty0_gen_context.v deleted file mode 100644 index 3a5b5d9b7..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/ty0_gen_context.v +++ /dev/null @@ -1,227 +0,0 @@ -(*#* #stop file *) - -Require lift_gen. -Require lift_props. -Require subst1_defs. -Require subst1_lift. -Require subst1_confluence. -Require drop_props. -Require csubst1_defs. -Require pc3_gen. -Require pc3_gen_context. -Require ty0_defs. -Require ty0_lift. - -(* NOTE: these break the recursion between ty0_sred_cpr0_pr0 and ty0_gen_lift *) - - Section ty0_gen_cabbr. (**************************************************) - - Tactic Definition IH d a0 a := - Match Context With - [ H: (e:?; u:?; d:?) ? -> (a0:?) ? -> (a:?) ? -> ? -> ? |- ? ] -> - LApply (H e u0 d); [ Clear H; Intros H | XAuto ]; - LApply (H a0); [ Clear H; Intros H | XAuto ]; - LApply (H a); [ Clear H; Intros H | XEAuto ]; - LApply H; [ Clear H; Intros H | XAuto ]; - XElim H; Intros. - -(* NOTE: This can be generalized removing the last three premises *) - Theorem ty0_gen_cabbr: (g:?; c:?; t1,t2:?) (ty0 g c t1 t2) -> - (e:?; u:?; d:?) (drop d (0) c (CTail e (Bind Abbr) u)) -> - (a0:?) (csubst1 d u c a0) -> - (a:?) (wf0 g a) -> (drop (1) d a0 a) -> - (EX y1 y2 | (subst1 d u t1 (lift (1) d y1)) & - (subst1 d u t2 (lift (1) d y2)) & - (ty0 g a y1 y2) - ). - Intros until 1; XElim H; Intros. -(* case 1: ty0_conv *) - Repeat IH d a0 a; EApply ex3_2_intro; - [ XEAuto | XEAuto | EApply ty0_conv; Try EApply pc3_gen_cabbr; XEAuto ]. -(* case 2: ty0_sort *) - EApply ex3_2_intro; Try Rewrite lift_sort; XAuto. -(* case 3: ty0_abbr *) - Apply (lt_eq_gt_e n d0); Intros; Clear c t1 t2. -(* case 3.1: n < d0 *) - Clear H1; DropDis; Rewrite minus_x_Sy in H1; [ DropGenBase | XAuto ]. - CSubst1Drop; Rewrite minus_x_Sy in H0; [ Idtac | XAuto ]. - CSubst1GenBase; Rewrite H0 in H8; Clear H0 x; Simpl in H9. - Rewrite (lt_plus_minus n d0) in H6; [ Idtac | XAuto ]. - DropDis; Rewrite H0 in H9; Clear H0 x0. - IH '(minus d0 (S n)) x1 x3. - Subst1Confluence; Rewrite H0 in H11; Clear H0 x0. - Pattern 3 d0; Rewrite (le_plus_minus_sym (S n) d0); [ Idtac | XAuto ]. - Pattern 4 d0; Rewrite (le_plus_minus (S n) d0); [ Idtac | XAuto ]. - EApply ex3_2_intro; - [ Rewrite lift_lref_lt | Rewrite lift_d | EApply ty0_abbr ]; XEAuto. -(* case 3.2: n = d0 *) - Rewrite H7; Rewrite H7 in H0; Clear H2 H7 n. - DropDis; Inversion H0; Rewrite H8 in H4; Clear H0 H7 H8 e u0. - CSubst1Drop; DropDis. - EApply ex3_2_intro; - [ EApply subst1_single; Rewrite lift_free; Simpl; XEAuto - | Rewrite lift_free; Simpl; XEAuto - | XEAuto ]. -(* case 3.3: n > d0 *) - Clear H2 H3 e; CSubst1Drop; DropDis. - Pattern 1 n; Rewrite (lt_plus_minus (0) n); [ Idtac | XEAuto ]. - Arith4c '(0) '(minus n (1)). - EApply ex3_2_intro; - [ Rewrite lift_lref_ge - | Rewrite lift_free; Simpl - | Pattern 2 n; Rewrite (minus_x_SO n) - ]; XEAuto. -(* case 4: ty0_abst *) - Apply (lt_eq_gt_e n d0); Intros; Clear c t1 t2. -(* case 4.1: n < d0 *) - Clear H1; DropDis; Rewrite minus_x_Sy in H1; [ DropGenBase | XAuto ]. - CSubst1Drop; Rewrite minus_x_Sy in H0; [ Idtac | XAuto ]. - CSubst1GenBase; Rewrite H0 in H8; Clear H0 x; Simpl in H9. - Rewrite (lt_plus_minus n d0) in H6; [ Idtac | XAuto ]. - DropDis; Rewrite H0 in H9; Clear H0 x0. - IH '(minus d0 (S n)) x1 x3. - Subst1Confluence; Rewrite H0 in H11; Clear H0 x0. - Pattern 3 d0; Rewrite (le_plus_minus_sym (S n) d0); [ Idtac | XAuto ]. - Pattern 4 d0; Rewrite (le_plus_minus (S n) d0); [ Idtac | XAuto ]. - EApply ex3_2_intro; - [ Rewrite lift_lref_lt | Rewrite lift_d | EApply ty0_abst ]; XEAuto. -(* case 4.2: n = d0 *) - Rewrite H7; Rewrite H7 in H0; DropDis; Inversion H0. -(* case 4.3: n > d0 *) - Clear H2 H3 e; CSubst1Drop; DropDis. - Pattern 1 n; Rewrite (lt_plus_minus (0) n); [ Idtac | XEAuto ]. - Arith4c '(0) '(minus n (1)). - EApply ex3_2_intro; - [ Rewrite lift_lref_ge - | Rewrite lift_free; Simpl - | Pattern 2 n; Rewrite (minus_x_SO n) - ]; XEAuto. -(* case 5: ty0_bind *) - IH d a0 a; Clear H H1 H3 c t1 t2. - IH '(S d) '(CTail a0 (Bind b) (lift (1) d x0)) '(CTail a (Bind b) x0). - IH '(S d) '(CTail a0 (Bind b) (lift (1) d x0)) '(CTail a (Bind b) x0). - Subst1Confluence; Rewrite H4 in H11; Clear H4 x5. - EApply ex3_2_intro; Try Rewrite lift_bind; XEAuto. -(* case 6: ty0_appl *) - Repeat IH d a0 a; Clear H H1 c t1 t2. - Subst1GenBase; SymEqual; LiftGenBase; Rewrite H in H8; Rewrite H11 in H1; Rewrite H12 in H7; Clear H H11 H12 x1 x4 x5. - Subst1Confluence; Rewrite H in H8; Clear H x6. - EApply ex3_2_intro; Try Rewrite lift_flat; - [ Idtac | EApply subst1_tail; [ Idtac | Rewrite lift_bind ] | Idtac ]; XEAuto. -(* case 7: ty0_cast *) - Rename u into u0; Repeat IH d a0 a; Clear H H1 c t1 t2. - Subst1Confluence; Rewrite H in H10; Clear H x3. - EApply ex3_2_intro; [ Rewrite lift_flat | Idtac | Idtac ]; XEAuto. - Qed. - - End ty0_gen_cabbr. - - Section ty0_gen_cvoid. (**************************************************) - - Tactic Definition IH d a := - Match Context With - [ H: (e:?; u:?; d:?) ? -> (a:?) ? -> ? -> ? |- ? ] -> - LApply (H e u0 d); [ Clear H; Intros H | XAuto ]; - LApply (H a); [ Clear H; Intros H | XEAuto ]; - LApply H; [ Clear H; Intros H | XAuto ]; - XElim H; Intros. - -(* NOTE: This can be generalized removing the last two premises *) - Theorem ty0_gen_cvoid: (g:?; c:?; t1,t2:?) (ty0 g c t1 t2) -> - (e:?; u:?; d:?) (drop d (0) c (CTail e (Bind Void) u)) -> - (a:?) (wf0 g a) -> (drop (1) d c a) -> - (EX y1 y2 | t1 = (lift (1) d y1) & - t2 = (lift (1) d y2) & - (ty0 g a y1 y2) - ). - Intros until 1; XElim H; Intros. -(* case 1: ty0_conv *) - Repeat IH d a; Rewrite H0 in H3; Rewrite H7 in H3; Pc3Gen; XEAuto. -(* case 2: ty0_sort *) - EApply ex3_2_intro; Try Rewrite lift_sort; XEAuto. -(* case 3: ty0_abbr *) - Apply (lt_eq_gt_e n d0); Intros. -(* case 3.1: n < d0 *) - DropDis; Rewrite minus_x_Sy in H7; [ DropGenBase | XAuto ]. - Rewrite (lt_plus_minus n d0) in H5; [ Idtac | XAuto ]. - DropDis; Rewrite H0 in H2; Clear H0 H1 u. - IH '(minus d0 (S n)) x1; Rewrite H1; Clear H1 t. - LiftGen; Rewrite <- H0 in H2; Clear H0 x2. - Rewrite <- lift_d; [ Idtac | XAuto ]. - Rewrite <- le_plus_minus; [ Idtac | XAuto ]. - EApply ex3_2_intro; [ Rewrite lift_lref_lt | Idtac | EApply ty0_abbr ]; XEAuto. -(* case 3.2: n = d0 *) - Rewrite H6 in H0; DropDis; Inversion H0. -(* case 3.3: n > d0 *) - Clear H2 H3 c e t1 t2 u0; DropDis. - Pattern 1 n; Rewrite (lt_plus_minus (0) n); [ Idtac | XEAuto ]. - Arith4c '(0) '(minus n (1)). - EApply ex3_2_intro; - [ Rewrite lift_lref_ge - | Rewrite lift_free; Simpl - | Pattern 2 n; Rewrite (minus_x_SO n) - ]; XEAuto. -(* case 4: ty0_abst *) - Apply (lt_eq_gt_e n d0); Intros. -(* case 4.1: n < d0 *) - DropDis; Rewrite minus_x_Sy in H7; [ DropGenBase | XAuto ]. - Rewrite (lt_plus_minus n d0) in H5; [ Idtac | XAuto ]. - DropDis; Rewrite H0; Rewrite H0 in H2; Clear H0 H1 u. - IH '(minus d0 (S n)) x1; Clear H1 t. - LiftGen; Rewrite <- H0 in H2; Clear H0 x2. - Rewrite <- lift_d; [ Idtac | XAuto ]. - Rewrite <- le_plus_minus; [ Idtac | XAuto ]. - EApply ex3_2_intro; [ Rewrite lift_lref_lt | Idtac | EApply ty0_abst ]; XEAuto. -(* case 4.2: n = d0 *) - Rewrite H6 in H0; DropDis; Inversion H0. -(* case 4.3: n > d0 *) - Clear H2 H3 c e t1 t2 u0; DropDis. - Pattern 1 n; Rewrite (lt_plus_minus (0) n); [ Idtac | XEAuto ]. - Arith4c '(0) '(minus n (1)). - EApply ex3_2_intro; - [ Rewrite lift_lref_ge - | Rewrite lift_free; [ Simpl | Simpl | Idtac ] - | Pattern 2 n; Rewrite (minus_x_SO n) - ]; XEAuto. -(* case 5: ty0_bind *) - IH d a; Rewrite H0; Rewrite H0 in H2; Rewrite H0 in H4; Clear H H0 H1 H3 H8 u t. - IH '(S d) '(CTail a (Bind b) x0); Rewrite H; Rewrite H in H2; Clear H H0 t3 t4. - IH '(S d) '(CTail a (Bind b) x0); Rewrite H; Clear H t0. - LiftGen; Rewrite <- H in H2; Clear H x5. - LiftTailRwBack; XEAuto. -(* case 6: ty0_appl *) - IH d a; Rewrite H2; Clear H H1 H2 v. - LiftGenBase; Rewrite H in H7; Rewrite H1; Rewrite H1 in H0; Rewrite H2; Clear H H1 H2 u t x1. - IH d a; Rewrite H; Clear H w. - LiftGen; Rewrite <- H in H1; Clear H x4. - LiftTailRwBack; XEAuto. -(* case 7: ty0_cast *) - Rename u into u0. - IH d a; Rewrite H2 in H0; Rewrite H2; Clear H H1 H2 H6 t3 t4. - IH d a; Rewrite H; Clear H t0. - LiftGen; Rewrite <- H in H1; Clear H x3. - LiftTailRwBack; XEAuto. - Qed. - - End ty0_gen_cvoid. - - Tactic Definition Ty0GenContext := - Match Context With - | [ H: (ty0 ?1 (CTail ?2 (Bind Abbr) ?3) ?4 ?5) |- ? ] -> - LApply (ty0_gen_cabbr ?1 (CTail ?2 (Bind Abbr) ?3) ?4 ?5); [ Clear H; Intros H | XAuto ]; - LApply (H ?2 ?3 (0)); [ Clear H; Intros H | XAuto ]; - LApply (H (CTail ?2 (Bind Abbr) ?3)); [ Clear H; Intros H | XAuto ]; - LApply (H ?2); [ Clear H; Intros H | XAuto ]; - LApply H; [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (ty0 ?1 (CTail ?2 (Bind Void) ?3) ?4 ?5) |- ? ] -> - LApply (ty0_gen_cvoid ?1 (CTail ?2 (Bind Void) ?3) ?4 ?5); [ Clear H; Intros H | XAuto ]; - LApply (H ?2 ?3 (0)); [ Clear H; Intros H | XAuto ]; - LApply (H ?2); [ Clear H; Intros H | XAuto ]; - LApply H; [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | _ -> Ty0GenBase. - -(*#* #start file *) - -(*#* #single *) diff --git a/helm/coq-contribs/LAMBDA-TYPES/ty0_lift.v b/helm/coq-contribs/LAMBDA-TYPES/ty0_lift.v deleted file mode 100644 index ebe6bfcc7..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/ty0_lift.v +++ /dev/null @@ -1,65 +0,0 @@ -Require lift_props. -Require drop_props. -Require pc3_props. -Require ty0_defs. - -(*#* #caption "main properties of typing" #clauses ty0_props *) - - Section ty0_lift. (*******************************************************) - -(*#* #caption "lift preserves types" *) -(*#* #cap #cap t1, t2 #alpha c in C1, e in C2, d in i *) - - Theorem ty0_lift : (g:?; e:?; t1,t2:?) (ty0 g e t1 t2) -> - (c:?) (wf0 g c) -> (d,h:?) (drop h d c e) -> - (ty0 g c (lift h d t1) (lift h d t2)). - -(*#* #stop file *) - - Intros until 1; XElim H; Intros. -(* case 1 : ty0_conv *) - XEAuto. -(* case 2 : ty0_sort *) - Repeat Rewrite lift_sort; XAuto. -(* case 3 : ty0_abbr *) - Apply (lt_le_e n d0); Intros; DropDis. -(* case 3.1 : n < d0 *) - Rewrite minus_x_Sy in H4; [ Idtac | XAuto ]. - DropGenBase; Rewrite H4 in H0; Clear H4 x. - Rewrite lift_lref_lt; [ Idtac | XAuto ]. - Arith8 d0 '(S n); Rewrite lift_d; [ Arith8' d0 '(S n) | XAuto ]. - EApply ty0_abbr; XEAuto. -(* case 3.2 : n >= d0 *) - Rewrite lift_lref_ge; [ Idtac | XAuto ]. - Arith7' n; Rewrite lift_free; [ Idtac | Simpl; XAuto | XAuto ]. - Rewrite (plus_sym h (S n)); Simpl; XEAuto. -(* case 4: ty0_abst *) - Apply (lt_le_e n d0); Intros; DropDis. -(* case 4.1 : n < d0 *) - Rewrite minus_x_Sy in H4; [ Idtac | XAuto ]. - DropGenBase; Rewrite H4 in H0; Clear H4 x. - Rewrite lift_lref_lt; [ Idtac | XAuto ]. - Arith8 d0 '(S n); Rewrite lift_d; [ Arith8' d0 '(S n) | XAuto ]. - EApply ty0_abst; XEAuto. -(* case 4.2 : n >= d0 *) - Rewrite lift_lref_ge; [ Idtac | XAuto ]. - Arith7' n; Rewrite lift_free; [ Idtac | Simpl; XAuto | XAuto ]. - Rewrite (plus_sym h (S n)); Simpl; XEAuto. -(* case 5: ty0_bind *) - LiftTailRw; Simpl; EApply ty0_bind; XEAuto. -(* case 6: ty0_appl *) - LiftTailRw; Simpl; EApply ty0_appl; [ Idtac | Rewrite <- lift_bind ]; XEAuto. -(* case 7: ty0_cast *) - LiftTailRw; XEAuto. - Qed. - - End ty0_lift. - - Hints Resolve ty0_lift : ltlc. - - Tactic Definition Ty0Lift b u := - Match Context With - [ H: (ty0 ?1 ?2 ?3 ?4) |- ? ] -> - LApply (ty0_lift ?1 ?2 ?3 ?4); [ Intros H_x | XAuto ]; - LApply (H_x (CTail ?2 (Bind b) u)); [ Clear H_x; Intros H_x | XEAuto ]; - LApply (H_x (0) (1)); [ Clear H_x; Intros | XAuto ]. diff --git a/helm/coq-contribs/LAMBDA-TYPES/ty0_props.v b/helm/coq-contribs/LAMBDA-TYPES/ty0_props.v deleted file mode 100644 index ab4b00687..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/ty0_props.v +++ /dev/null @@ -1,110 +0,0 @@ -Require drop_props. -Require pc3_props. -Require ty0_defs. -Require ty0_gen. -Require ty0_lift. - - Section ty0_correct. (****************************************************) - -(*#* #caption "correctness of types" *) -(*#* #cap #cap c, t1, t2 #alpha t in T3 *) - - Theorem ty0_correct : (g:?; c:?; t1,t2:?) - (ty0 g c t1 t2) -> (EX t | (ty0 g c t2 t)). - -(*#* #stop file *) - - Intros; XElim H; Intros. -(* case 1 : ty0_conv *) - XEAuto. -(* case 2 : ty0_sort *) - XEAuto. -(* case 3 : ty0_abbr *) - XElim H2; XEAuto. -(* case 4 : ty0_abst *) - XEAuto. -(* case 5 : ty0_bind *) - XElim H4; XEAuto. -(* case 6 : ty0_appl *) - XElim H0; XElim H2; Intros. - Ty0GenBase; XEAuto. -(* case 7 : ty0_cast *) - XAuto. - Qed. - - End ty0_correct. - - Tactic Definition Ty0Correct := - Match Context With - [ _: (ty0 ?1 ?2 ?3 ?4) |- ? ] -> - LApply (ty0_correct ?1 ?2 ?3 ?4); [ Intros H_x | XAuto ]; - XElim H_x; Intros. - -(*#* #start file *) - - Section ty0_shift. (******************************************************) - -(*#* #caption "shift lemma for types" *) -(*#* #cap #cap t1, t2 #alpha c in C1, e in C2 *) - - Theorem ty0_shift : (h:?; c,e:?) (drop h (0) c e) -> - (g:?; t1,t2:?) (ty0 g c t1 t2) -> (wf0 g e) -> - (ty0 g e (app c h t1) (app c h t2)). - -(*#* #stop file *) - - XElim h. -(* case 1 : h = 0 *) - Intros; DropGenBase; Rewrite <- H. - Repeat Rewrite app_O; XAuto. -(* case 2 : h > 0 *) - Intros h IHh; XElim c. -(* case 2.1 : CSort *) - Intros; DropGenBase; Rewrite H. - Simpl; XAuto. -(* case 2.2 : CTail k *) - Intros c IHc; Clear IHc; XElim k; Intros; Wf0Ty0. - DropGenBase; Move H0 after H2; Ty0Correct. - Simpl; Apply IHh; [ Idtac | EApply ty0_bind | Idtac ]; XEAuto. - Qed. - - End ty0_shift. - - Hints Resolve ty0_shift : ltlc. - - Section ty0_unique. (*****************************************************) - - Opaque pc3. - -(*#* #start file *) - -(*#* #caption "uniqueness of types" *) -(*#* #cap #cap c, t1, t2 #alpha u in T *) - - Theorem ty0_unique : (g:?; c:?; u,t1:?) (ty0 g c u t1) -> - (t2:?) (ty0 g c u t2) -> (pc3 c t1 t2). - -(*#* #stop file *) - - Intros until 1; XElim H; Intros. -(* case 1 : ty0_conv *) - XEAuto. -(* case 2 : ty0_sort *) - Ty0GenBase; XAuto. -(* case 3 : ty0_abbr *) - Ty0GenBase; DropDis; Inversion H4. - Rewrite H7 in H2; Rewrite H8 in H2; XEAuto. -(* case 4 : ty0_abst *) - Ty0GenBase; DropDis; Inversion H4. - Rewrite H7 in H2; Rewrite H8 in H2; XEAuto. -(* case 5 : ty0_bind *) - Ty0GenBase; XEAuto. -(* case 6 : ty0_appl *) - Ty0GenBase; EApply pc3_t; [ Idtac | EApply H3 ]; XEAuto. -(* case 7 : ty0_cast *) - Ty0GenBase; XEAuto. - Qed. - - End ty0_unique. - - Hints Resolve ty0_unique : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/ty0_sred.v b/helm/coq-contribs/LAMBDA-TYPES/ty0_sred.v deleted file mode 100644 index 99548beb5..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/ty0_sred.v +++ /dev/null @@ -1,252 +0,0 @@ -Require lift_gen. -Require subst1_gen. -Require csubst1_defs. -Require pr0_lift. -Require pr0_subst1. -Require cpr0_defs. -Require pc1_props. -Require pc3_props. -Require pc3_gen. -Require ty0_defs. -Require ty0_gen. -Require ty0_lift. -Require ty0_props. -Require ty0_subst0. -Require ty0_gen_context. -Require csub0_defs. -Require csub0_props. - -(*#* #caption "subject reduction" #clauses *) - -(*#* #stop file *) - - Section ty0_sred_cpr0_pr0. (**********************************************) - - Tactic Definition IH H c2 t2 := - LApply (H c2); [ Intros H_x | XEAuto ]; - LApply H_x; [ Clear H_x; Intros H_x | XAuto ]; - LApply (H_x t2); [ Clear H_x; Intros | XEAuto ]. - - Tactic Definition IH0 := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 ?2 c2)->(t2:T)(pr0 ?3 t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (ty0 ?1 ?2 ?3 ?4) |- ? ] -> - IH H1 ?5 ?3. - - Tactic Definition IH0c := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 ?2 c2)->(t2:T)(pr0 ?3 t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (ty0 ?1 ?2 ?3 ?4) |- ? ] -> - IH H1 ?5 ?3; Clear H1. - - Tactic Definition IH0B := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 (CTail ?2 (Bind ?6) ?7) c2)->(t2:T)(pr0 ?3 t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (ty0 ?1 (CTail ?2 (Bind ?6) ?7) ?3 ?4) |- ? ] -> - IH H1 '(CTail ?5 (Bind ?6) ?7) ?3. - - Tactic Definition IH0Bc := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 (CTail ?2 (Bind ?6) ?7) c2)->(t2:T)(pr0 ?3 t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (ty0 ?1 (CTail ?2 (Bind ?6) ?7) ?3 ?4) |- ? ] -> - IH H1 '(CTail ?5 (Bind ?6) ?7) ?3; Clear H1. - - Tactic Definition IH1 := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 ?2 c2)->(t2:T)(pr0 ?3 t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (pr0 ?3 ?6) |- ? ] -> - IH H1 ?5 ?6. - - Tactic Definition IH1c := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 ?2 c2)->(t2:T)(pr0 ?3 t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (pr0 ?3 ?6) |- ? ] -> - IH H1 ?5 ?6; Clear H1. - - Tactic Definition IH1Bc := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 (CTail ?2 (Bind ?7) ?8) c2)->(t2:T)(pr0 ?3 t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (pr0 ?3 ?6) |- ? ] -> - IH H1 '(CTail ?5 (Bind ?7) ?8) ?6; Clear H1. - - Tactic Definition IH1BLc := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 (CTail ?2 (Bind ?7) ?8) c2)->(t2:T)(pr0 (lift ?10 ?11 ?3) t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (pr0 ?3 ?6) |- ? ] -> - IH H1 '(CTail ?5 (Bind ?7) ?8) '(lift ?10 ?11 ?6); Clear H1. - - Tactic Definition IH1T := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 ?2 c2)->(t2:T)(pr0 (TTail ?7 ?8 ?3) t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (pr0 ?3 ?6) |- ? ] -> - IH H1 ?5 '(TTail ?7 ?8 ?6). - - Tactic Definition IH1T2c := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 ?2 c2)->(t2:T)(pr0 (TTail ?7 ?8 ?3) t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (pr0 ?3 ?6); H4: (pr0 ?8 ?9) |- ? ] -> - IH H1 ?5 '(TTail ?7 ?9 ?6); Clear H1. - - Tactic Definition IH3B := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 (CTail ?2 (Bind ?7) ?8) c2)->(t2:T)(pr0 ?3 t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (pr0 ?3 ?6); H4: (pr0 ?8 ?9) |- ? ] -> - IH H1 '(CTail ?5 (Bind ?7) ?9) ?6. - -(*#* #start file *) - -(*#* #caption "base case" *) -(*#* #cap #cap c1, c2 #alpha t1 in T, t2 in T1, t in T2 *) - - Theorem ty0_sred_cpr0_pr0: (g:?; c1:?; t1,t:?) (ty0 g c1 t1 t) -> - (c2:?) (wf0 g c2) -> (cpr0 c1 c2) -> - (t2:?) (pr0 t1 t2) -> (ty0 g c2 t2 t). - -(*#* #stop file *) - - Intros until 1; XElim H; Intros. -(* case 1: ty0_conv *) - IH1c; IH0c; EApply ty0_conv; XEAuto. -(* case 2: ty0_sort *) - Inversion H2; XAuto. -(* case 3: ty0_abbr *) - Inversion H5; Cpr0Drop; IH1c; XEAuto. -(* case 4: ty0_abst *) - Intros; Inversion H5; Cpr0Drop; IH0; IH1. - EApply ty0_conv; - [ EApply ty0_lift; [ Idtac | XAuto | XEAuto ] - | EApply ty0_abst - | EApply pc3_lift ]; XEAuto. -(* case 5: ty0_bind *) - Intros; Inversion H7; Clear H7. -(* case 5.1: pr0_refl *) - IH0c; IH0Bc; IH0Bc. - EApply ty0_bind; XEAuto. -(* case 5.2: pr0_cont *) - IH0; IH0B; Ty0Correct; IH3B; Ty0Correct. - EApply ty0_conv; [ EApply ty0_bind | EApply ty0_bind | Idtac ]; XEAuto. -(* case 5.3: pr0_delta *) - Rewrite <- H8 in H1; Rewrite <- H8 in H2; - Rewrite <- H8 in H3; Rewrite <- H8 in H4; Clear H8 b. - IH0; IH0B; Ty0Correct; IH3B; Ty0Correct. - EApply ty0_conv; [ EApply ty0_bind | EApply ty0_bind | Idtac ]; XEAuto. -(* case 5.4: pr0_zeta *) - Rewrite <- H11 in H1; Rewrite <- H11 in H2; Clear H8 H9 H10 H11 b0 t2 t7 u0. - IH0; IH1BLc; Move H3 after H8; IH0Bc; Ty0Correct; Move H8 after H4; Clear H H0 H1 H3 H6 c c1 t t1; - NewInduction b. -(* case 5.4.1: Abbr *) - Ty0GenContext; Subst1Gen; LiftGen; Rewrite H in H1; Clear H x0. - EApply ty0_conv; - [ EApply ty0_bind; XEAuto | XEAuto - | EApply pc3_pr3_x; - EApply (pr3_t (TTail (Bind Abbr) u (lift (1) (0) x1))); XEAuto ]. -(* case 5.4.2: Abst *) - EqFalse. -(* case 5.4.3: Void *) - Ty0GenContext; Rewrite H0; Rewrite H0 in H2; Clear H0 t3. - LiftGen; Rewrite <- H in H1; Clear H x0. - EApply ty0_conv; [ EApply ty0_bind; XEAuto | XEAuto | XAuto ]. -(* case 6: ty0_appl *) - Intros; Inversion H5; Clear H5. -(* case 6.1: pr0_refl *) - IH0c; IH0c; EApply ty0_appl; XEAuto. -(* case 6.2: pr0_cont *) - Clear H6 H7 H8 H9 c1 k t t1 t2 t3 u1. - IH0; Ty0Correct; Ty0GenBase; IH1c; IH0; IH1c. - EApply ty0_conv; - [ EApply ty0_appl; [ XEAuto | EApply ty0_bind; XEAuto ] - | EApply ty0_appl; XEAuto - | XEAuto ]. -(* case 6.3: pr0_beta *) - Rewrite <- H7 in H1; Rewrite <- H7 in H2; Clear H6 H7 H9 c1 t t1 t2 v v1. - IH1T; IH0c; Ty0Correct; Ty0GenBase; IH0; IH1c. - Move H5 after H13; Ty0GenBase; Pc3Gen; Repeat CSub0Ty0. - EApply ty0_conv; - [ Apply ty0_appl; [ Idtac | EApply ty0_bind ] - | EApply ty0_bind - | Apply (pc3_t (TTail (Bind Abbr) v2 t0)) - ]; XEAuto. -(* case 6.4: pr0_delta *) - Rewrite <- H7 in H1; Rewrite <- H7 in H2; Clear H6 H7 H11 c1 t t1 t2 v v1. - IH1T2c; Clear H1; Ty0Correct; NonLinear; Ty0GenBase; IH1; IH0c. - Move H5 after H1; Ty0GenBase; Pc3Gen; Rewrite lift_bind in H0. - Move H1 after H0; Ty0Lift b u2; Rewrite lift_bind in H17. - Ty0GenBase. - EApply ty0_conv; - [ Apply ty0_appl; [ Idtac | EApply ty0_bind ]; XEAuto - | EApply ty0_bind; - [ Idtac - | EApply ty0_appl; [ EApply ty0_lift | EApply ty0_conv ] - | EApply ty0_appl; [ EApply ty0_lift | EApply ty0_bind ] - ]; XEAuto - | Idtac ]. - Rewrite <- lift_bind; Apply pc3_pc1; - Apply (pc1_pr0_u2 (TTail (Flat Appl) v2 (TTail (Bind b) u2 (lift (1) (0) (TTail (Bind Abst) u t0))))); XAuto. -(* case 7: ty0_cast *) - Intros; Inversion H5; Clear H5. -(* case 7.1: pr0_refl *) - IH0c; IH0c; EApply ty0_cast; XEAuto. -(* case 7.2: pr0_cont *) - Clear H6 H7 H8 H9 c1 k u1 t t1 t4 t5. - IH0; IH1c; IH1c. - EApply ty0_conv; - [ XEAuto - | EApply ty0_cast; [ EApply ty0_conv; XEAuto | XEAuto ] - | XAuto ]. -(* case 7.3: pr0_epsilon *) - XAuto. - Qed. - - End ty0_sred_cpr0_pr0. - - Section ty0_sred_pr3. (**********************************************) - - Theorem ty0_sred_pr1: (c:?; t1,t2:?) (pr1 t1 t2) -> - (g:?; t:?) (ty0 g c t1 t) -> - (ty0 g c t2 t). - Intros until 1; XElim H; Intros. -(* case 1: pr1_r *) - XAuto. -(* case 2: pr1_u *) - EApply H1; EApply ty0_sred_cpr0_pr0; XEAuto. - Qed. - - Theorem ty0_sred_pr2: (c:?; t1,t2:?) (pr2 c t1 t2) -> - (g:?; t:?) (ty0 g c t1 t) -> - (ty0 g c t2 t). - Intros until 1; XElim H; Intros. -(* case 1: pr2_free *) - EApply ty0_sred_cpr0_pr0; XEAuto. -(* case 2: pr2_u *) - EApply ty0_subst0; Try EApply ty0_sred_cpr0_pr0; XEAuto. - Qed. - -(*#* #start file *) - -(*#* #caption "general case without the reduction in the context" *) -(*#* #cap #cap c #alpha t1 in T, t2 in T1, t in T2 *) - - Theorem ty0_sred_pr3: (c:?; t1,t2:?) (pr3 c t1 t2) -> - (g:?; t:?) (ty0 g c t1 t) -> - (ty0 g c t2 t). - -(*#* #stop file *) - - Intros until 1; XElim H; Intros. -(* case 1: pr3_refl *) - XAuto. -(* case 2: pr3_sing *) - EApply H1; EApply ty0_sred_pr2; XEAuto. - Qed. - - End ty0_sred_pr3. - - Tactic Definition Ty0SRed := - Match Context With - | [ H1: (pr3 ?1 ?2 ?3); H2: (ty0 ?4 ?1 ?2 ?5) |- ? ] -> - LApply (ty0_sred_pr3 ?1 ?2 ?3); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5); [ Clear H2 H_x; Intros | XAuto ]. - -(*#* #start file *) - -(*#* #single *) diff --git a/helm/coq-contribs/LAMBDA-TYPES/ty0_sred_props.v b/helm/coq-contribs/LAMBDA-TYPES/ty0_sred_props.v deleted file mode 100644 index 1606efc5c..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/ty0_sred_props.v +++ /dev/null @@ -1,176 +0,0 @@ -Require lift_props. -Require drop_props. -Require pc3_props. -Require pc3_gen. -Require ty0_defs. -Require ty0_gen. -Require ty0_props. -Require ty0_sred. - -(*#* #caption "corollaries of subject reduction" #clauses *) - -(*#* #stop file *) - - Section ty0_gen. (********************************************************) - - Tactic Definition IH e := - Match Context With - [ H0: (t:?; d:?) ?1 = (lift ?2 d t) -> ?; H1: ?1 = (lift ?2 ?3 ?4) |- ? ] -> - LApply (H0 ?4 ?3); [ Clear H0 H1; Intros H0 | XAuto ]; - LApply (H0 e); [ Clear H0; Intros H0 | XEAuto ]; - LApply H0; [ Clear H0; Intros H0 | XAuto ]; - XElim H0; Intros. - -(*#* #start file *) - -(*#* #caption "generation lemma for lift" *) -(*#* #cap #cap t2 #alpha c in C1, e in C2, t1 in T, x in T1, d in i *) - - Theorem ty0_gen_lift: (g:?; c:?; t1,x:?; h,d:?) - (ty0 g c (lift h d t1) x) -> - (e:?) (wf0 g e) -> (drop h d c e) -> - (EX t2 | (pc3 c (lift h d t2) x) & (ty0 g e t1 t2)). - -(*#* #stop file *) - - Intros until 1; InsertEq H '(lift h d t1); - UnIntro H d; UnIntro H t1; XElim H; Intros; - Rename x0 into t3; Rename x1 into d0. -(* case 1: ty0_conv *) - IH e; XEAuto. -(* case 2: ty0_sort *) - LiftGenBase; Rewrite H0; Clear H0 t. - EApply ex2_intro; [ Rewrite lift_sort; XAuto | XAuto ]. -(* case 3: ty0_abbr *) - Apply (lt_le_e n d0); Intros. -(* case 3.1: n < d0 *) - LiftGenBase; DropS; Rewrite H3; Clear H3 t3. - Rewrite (le_plus_minus (S n) d0); [ Idtac | XAuto ]. - Rewrite (lt_plus_minus n d0) in H5; [ DropDis; IH x1 | XAuto ]. - EApply ex2_intro; - [ Rewrite lift_d; [ EApply pc3_lift; XEAuto | XEAuto ] - | EApply ty0_abbr; XEAuto ]. -(* case 3.2: n >= d0 *) - Apply (lt_le_e n (plus d0 h)); Intros. -(* case 3.2.1: n < d0 + h *) - LiftGenBase. -(* case 3.2.2: n >= d0 + h *) - Rewrite (le_plus_minus_sym h n) in H3; [ Idtac | XEAuto ]. - LiftGenBase; DropDis; Rewrite H3; Clear H3 t3. - EApply ex2_intro; [ Idtac | EApply ty0_abbr; XEAuto ]. - Rewrite lift_free; [ Idtac | XEAuto | XAuto ]. - Rewrite <- plus_n_Sm; Rewrite <- le_plus_minus; XEAuto. -(* case 4: ty0_abst *) - Apply (lt_le_e n d0); Intros. -(* case 4.1: n < d0 *) - LiftGenBase; Rewrite H3; Clear H3 t3. - Rewrite (le_plus_minus (S n) d0); [ Idtac | XAuto ]. - Rewrite (lt_plus_minus n d0) in H5; [ DropDis; Rewrite H0; IH x1 | XAuto ]. - EApply ex2_intro; [ Rewrite lift_d | EApply ty0_abst ]; XEAuto. -(* case 4.2: n >= d0 *) - Apply (lt_le_e n (plus d0 h)); Intros. -(* case 4.2.1: n < d0 + h *) - LiftGenBase. -(* case 4.2.2: n >= d0 + h *) - Rewrite (le_plus_minus_sym h n) in H3; [ Idtac | XEAuto ]. - LiftGenBase; DropDis; Rewrite H3; Clear H3 t3. - EApply ex2_intro; [ Idtac | EApply ty0_abst; XEAuto ]. - Rewrite lift_free; [ Idtac | XEAuto | XAuto ]. - Rewrite <- plus_n_Sm; Rewrite <- le_plus_minus; XEAuto. -(* case 5: ty0_bind *) - LiftGenBase; Rewrite H5; Rewrite H8; Rewrite H8 in H2; Clear H5 t3. - Move H0 after H2; IH e; IH '(CTail e (Bind b) x0); Ty0Correct. - EApply ex2_intro; [ Rewrite lift_bind; XEAuto | XEAuto ]. -(* case 6: ty0_appl *) - LiftGenBase; Rewrite H3; Rewrite H6; Clear H3 c t3 x y. - IH e; IH e; Pc3Gen; Pc3T; Pc3Gen; Pc3T. - Move H3 after H12; Ty0Correct; Ty0SRed; Ty0GenBase; Wf0Ty0. - EApply ex2_intro; - [ Rewrite lift_flat; Apply pc3_thin_dx; - Rewrite lift_bind; Apply pc3_tail_21; [ EApply pc3_pr3_x | Idtac ] - | EApply ty0_appl; - [ EApply ty0_conv - | EApply ty0_conv; [ EApply ty0_bind | Idtac | Idtac ] ] - ]; XEAuto. -(* case 7: ty0_cast *) - LiftGenBase; Rewrite H3; Rewrite H6; Rewrite H6 in H0. - IH e; IH e; Pc3Gen; XEAuto. - Qed. - - End ty0_gen. - - Tactic Definition Ty0Gen := - Match Context With - | [ H0: (ty0 ?1 ?2 (lift ?3 ?4 ?5) ?6); - H1: (drop ?3 ?4 ?2 ?7) |- ? ] -> - LApply (ty0_gen_lift ?1 ?2 ?5 ?6 ?3 ?4); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?7); [ Clear H0; Intros H0 | XEAuto ]; - LApply H0; [ Clear H0 H1; Intros H0 | XAuto ]; - XElim H0; Intros - | [ H0: (ty0 ?1 ?2 (lift ?3 ?4 ?5) ?6); - _: (wf0 ?1 ?7) |- ? ] -> - LApply (ty0_gen_lift ?1 ?2 ?5 ?6 ?3 ?4); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?7); [ Clear H0; Intros H0 | XAuto ]; - LApply H0; [ Clear H0; Intros H0 | XAuto ]; - XElim H0; Intros - | _ -> Ty0GenContext. - - Section ty0_sred_props. (*************************************************) - -(*#* #start file *) - -(*#* #caption "drop preserves well-formedness" *) -(*#* #cap #alpha c in C1, e in C2, d in i *) - - Theorem wf0_drop: (c,e:?; d,h:?) (drop h d c e) -> - (g:?) (wf0 g c) -> (wf0 g e). - -(*#* #stop proof *) - - XElim c. -(* case 1: CSort *) - Intros; DropGenBase; Rewrite H; XAuto. -(* case 2: CTail k *) - Intros c IHc; XElim k; ( - XElim d; - [ XEAuto - | Intros d IHd; Intros; - DropGenBase; Rewrite H; Rewrite H1 in H0; Clear IHd H H1 e t; - Inversion H0; Clear H3 H4 b0 u ]). -(* case 2.1: Bind, d > 0 *) - Ty0Gen; XEAuto. - Qed. - -(*#* #start proof *) - -(*#* #caption "type reduction" *) -(*#* #cap #cap c, t1, t2 #alpha u in T *) - - Theorem ty0_tred: (g:?; c:?; u,t1:?) (ty0 g c u t1) -> - (t2:?) (pr3 c t1 t2) -> (ty0 g c u t2). - -(*#* #stop proof *) - - Intros; Ty0Correct; Ty0SRed; EApply ty0_conv; XEAuto. - Qed. - -(*#* #start proof *) - -(*#* #caption "subject conversion" *) -(*#* #cap #cap c, u1, u2, t1, t2 *) - - Theorem ty0_sconv: (g:?; c:?; u1,t1:?) (ty0 g c u1 t1) -> - (u2,t2:?) (ty0 g c u2 t2) -> - (pc3 c u1 u2) -> (pc3 c t1 t2). - -(*#* #stop file *) - - Intros; Pc3Unfold; Repeat Ty0SRed; XEAuto. - Qed. - - - End ty0_sred_props. - -(*#* #start file *) - -(*#* #single *) diff --git a/helm/coq-contribs/LAMBDA-TYPES/ty0_subst0.v b/helm/coq-contribs/LAMBDA-TYPES/ty0_subst0.v deleted file mode 100644 index ffd80110b..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/ty0_subst0.v +++ /dev/null @@ -1,334 +0,0 @@ -Require drop_props. -Require csubst0_defs. -Require fsubst0_defs. -Require pc3_props. -Require pc3_subst0. -Require ty0_defs. -Require ty0_gen. -Require ty0_lift. -Require ty0_props. - - Section ty0_fsubst0. (****************************************************) - -(*#* #stop macro *) - - Tactic Definition IH H0 v1 v2 v3 v4 v5 := - LApply (H0 v1 v2 v3 v4); [ Intros H_x | XEAuto ]; - LApply H_x; [ Clear H_x; Intros H_x | XEAuto ]; - LApply (H_x v5); [ Clear H_x; Intros | XEAuto ]. - - Tactic Definition IHT := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 ?1 ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) ?1 (CTail e (Bind Abbr) u0)) -> ?; - _: (subst0 ?4 ?5 ?2 ?6); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H ?4 ?5 ?1 ?6 ?9. - - Tactic Definition IHTb1 := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?; - _: (subst0 ?4 ?5 ?10 ?6); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H '(S ?4) ?5 '(CTail ?1 (Bind ?11) ?6) ?2 ?9. - - Tactic Definition IHTb2 := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?; - _: (subst0 (s (Bind ?11) ?4) ?5 ?2 ?6); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H '(S ?4) ?5 '(CTail ?1 (Bind ?11) ?10) ?6 ?9. - - Tactic Definition IHC := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 ?1 ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) ?1 (CTail e (Bind Abbr) u0)) -> ?; - _: (csubst0 ?4 ?5 ?1 ?6); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H ?4 ?5 ?6 ?2 ?9. - - Tactic Definition IHCb := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?; - _: (csubst0 ?4 ?5 ?1 ?6); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H '(S ?4) ?5 '(CTail ?6 (Bind ?11) ?10) ?2 ?9. - - Tactic Definition IHTTb := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?; - _: (subst0 ?4 ?5 ?10 ?6); - _: (subst0 (s (Bind ?11) ?4) ?5 ?2 ?7); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H '(S ?4) ?5 '(CTail ?1 (Bind ?11) ?6) ?7 ?9. - - Tactic Definition IHCT := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 ?1 ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) ?1 (CTail e (Bind Abbr) u0)) -> ?; - _: (csubst0 ?4 ?5 ?1 ?6); - _: (subst0 ?4 ?5 ?2 ?7); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H ?4 ?5 ?6 ?7 ?9. - - Tactic Definition IHCTb1 := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?; - _: (csubst0 ?4 ?5 ?1 ?6); - _: (subst0 ?4 ?5 ?10 ?7); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H '(S ?4) ?5 '(CTail ?6 (Bind ?11) ?7) ?2 ?9. - - Tactic Definition IHCTb2 := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?; - _: (csubst0 ?4 ?5 ?1 ?6); - _: (subst0 (s (Bind ?11) ?4) ?5 ?2 ?7); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H '(S ?4) ?5 '(CTail ?6 (Bind ?11) ?10) ?7 ?9. - - Tactic Definition IHCTTb := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?; - _: (csubst0 ?4 ?5 ?1 ?6); - _: (subst0 ?4 ?5 ?10 ?7); - _: (subst0 (s (Bind ?11) ?4) ?5 ?2 ?8); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H '(S ?4) ?5 '(CTail ?6 (Bind ?11) ?7) ?8 ?9. - -(*#* #start macro *) - -(*#* #caption "substitution preserves types" *) -(*#* #cap #cap c1, c2, e, t1, t2, t #alpha u in V *) - -(* NOTE: This breaks the mutual recursion between ty0_subst0 and ty0_csubst0 *) - Theorem ty0_fsubst0: (g:?; c1:?; t1,t:?) (ty0 g c1 t1 t) -> - (i:?; u,c2,t2:?) (fsubst0 i u c1 t1 c2 t2) -> - (wf0 g c2) -> - (e:?) (drop i (0) c1 (CTail e (Bind Abbr) u)) -> - (ty0 g c2 t2 t). - -(*#* #stop file *) - - Intros until 1; XElim H. -(* case 1: ty0_conv *) - Intros until 6; XElim H4; Intros. -(* case 1.1: fsubst0_snd *) - IHT; EApply ty0_conv; XEAuto. -(* case 1.2: fsubst0_fst *) - IHC; EApply ty0_conv; Try EApply pc3_fsubst0; XEAuto. -(* case 1.3: fsubst0_both *) - IHCT; IHCT; EApply ty0_conv; Try EApply pc3_fsubst0; XEAuto. -(* case 2: ty0_sort *) - Intros until 2; XElim H0; Intros. -(* case 2.1: fsubst0_snd *) - Subst0GenBase. -(* case 2.2: fsubst0_fst *) - XAuto. -(* case 2.3: fsubst0_both *) - Subst0GenBase. -(* case 3: ty0_abbr *) - Intros until 5; XElim H3; Intros; Clear c1 c2 t t1 t2. -(* case 3.1: fsubst0_snd *) - Subst0GenBase; Rewrite H6; Rewrite <- H3 in H5; Clear H3 H6 i t3. - DropDis; Inversion H5; Rewrite <- H6 in H0; Rewrite H7 in H1; XEAuto. -(* case 3.2: fsubst0_fst *) - Apply (lt_le_e n i); Intros; CSubst0Drop. -(* case 3.2.1: n < i, none *) - EApply ty0_abbr; XEAuto. -(* case 3.2.2: n < i, csubst0_snd *) - Inversion H0; CSubst0Drop. - Rewrite <- H10 in H7; Rewrite <- H11 in H7; Rewrite <- H11 in H8; Rewrite <- H12 in H8; - Clear H0 H10 H11 H12 x0 x1 x2. - DropDis; Rewrite minus_x_Sy in H0; [ DropGenBase | XAuto ]. - IHT; EApply ty0_abbr; XEAuto. -(* case 3.2.3: n < i, csubst0_fst *) - Inversion H0; CSubst0Drop. - Rewrite <- H10 in H8; Rewrite <- H11 in H7; Rewrite <- H11 in H8; Rewrite <- H12 in H7; - Clear H0 H10 H11 H12 x0 x1 x3. - DropDis; Rewrite minus_x_Sy in H0; [ DropGenBase; CSubst0Drop | XAuto ]. - IHC; EApply ty0_abbr; XEAuto. -(* case 3.2.4: n < i, csubst0_both *) - Inversion H0; CSubst0Drop. - Rewrite <- H11 in H9; Rewrite <- H12 in H7; Rewrite <- H12 in H8; Rewrite <- H12 in H9; Rewrite <- H13 in H8; - Clear H0 H11 H12 H13 x0 x1 x3. - DropDis; Rewrite minus_x_Sy in H0; [ DropGenBase; CSubst0Drop | XAuto ]. - IHCT; EApply ty0_abbr; XEAuto. -(* case 3.2.5: n >= i *) - EApply ty0_abbr; XEAuto. -(* case 3.3: fsubst0_both *) - Subst0GenBase; Rewrite H7; Rewrite <- H3 in H4; Rewrite <- H3 in H6; Clear H3 H7 i t3. - DropDis; Inversion H6; Rewrite <- H7 in H0; Rewrite H8 in H1. - CSubst0Drop; XEAuto. -(* case 4: ty0_abst *) - Intros until 5; XElim H3; Intros; Clear c1 c2 t t1 t2. -(* case 4.1: fsubst0_snd *) - Subst0GenBase; Rewrite H3 in H0; DropDis; Inversion H0. -(* case 4.2: fsubst0_fst *) - Apply (lt_le_e n i); Intros; CSubst0Drop. -(* case 4.2.1: n < i, none *) - EApply ty0_abst; XEAuto. -(* case 4.2.2: n < i, csubst0_snd *) - Inversion H0; CSubst0Drop. - Rewrite <- H10 in H7; Rewrite <- H11 in H7; Rewrite <- H11 in H8; Rewrite <- H12 in H8; Rewrite <- H12; - Clear H0 H10 H11 H12 x0 x1 x2. - DropDis; Rewrite minus_x_Sy in H0; [ DropGenBase | XAuto ]. - IHT; EApply ty0_conv; - [ EApply ty0_lift | EApply ty0_abst | EApply pc3_lift ]; XEAuto. -(* case 4.2.3: n < i, csubst0_fst *) - Inversion H0; CSubst0Drop. - Rewrite <- H10 in H8; Rewrite <- H11 in H7; Rewrite <- H11 in H8; Rewrite <- H12 in H7; Rewrite <- H12; - Clear H0 H10 H11 H12 x0 x1 x3. - DropDis; Rewrite minus_x_Sy in H0; [ DropGenBase; CSubst0Drop | XAuto ]. - IHC; EApply ty0_abst; XEAuto. -(* case 4.2.4: n < i, csubst0_both *) - Inversion H0; CSubst0Drop. - Rewrite <- H11 in H9; Rewrite <- H12 in H7; Rewrite <- H12 in H8; Rewrite <- H12 in H9; Rewrite <- H13 in H8; Rewrite <- H13; - Clear H0 H11 H12 H13 x0 x1 x3. - DropDis; Rewrite minus_x_Sy in H0; [ DropGenBase; CSubst0Drop | XAuto ]. - IHCT; IHC; EApply ty0_conv; - [ EApply ty0_lift | EApply ty0_abst - | EApply pc3_lift; Try EApply pc3_fsubst0; Try Apply H0 - ]; XEAuto. -(* case 4.2.4: n >= i *) - EApply ty0_abst; XEAuto. -(* case 4.3: fsubst0_both *) - Subst0GenBase; Rewrite H3 in H0; DropDis; Inversion H0. -(* case 5: ty0_bind *) - Intros until 7; XElim H5; Intros; Clear H4. -(* case 5.1: fsubst0_snd *) - Subst0GenBase; Rewrite H4; Clear H4 t6. -(* case 5.1.1: subst0 on left argument *) - Ty0Correct; IHT; IHTb1; Ty0Correct. - EApply ty0_conv; - [ EApply ty0_bind | EApply ty0_bind | EApply pc3_fsubst0 ]; XEAuto. -(* case 5.1.2: subst0 on right argument *) - IHTb2; Ty0Correct; EApply ty0_bind; XEAuto. -(* case 5.1.3: subst0 on both arguments *) - Ty0Correct; IHT; IHTb1; IHTTb; Ty0Correct. - EApply ty0_conv; - [ EApply ty0_bind | EApply ty0_bind | EApply pc3_fsubst0 ]; XEAuto. -(* case 5.2: fsubst0_fst *) - IHC; IHCb; Ty0Correct; EApply ty0_bind; XEAuto. -(* case 5.3: fsubst0_both *) - Subst0GenBase; Rewrite H4; Clear H4 t6. -(* case 5.3.1: subst0 on left argument *) - IHC; IHCb; Ty0Correct; Ty0Correct; IHCT; IHCTb1; Ty0Correct. - EApply ty0_conv; - [ EApply ty0_bind | EApply ty0_bind - | EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]; XEAuto. -(* case 5.3.2: subst0 on right argument *) - IHC; IHCTb2; Ty0Correct; EApply ty0_bind; XEAuto. -(* case 5.3.3: subst0 on both arguments *) - IHC; IHCb; Ty0Correct; Ty0Correct; IHCT; IHCTTb; Ty0Correct. - EApply ty0_conv; - [ EApply ty0_bind | EApply ty0_bind - | EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]; XEAuto. -(* case 6: ty0_appl *) - Intros until 5; XElim H3; Intros. -(* case 6.1: fsubst0_snd *) - Subst0GenBase; Rewrite H3; Clear H3 c1 c2 t t1 t2 t3. -(* case 6.1.1: subst0 on left argument *) - Ty0Correct; Ty0GenBase; IHT; Ty0Correct. - EApply ty0_conv; - [ EApply ty0_appl | EApply ty0_appl | EApply pc3_fsubst0 ]; XEAuto. -(* case 6.1.2: subst0 on right argument *) - IHT; EApply ty0_appl; XEAuto. -(* case 6.1.3: subst0 on both arguments *) - Ty0Correct; Ty0GenBase; Move H after H10; Ty0Correct; IHT; Clear H2; IHT. - EApply ty0_conv; - [ EApply ty0_appl | EApply ty0_appl | EApply pc3_fsubst0 ]; XEAuto. -(* case 6.2: fsubst0_fst *) - IHC; Clear H2; IHC; EApply ty0_appl; XEAuto. -(* case 6.3: fsubst0_both *) - Subst0GenBase; Rewrite H3; Clear H3 c1 c2 t t1 t2 t3. -(* case 6.3.1: subst0 on left argument *) - IHC; Ty0Correct; Ty0GenBase; Clear H2; IHC; IHCT. - EApply ty0_conv; - [ EApply ty0_appl | EApply ty0_appl - | EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]; XEAuto. -(* case 6.3.2: subst0 on right argument *) - IHCT; Clear H2; IHC; EApply ty0_appl; XEAuto. -(* case 6.3.3: subst0 on both arguments *) - IHC; Ty0Correct; Ty0GenBase; IHCT; Clear H2; IHC; Ty0Correct; IHCT. - EApply ty0_conv; - [ EApply ty0_appl | EApply ty0_appl - | EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]; XEAuto. -(* case 7: ty0_cast *) - Clear c1 t t1; Intros until 5; XElim H3; Intros; Clear c2 t3. -(* case 7.1: fsubst0_snd *) - Subst0GenBase; Rewrite H3; Clear H3 t4. -(* case 7.1.1: subst0 on left argument *) - IHT; EApply ty0_conv; - [ Idtac - | EApply ty0_cast; - [ EApply ty0_conv; [ Idtac | Idtac | Apply pc3_s; EApply pc3_fsubst0 ] - | Idtac ] - | EApply pc3_fsubst0 ]; XEAuto. -(* case 7.1.2: subst0 on right argument *) - IHT; EApply ty0_cast; XEAuto. -(* case 7.1.3: subst0 on both arguments *) - IHT; Clear H2; IHT. - EApply ty0_conv; - [ Idtac - | EApply ty0_cast; - [ EApply ty0_conv; [ Idtac | Idtac | Apply pc3_s; EApply pc3_fsubst0 ] - | Idtac ] - | EApply pc3_fsubst0 ]; XEAuto. -(* case 7.2: fsubst0_fst *) - IHC; Clear H2; IHC; EApply ty0_cast; XEAuto. -(* case 6.3: fsubst0_both *) - Subst0GenBase; Rewrite H3; Clear H3 t4. -(* case 7.3.1: subst0 on left argument *) - IHC; IHCT; Clear H2; IHC. - EApply ty0_conv; - [ Idtac - | EApply ty0_cast; - [ EApply ty0_conv; [ Idtac | Idtac | Apply pc3_s; EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ] - | Idtac ] - | EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]; XEAuto. -(* case 7.3.2: subst0 on right argument *) - IHCT; IHC; EApply ty0_cast; XEAuto. -(* case 7.3.3: subst0 on both arguments *) - IHC; IHCT; Clear H2; IHCT. - EApply ty0_conv; - [ Idtac - | EApply ty0_cast; - [ EApply ty0_conv; [ Idtac | Idtac | Apply pc3_s; EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ] - | Idtac ] - | EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]; XEAuto. - Qed. - - Theorem ty0_csubst0: (g:?; c1:?; t1,t2:?) (ty0 g c1 t1 t2) -> - (e:?; u:?; i:?) (drop i (0) c1 (CTail e (Bind Abbr) u)) -> - (c2:?) (wf0 g c2) -> (csubst0 i u c1 c2) -> - (ty0 g c2 t1 t2). - Intros; EApply ty0_fsubst0; XEAuto. - Qed. - - Theorem ty0_subst0: (g:?; c:?; t1,t:?) (ty0 g c t1 t) -> - (e:?; u:?; i:?) (drop i (0) c (CTail e (Bind Abbr) u)) -> - (t2:?) (subst0 i u t1 t2) -> (ty0 g c t2 t). - Intros; EApply ty0_fsubst0; XEAuto. - Qed. - - End ty0_fsubst0. - - Hints Resolve ty0_subst0 : ltlc. diff --git a/helm/www/lambdadelta/download/lambdadelta_1.tar.gz b/helm/www/lambdadelta/download/lambdadelta_1.tar.gz index 89e3231ec..17df0b09c 100644 Binary files a/helm/www/lambdadelta/download/lambdadelta_1.tar.gz and b/helm/www/lambdadelta/download/lambdadelta_1.tar.gz differ diff --git a/helm/www/lambdadelta/specification.html b/helm/www/lambdadelta/specification.html index 72bfee5ba..5ae4a8485 100644 --- a/helm/www/lambdadelta/specification.html +++ b/helm/www/lambdadelta/specification.html @@ -226,7 +226,7 @@
  • lambdadelta_1 for Coq 7.3.1 - (revised 2012-10). + (revised 2015-01). Source scripts.
    @@ -303,6 +303,6 @@

    -
    Last update: Mon, 05 Jan 2015 00:32:03 +0100
    +
    Last update: Sun, 11 Jan 2015 18:32:40 +0100
    diff --git a/helm/www/lambdadelta/web/home/specification.ldw.xml b/helm/www/lambdadelta/web/home/specification.ldw.xml index 2bab97a07..2206980bb 100644 --- a/helm/www/lambdadelta/web/home/specification.ldw.xml +++ b/helm/www/lambdadelta/web/home/specification.ldw.xml @@ -84,7 +84,7 @@ lambdadelta_1 for Coq 7.3.1 - (revised ). + (revised ). Source scripts.