Warning: this is an htmlized version!
The original is across this link,
and the conversion rules are here.
#######
#
# E-scripts on coq.
#
# Note 1: use the eev command (defined in eev.el) and the
# ee alias (in my .zshrc) to execute parts of this file.
# Executing this file as a whole makes no sense.
#
# Note 2: be VERY careful and make sure you understand what
# you're doing.
#
# Note 3: If you use a shell other than zsh things like |&
# and the for loops may not work.
#
# Note 4: I always run as root.
#
# Note 5: some parts are too old and don't work anymore. Some
# never worked.
#
# Note 6: the definitions for the find-xxxfile commands are on my
# .emacs.
#
# Note 7: if you see a strange command check my .zshrc -- it may
# be defined there as a function or an alias.
#
# Note 8: the sections without dates are always older than the
# sections with dates.
#
# This file is at <http://angg.twu.net/e/coq.e>
#           or at <http://angg.twu.net/e/coq.e.html>.
#        See also <http://angg.twu.net/emacs.html>,
#                 <http://angg.twu.net/.emacs[.html]>,
#                 <http://angg.twu.net/.zshrc[.html]>,
#                 <http://angg.twu.net/escripts.html>,
#             and <http://angg.twu.net/>.
#
#######



(fooi "find-coqv81w3m \"tutorial.html" "find-coqtutw3m \"")


# «.coq-deb-src»		(to "coq-deb-src")
# «.coq-8.2-deb-src»		(to "coq-8.2-deb-src")
# «.coq-doc-deb-src»		(to "coq-doc-deb-src")
# «.coq-doc»			(to "coq-doc")
# «.coq-tutorial»		(to "coq-tutorial")
# «.hevea-deb-src»		(to "hevea-deb-src")
# «.proofgeneral-deb-src»	(to "proofgeneral-deb-src")
# «.proofgeneral»		(to "proofgeneral")
# «.cis500»			(to "cis500")
# «.bertot-casteran»		(to "bertot-casteran")
# «.coq-art»			(to "coq-art")
# «.local-variables»		(to "local-variables")
# «.type_of»			(to "type_of")
# «.scopes»			(to "scopes")
# «.categories-in-coq»		(to "categories-in-coq")
# «.record-types»		(to "record-types")
# «.simple-proofs»		(to "simple-proofs")
# «.intro-apply-assumption-0»	(to "intro-apply-assumption-0")
# «.intro-apply-assumption»	(to "intro-apply-assumption")
# «.composition»		(to "composition")
# «.cut»			(to "cut")
# «.email-about-7-uples»	(to "email-about-7-uples")
# «.dependent-projections»	(to "dependent-projections")
# «.ab=1-implies-a=1»		(to "ab=1-implies-a=1")
# «.coq-mode»			(to "coq-mode")
# «.mailing-list»		(to "mailing-list")
# «.print-string»		(to "print-string")
# «.search»			(to "search")
# «.conjunction»		(to "conjunction")
# «.sections»			(to "sections")
# «.agda»			(to "agda")
# «.oficina»			(to "oficina")
# «.cpdt»			(to "cpdt")
# «.coq-in-a-hurry»		(to "coq-in-a-hurry")
# «.monoid»			(to "monoid")
# «.proofweb»			(to "proofweb")
# «.Locate»			(to "Locate")
# «.irc-channels»		(to "irc-channels")
# «.HOTT»			(to "HOTT")
# «.performant-CT»		(to "performant-CT")
# «.CS1-through-TT»		(to "CS1-through-TT")




# (find-status   "coq")
# (find-vldifile "coq.list")
# (find-udfile   "coq/")

apti coq coq-doc-html coq-doc-pdf

# (find-available "ledit")
# (find-available "cle")
# (find-available "cle" "Wrap any command-line driven tool with readline")

# The Archive of Formal Proofs
# http://afp.sourceforge.net/
# http://afp.sourceforge.net/entries/FOL-Fitting.shtml
# http://afp.sourceforge.net/entries/Category.shtml







#####
#
# coq (from the debian sources)
# 2008aug03
#
#####

# «coq-deb-src»  (to ".coq-deb-src")
# http://ftp.debian.org/debian/pool/main/c/coq/
# http://ftp.debian.org/debian/pool/main/c/coq/coq_8.1.pl3+dfsg-1.dsc
# http://ftp.debian.org/debian/pool/main/c/coq/coq_8.1.pl3+dfsg-1.diff.gz
# http://ftp.debian.org/debian/pool/main/c/coq/coq_8.1.pl3+dfsg.orig.tar.gz
#*
sudo apt-get build-dep coq

#*
rm -Rv ~/usrc/coq/
mkdir  ~/usrc/coq/
cd $S/http/ftp.debian.org/debian/pool/main/c/coq/
cp -v coq_8.1.pl3+dfsg* ~/usrc/coq/
cd     ~/usrc/coq/
dpkg-source -sn -x coq_8.1.pl3+dfsg-1.dsc
cd     ~/usrc/coq/coq-8.1.pl3+dfsg/
     dpkg-buildpackage -us -uc -b -rfakeroot     |& tee odb
# dpkg-buildpackage -d -us -uc -b -rfakeroot     |& tee odb

#*
# (find-fline "~/usrc/coq/")
* (eepitch-shell)
cd ~/usrc/coq/
sudo dpkg -i *.deb

#*
# (code-c-d "coq" "~/usrc/coq/coq-8.1.pl3+dfsg/")
# (find-coqfile "")
# (find-coqsh   "find")
# (find-coqfile "theories/")
# (find-coqfile "theories/Init/")
# (find-coqfile "theories/Init/Prelude.v")
# (find-coqfile "theories/Init/Notations.v")
# (find-coqfile "theories/Init/Logic.v")

# (find-status   "coq")
# (find-vldifile "coq.list")
# (find-udfile   "coq/")
# (find-status   "coqide")
# (find-vldifile "coqide.list")
# (find-udfile   "coqide/")
# (find-status   "coq-libs")
# (find-vldifile "coq-libs.list")
# (find-udfile   "coq-libs/")
# (find-udfile   "coq-libs/html/")

# (find-udw3m "coq-libs/html/index.html")
# (find-udw3m "coq-libs/html/Coq.Init.Prelude.html")

# (find-man "1 coqide.byte")
# (find-man "1 coqide")
# (find-man "1 coqide.opt")

# (find-man "1 coqc")
# (find-man "1 coq_makefile")
# (find-man "1 coqmktop")
# (find-man "1 coqtop")
# (find-man "1 coq-tex")
# (find-man "1 coqdep")
# (find-man "1 coqdoc")
# (find-man "1 coqtop.byte")
# (find-man "1 coqtop.opt")
# (find-man "1 coqwc")
# (find-man "1 gallina")
# (find-man "1 coq-interface.opt")
# (find-man "1 coq-interface")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
coqtop
Require Import Notations.
Require Import Datatypes.
Require Import Logic.
Unset Boxed Definitions.

Open Scope nat_scope.





#####
#
# coq 8.2 (from the debian sources - INCOMPLETE SCRIPT)
# 2009jul30
#
#####

# «coq-8.2-deb-src»  (to ".coq-8.2-deb-src")
# http://ftp.debian.org/debian/pool/main/c/coq/
# http://ftp.debian.org/debian/pool/main/c/coq/coq_8.2-1+dfsg-1.dsc
# http://ftp.debian.org/debian/pool/main/c/coq/coq_8.2-1+dfsg-1.diff.gz
# http://ftp.debian.org/debian/pool/main/c/coq/coq_8.2-1+dfsg.orig.tar.gz
# dpkg-checkbuilddeps: Unmet build dependencies:
#   dh-ocaml (>= 0.4.1)
#   ocaml-nox (>= 3.11.0-5)
#   camlp5 (>= 5.10-3)
#   liblablgtk2-ocaml-dev (>= 2.12.0-2)
#   hevea (>= 1.10-7)

# http://backports.org/debian/pool/main/d/dh-ocaml/
# http://backports.org/debian/pool/main/d/dh-ocaml/dh-ocaml_0.4.1~bpo50+1.dsc
# http://backports.org/debian/pool/main/d/dh-ocaml/dh-ocaml_0.4.1~bpo50+1.tar.gz

# http://ftp.de.debian.org/debian/pool/main/d/dh-ocaml/
# http://ftp.de.debian.org/debian/pool/main/d/dh-ocaml/dh-ocaml_0.5.0.dsc
# http://ftp.de.debian.org/debian/pool/main/d/dh-ocaml/dh-ocaml_0.5.0.tar.gz
# http://ftp.debian.org/debian/pool/main/o/ocaml/
# http://ftp.debian.org/debian/pool/main/o/ocaml/ocaml_3.11.1-2.dsc
# http://ftp.debian.org/debian/pool/main/o/ocaml/ocaml_3.11.1-2.diff.gz
# http://ftp.debian.org/debian/pool/main/o/ocaml/ocaml_3.11.1.orig.tar.gz
# http://ftp.de.debian.org/debian/pool/main/c/camlp5/
# http://ftp.de.debian.org/debian/pool/main/c/camlp5/camlp5_5.10-3.dsc
# http://ftp.de.debian.org/debian/pool/main/c/camlp5/camlp5_5.10-3.diff.gz
# http://ftp.de.debian.org/debian/pool/main/c/camlp5/camlp5_5.10.orig.tar.gz
# http://ftp.de.debian.org/debian/pool/main/l/lablgtk2/
# http://ftp.de.debian.org/debian/pool/main/l/lablgtk2/lablgtk2_2.12.0-2.dsc
# http://ftp.de.debian.org/debian/pool/main/l/lablgtk2/lablgtk2_2.12.0-2.diff.gz
# http://ftp.de.debian.org/debian/pool/main/l/lablgtk2/lablgtk2_2.12.0.orig.tar.gz
# http://ftp.de.debian.org/debian/pool/main/h/hevea/
# http://ftp.de.debian.org/debian/pool/main/h/hevea/hevea_1.10-7.dsc
# http://ftp.de.debian.org/debian/pool/main/h/hevea/hevea_1.10-7.diff.gz
# http://ftp.de.debian.org/debian/pool/main/h/hevea/hevea_1.10.orig.tar.gz

sudo apt-get build-dep ocaml-nox
sudo apt-get build-dep camlp5
sudo apt-get build-dep liblablgtk2-ocaml-dev
sudo apt-get build-dep hevea
apti docbook-xsl

#*
rm -Rv ~/usrc/dh-ocaml/
mkdir  ~/usrc/dh-ocaml/
cd $S/http/ftp.de.debian.org/debian/pool/main/d/dh-ocaml/
cp -v dh-ocaml_0.5.0* ~/usrc/dh-ocaml/
cd     ~/usrc/dh-ocaml/
dpkg-source -sn -x dh-ocaml_0.5.0.dsc
cd     ~/usrc/dh-ocaml/dh-ocaml-0.5.0/
dpkg-buildpackage -us -uc -b -rfakeroot     |& tee odb

#*
# (find-fline "~/usrc/dh-ocaml/")
* (eepitch-shell)
cd ~/usrc/dh-ocaml/
sudo dpkg -i *.deb

#*
rm -Rfv ~/usrc/ocaml/
mkdir   ~/usrc/ocaml/
cd $S/http/ftp.debian.org/debian/pool/main/o/ocaml/
cp -v ocaml_3.11.1* ~/usrc/ocaml/
cd     ~/usrc/ocaml/
dpkg-source -sn -x ocaml_3.11.1-2.dsc
cd     ~/usrc/ocaml/ocaml-3.11.1/
dpkg-buildpackage -us -uc -b -rfakeroot     |& tee odb

# (find-fline "~/usrc/ocaml/ocaml-3.11.1/")
# (find-fline "~/usrc/ocaml/ocaml-3.11.1/odb" "*** [camlp4opt] Error 2")

#*
# (find-fline "~/usrc/ocaml/")
* (eepitch-shell)
cd ~/usrc/ocaml/
sudo dpkg -i *.deb

#*
rm -Rv ~/usrc/camlp5/
mkdir  ~/usrc/camlp5/
cd $S/http/ftp.de.debian.org/debian/pool/main/c/camlp5/
cp -v camlp5_5.10* ~/usrc/camlp5/
cd     ~/usrc/camlp5/
dpkg-source -sn -x camlp5_5.10-3.dsc
cd     ~/usrc/camlp5/camlp5-5.10/
dpkg-buildpackage -us -uc -b -rfakeroot     |& tee odb

# (find-fline "~/usrc/camlp5/camlp5-5.10/odb")
#   Sorry: the compatibility with ocaml version "3.11.1"
#   is not yet implemented. Please report.
#
#   Configuration failed.
#   make: *** [debian/configure-stamp] Error 2
#   dpkg-buildpackage: failure: debian/rules build gave error exit status 2

#*
# (find-fline "~/usrc/camlp5/")
* (eepitch-shell)
cd ~/usrc/camlp5/
sudo dpkg -i *.deb

#*
#*



#*
rm -Rv ~/usrc/hevea/
mkdir  ~/usrc/hevea/
cd $S/http/ftp.de.debian.org/debian/pool/main/h/hevea/
cp -v hevea_1.10* ~/usrc/hevea/
cd     ~/usrc/hevea/
dpkg-source -sn -x hevea_1.10-7.dsc
cd     ~/usrc/hevea/hevea-1.10/
dpkg-buildpackage -us -uc -b -rfakeroot     |& tee odb

#*
# (find-fline "~/usrc/hevea/")
* (eepitch-shell)
cd ~/usrc/hevea/
sudo dpkg -i *.deb

#*

#*
rm -Rv ~/usrc/lablgtk2/
mkdir  ~/usrc/lablgtk2/
cd $S/http/ftp.de.debian.org/debian/pool/main/l/lablgtk2/
cp -v lablgtk2_2.12.0* ~/usrc/lablgtk2/
cd     ~/usrc/lablgtk2/
dpkg-source -sn -x lablgtk2_2.12.0-2.dsc
cd     ~/usrc/lablgtk2/lablgtk2-2.12.0/
dpkg-buildpackage -us -uc -b -rfakeroot     |& tee odb

#*
# (find-fline "~/usrc/lablgtk2/")
* (eepitch-shell)
cd ~/usrc/lablgtk2/
sudo dpkg -i *.deb

#*
# (code-c-d "camlp5" "~/usrc/camlp5/camlp5-5.10/")
# (find-camlp5file "")

#*
rm -Rv ~/usrc/coq/
mkdir  ~/usrc/coq/
cd $S/http/ftp.debian.org/debian/pool/main/c/coq/
cp -v coq_8.2* ~/usrc/coq/
cd     ~/usrc/coq/
dpkg-source -sn -x coq_8.2-1+dfsg-1.dsc
cd     ~/usrc/coq/coq-8.2-1+dfsg/
     dpkg-buildpackage -us -uc -b -rfakeroot     |& tee odb
# dpkg-buildpackage -d -us -uc -b -rfakeroot     |& tee odb

#*
# (find-fline "~/usrc/coq/")
* (eepitch-shell)
cd ~/usrc/coq/
sudo dpkg -i *.deb

#*
# (code-c-d "coq" "~/usrc/coq/coq-8.2-1+dfsg/")
# (find-coqfile "")






#####
#
# coq-doc (from the debian sources)
# 2008aug04
#
#####

# «coq-doc-deb-src»  (to ".coq-doc-deb-src")
# http://ftp.debian.org/debian/pool/non-free/c/coq-doc/
# http://ftp.debian.org/debian/pool/non-free/c/coq-doc/coq-doc_8.1-3.dsc
# http://ftp.debian.org/debian/pool/non-free/c/coq-doc/coq-doc_8.1-3.diff.gz
# http://ftp.debian.org/debian/pool/non-free/c/coq-doc/coq-doc_8.1.orig.tar.gz
#*
apti texlive texlive-base texlive-latex-extra texlive-math-extra texlive-lang-french texlive-humanities hevea coq
apti texlive texlive-base texlive-latex-extra texlive-math-extra texlive-lang-french hevea coq

#*
rm -Rv ~/usrc/coq-doc/
mkdir  ~/usrc/coq-doc/
cd $S/http/ftp.debian.org/debian/pool/non-free/c/coq-doc/
cp -v coq-doc_8.1* ~/usrc/coq-doc/
cd     ~/usrc/coq-doc/
dpkg-source -sn -x coq-doc_8.1-3.dsc
cd     ~/usrc/coq-doc/coq-doc-8.1/
# dpkg-buildpackage -us -uc -b -rfakeroot     |& tee odb
dpkg-buildpackage -d -us -uc -b -rfakeroot     |& tee odb

#*
# (find-fline "~/usrc/coq-doc/")
* (eepitch-shell)
cd ~/usrc/coq-doc/
sudo dpkg -i *.deb

#*
# (code-c-d "coq-doc" "~/usrc/coq-doc/coq-doc-8.1/")
# (find-coq-docfile "")





#####
#
# coq-doc
# 2008aug04
#
#####

# «coq-doc»  (to ".coq-doc")
# (find-status   "coq-doc")
# (find-vldifile "coq-doc.list")
# (find-udfile   "coq-doc/")
# (find-status   "coq-doc-pdf")
# (find-vldifile "coq-doc-pdf.list")
# (find-udfile   "coq-doc-pdf/")
# (find-status   "coq-doc-html")
# (find-LATEX "# (find-vldifile \"coq-doc-html.list\")")
# (find-LATEXdvi "# (find-vldifile \"coq-doc-html.list\")")
# (find-udfile   "coq-doc-html/")

# (code-c-d "coqdochtml" "/usr/share/doc/coq-doc-html/")
# (find-coqdocfile "")
# (find-coqdochtmlfile "")
# (find-coqdochtmlw3m "FAQ.v.html")
# (find-coqdochtmlw3m "RecTutorial.v.html")
# (find-coqdochtmlw3m "Tutorial.v.html")
# (find-coqrefw3m "menu.html")
# (find-coqrefw3m "toc.html")
# (find-coqrefw3m "biblio.html")
# (find-coqrefw3m "general-index.html")
# (find-coqrefw3m "tactic-index.html")
# (find-coqrefw3m "command-index.html")
# (find-coqrefw3m "error-index.html")

# (code-c-d "coqhtmlref" "/usr/share/doc/coq-doc-html/refman/")
# (find-coqreffile "")
# (find-coqrefw3m "toc.html")
# (find-coqrefw3m "Reference-Manual013.html" "Syntax extensions")

# (find-coqdochtmlw3m "Tutorial.v.html#htoc3")
# (find-coqhtmlrefw3m "refman/Reference-Manual015.html")
# (find-coqhtmlrefw3m "refman/Reference-Manual016.html" "coq-tex")

# (find-coqdochtmlw3m "Tutorial.v.html")

/usr/share/doc/coq-doc-pdf/Tutorial.v.pdf
/usr/share/doc/coq-doc-pdf/Reference-Manual.pdf
/usr/share/doc/coq-doc-pdf/FAQ.v.pdf
/usr/share/doc/coq-doc-pdf/RecTutorial.v.pdf

/usr/share/doc/coq-doc-pdf/Tutorial.v.pdf
(code-xpdf      "coqref" "/usr/share/doc/coq-doc-pdf/Reference-Manual.pdf")
(code-pdftotext "coqref" "/usr/share/doc/coq-doc-pdf/Reference-Manual.pdf")
;; (find-coqrefpage  13 "Contents")
;; (find-coqrefpage 333 "Global Index")
;; (find-coqreftext)

/usr/share/doc/coq-doc-pdf/FAQ.v.pdf
/usr/share/doc/coq-doc-pdf/RecTutorial.v.pdf






#####
#
# The Coq Tutorial
# 2008aug09
#
#####

# «coq-tutorial»  (to ".coq-tutorial")

*;; (find-coqtutw3m "#htoc3" "Declarations")
* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
Check O.
Section Declaration.
Variable n : nat.
Hypothesis Pos_n : (gt n 0).
Check gt.
Check (nat -> Prop).
Check gt n O.
Definition one := (S O).
Definition two : nat := S one.
Definition three : nat := S two.
Definition double (m:nat) := plus m m.
Definition add_n (m:nat) := plus m n.
Check (forall m:nat, gt m 0).
Reset Declaration.

*;; (find-coqtutw3m "#htoc5" "Minimal Logic")
* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
Section Minimal_Logic.
Variables A B C : Prop.
Check (A -> B).
Goal (A -> B -> C) -> (A -> B) -> A -> C.
intro H.
intros H' HA.
apply H.
exact HA.
apply H'.
assumption.
Save trivial_lemma.
Lemma distr_impl : (A -> B -> C) -> (A -> B) -> A -> C.
intros.
apply H; [ assumption | apply H0; assumption ].
Save.
Lemma distr_imp : (A -> B -> C) -> (A -> B) -> A -> C.
auto.
Abort.
Inspect 3.

*;; (find-coqtutw3m "#htoc7" "Conjunction")
* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
Section Foo_Conjunction.
Variables A B C : Prop.
Lemma and_commutative : A /\ B -> B /\ A.
intro.
elim H.
split.
Restart.
intro H; elim H; auto.
Qed.
Check conj.

*;; (find-coqtutw3m "#htoc8" "Disjunction")
Lemma or_commutative : A \/ B -> B \/ A.
intro H; elim H.
intro HA.
clear H.
right.
trivial.
auto.

*;; (find-coqtutw3m "#htoc9" "Tauto")
Restart.
tauto.
Qed.
Print or_commutative.
Lemma distr_and : A -> B /\ C -> (A -> B) /\ (A -> C).
tauto.
Qed.

*;; (find-coqtutw3m "#htoc10" "Classical reasoning")
* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
Section Foo_Classical.
Variables A B C : Prop.
Lemma Peirce : ((A -> B) -> A) -> A.
try tauto.
Abort.
Lemma NNPeirce : ~ ~ (((A -> B) -> A) -> A).
tauto.
Qed.
Require Import Classical.
Check NNPP.
Lemma Peirce : ((A -> B) -> A) -> A.
apply NNPP; tauto.
Qed.

*;; (find-coqtutw3m "#htoc10" "Scottish")
Section club.
Variables Scottish RedSocks WearKilt Married GoOutSunday : Prop.
Hypothesis rule1 : ~ Scottish -> RedSocks.
Hypothesis rule2 : WearKilt \/ ~ RedSocks.
Hypothesis rule3 : Married -> ~ GoOutSunday.
Hypothesis rule4 : GoOutSunday <-> Scottish.
Hypothesis rule5 : WearKilt -> Scottish /\ Married.
Hypothesis rule6 : Scottish -> WearKilt.
Lemma NoMember : False.
tauto.
Qed.
End club.
Check NoMember.



*;; (find-coqrefw3m "tutorial.html#htoc12" "Sections and signatures")
* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
Reset Initial.
Section Predicate_calculus.
Variable D : Set.
Variable R : D -> D -> Prop.
Section R_sym_trans.
Hypothesis R_symmetric : forall x y:D, R x y -> R y x.
Hypothesis R_transitive : forall x y z:D, R x y -> R y z -> R x z.
Lemma refl_if : forall x:D, (exists y, R x y) -> R x x.
Check ex.
intros x x_Rlinked.
intro y.

elim x_Rlinked.
intros y Rxy.
apply R_transitive with y.
assumption.
apply R_symmetric; assumption.
Qed.
End R_sym_trans.







#####
#
# hevea (from the debian sources)
# 2008aug04
#
#####

# «hevea-deb-src»  (to ".hevea-deb-src")
# http://ftp.debian.org/debian/pool/main/h/hevea/
# http://ftp.debian.org/debian/pool/main/h/hevea/hevea_1.10-5.dsc
# http://ftp.debian.org/debian/pool/main/h/hevea/hevea_1.10-5.diff.gz
# http://ftp.debian.org/debian/pool/main/h/hevea/hevea_1.10.orig.tar.gz
#*
rm -Rv ~/usrc/hevea/
mkdir  ~/usrc/hevea/
cd $S/http/ftp.debian.org/debian/pool/main/h/hevea/
cp -v hevea_1.10* ~/usrc/hevea/
cd     ~/usrc/hevea/
dpkg-source -sn -x hevea_1.10-5.dsc
cd     ~/usrc/hevea/hevea-1.10/
dpkg-buildpackage -us -uc -b -rfakeroot     |& tee odb

#*
# (find-fline "~/usrc/hevea/")
* (eepitch-shell)
cd ~/usrc/hevea/
sudo dpkg -i *.deb

#*
# (code-c-d "hevea" "~/usrc/hevea/hevea-1.10/")
# (find-heveafile "")




#####
#
# proofgeneral (from the debian sources)
# 2008aug04
#
#####

# «proofgeneral-deb-src»  (to ".proofgeneral-deb-src")
# http://ftp.debian.org/debian/pool/main/p/proofgeneral/
# http://ftp.debian.org/debian/pool/main/p/proofgeneral/proofgeneral_3.7-3.dsc
# http://ftp.debian.org/debian/pool/main/p/proofgeneral/proofgeneral_3.7-3.diff.gz
# http://ftp.debian.org/debian/pool/main/p/proofgeneral/proofgeneral_3.7.orig.tar.gz
#*
rm -Rv ~/usrc/proofgeneral/
mkdir  ~/usrc/proofgeneral/
cd $S/http/ftp.debian.org/debian/pool/main/p/proofgeneral/
cp -v proofgeneral_3.7* ~/usrc/proofgeneral/
cd     ~/usrc/proofgeneral/
dpkg-source -sn -x proofgeneral_3.7-3.dsc
cd     ~/usrc/proofgeneral/proofgeneral-3.7/
dpkg-buildpackage -us -uc -b -rfakeroot     |& tee odb

#*
# (find-fline "~/usrc/proofgeneral/")
* (eepitch-shell)
cd ~/usrc/proofgeneral/
# sudo dpkg -i *.deb
sudo dpkg -i {proofgeneral,proofgeneral-coq,proofgeneral-doc}_*.deb

#*
# (code-c-d "proofgeneral" "~/usrc/proofgeneral/proofgeneral-3.7/")
# (find-proofgeneralfile "debian/control")
# (find-proofgeneralfile "")




#####
#
# proofgeneral
# 2008aug04
#
#####

# «proofgeneral»  (to ".proofgeneral")
# (find-status   "proofgeneral")
# (find-vldifile "proofgeneral.list")
# (find-udfile   "proofgeneral/")
# (find-status   "proofgeneral-coq")
# (find-vldifile "proofgeneral-coq.list")
# (find-udfile   "proofgeneral-coq/")
# (find-status   "proofgeneral-doc")
# (find-vldifile "proofgeneral-doc.list")
# (find-udfile   "proofgeneral-doc/")

# (find-node "(PG-adapting)Top")
# (find-node "(ProofGeneral)Top")
# (find-node "(ProofGeneral)Quick start guide")
# (find-node "(ProofGeneral)Walkthrough example in Isabelle")
# (find-node "(ProofGeneral)Walkthrough example in Isabelle" "undo")
# (find-node "(ProofGeneral)Coq Proof General")

# (find-fline "/etc/emacs/site-start.d/50proofgeneral.el")
# (find-sitelispfile "proofgeneral/generic/proof-site.el")
# (find-sitelispfile "proofgeneral/generic/")
# (find-sitelispfile "proofgeneral/coq/")
# (find-sitelispfile "proofgeneral/coq/coq.el")

# http://proofgeneral.inf.ed.ac.uk/images/pg-coq-screenshot.png

(proofgeneral)
(find-file "/tmp/foo.v")




#####
#
# Benjamin C. Pierce's course on Prog Lang Foundations using Coq
# 2009jan25
#
#####

# «cis500»  (to ".cis500")
# Using a Proof Assistant to Teach Programming Language Foundations
# (or: Lambda, the Ultimate TA)
# http://lists.seas.upenn.edu/pipermail/types-list/2009/001324.html
# http://www.cis.upenn.edu/~bcpierce/papers/plcurriculum.pdf
# http://www.seas.upenn.edu/~cis500/cis500-s09/index.html
# http://www.seas.upenn.edu/~cis500/cis500-f07/index.html
# http://www.seas.upenn.edu/~cis500/cis500-s09/lectures/Basics.pdf
# http://www.seas.upenn.edu/~cis500/cis500-s09/lectures/Lists.pdf




#####
#
# Bertot/Castéran: Coq'Art
# 2009jun14
#
#####

# «bertot-casteran»  (to ".bertot-casteran")
# «coq-art»  (to ".coq-art")
# (find-LATEX "catsem.bib" "bib-Coq")
# (find-books "__comp/__comp.el" "coq")

# http://www.labri.fr/perso/casteran/CoqArt/index.html
# http://www.labri.fr/perso/casteran/CoqArt/coqart81.tar.gz
# http://www.labri.fr/perso/casteran/CoqArt/contents.html
#*
rm -Rv ~/usrc/CoqArtExos81/
tar -C ~/usrc/ -xvzf \
  $S/http/www.labri.fr/perso/casteran/CoqArt/coqart81.tar.gz
cd     ~/usrc/CoqArtExos81/

#*
# (code-c-d "coqart" "~/usrc/CoqArtExos81/")
# (find-coqartfile "")
# (find-coqartw3m "contents.html")

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)

# (find-coqartpage        17  "Contents")
# (find-coqartpage (+ 26   1) "1. A brief overview")
# (find-coqartfile "horizon/SRC/")

# (find-coqartpage (+ 26  13) "2. Types and expressions")
# (find-coqartfile "specprog/SRC/")
# (find-coqartfile "specprog/SRC/chap2.v")

# (find-coqartpage (+ 26  43) "3. Propositions and proofs")
# (find-coqartpage (+ 26  47) "Definition 8 (Goal).")
# (find-coqartpage (+ 26  47) "Definition 9 (Tactics).")
# (find-coqartfile "propproof/SRC/")
# (find-coqartfile "propproof/SRC/chap3.v")

# (find-coqartpage (+ 26  73) "4. Dependent products or Pandora's box")
# (find-coqartfile "depprod/SRC/")
# (find-coqartfile "depprod/SRC/chap4.v")

# (find-coqartpage (+ 26 105) "5. Everyday logic")
# (find-coqartfile "everyday/SRC/")
# (find-coqartfile "everyday/SRC/chap5.v")

# (find-coqartpage (+ 26 137) "6. Inductive data types")
# (find-coqartfile "structinduct/SRC/")
# (find-coqartfile "structinduct/SRC/chap6.v")

# (find-coqartpage (+ 26 187) "7. Tactics and automation")
# (find-coqartfile "autotac/SRC/")
# (find-coqartfile "autotac/SRC/chap7.v")

# (find-coqartpage (+ 26 211) "8. Inductive predicates")
# (find-coqartfile "inductive-prop-chap/SRC/")
# (find-coqartfile "inductive-prop-chap/SRC/chap8.v")

# (find-coqartpage (+ 26 251) "9. Functions and their specifications")
# (find-coqartfile "progav/SRC/")
# (find-coqartfile "progav/SRC/chap9.v")

# (find-coqartpage (+ 26 285) "10. Extraction and imperative programming")
# (find-coqartfile "extraction/SRC/")
# (find-coqartfile "extraction/SRC/chap10.v")

# (find-coqartpage (+ 26 309) "11. A case study")
# (find-coqartfile "searchtrees/SRC/")

# (find-coqartpage (+ 26 325) "12. The module system")
# (find-coqartfile "modules/SRC/")

# (find-coqartpage (+ 26 347) "13. Infinite objects and proofs")
# (find-coqartfile "co-inductifs/SRC/")

# (find-coqartpage (+ 26 377) "14. Foundations of inductive types")
# (find-coqartfile "induc-fond/SRC/")
# (find-coqartfile "induc-fond/SRC/chap14.v")

# (find-coqartpage        17  "Contents")

# (find-coqartpage (+ 26 407) "15. General recursion")
# (find-coqartfile "gen-rec/SRC/")
# (find-coqartfile "gen-rec/SRC/chap15.v")

# (find-coqartpage (+ 26 433) "16. Proof by reflection")
# (find-coqartfile "reflection/SRC/")
# (find-coqartfile "reflection/SRC/chap16.v")

# (find-coqartpage (+ 26 459) "Index")




#####
#
# local variables
# 2009jul30
#
#####

# «local-variables»  (to ".local-variables")
# (find-coqartpage (+ 26  13) "2. A brief overview")
# (find-coqartpage (+ 26  30) "2.3.2. Sections and local variables")
# (find-coqartfile "specprog/SRC/")
# (find-coqartfile "specprog/SRC/chap2.v")
# (find-coqartfile "specprog/SRC/chap2.v" "Section binomial_def.")

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
Require Export ZArith.
Require Export Arith.
Require Export Bool.

Open Scope Z_scope.
Section binomial_def.
  Variables a b:Z.
  Definition binomial z:Z := a*z + b.
  Section trinomial_def.
    Variable c : Z.
    Definition trinomial z:Z := (binomial z)*z + c.
  End trinomial_def.
End binomial_def.

Print binomial.
Print trinomial.




#####
#
# type_of (with thanks to rocketman/soupdragon)
# 2009jul30
#
#####

# «type_of»  (to ".type_of")
# (find-fline "~/LOGS/2009jul29.coq")

# (find-coqartpage (+ 26  73) "4. Dependent products or Pandora's box")
# (find-coqartpage (+ 26  88) "4.2.3.2. Implicit arguments")
# (find-coqartfile "depprod/SRC/")
# (find-coqartfile "depprod/SRC/chap4.v")

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
Require Export ZArith.
Require Export Arith.
Require Export Bool.

Definition type_of_ (T : Type) (t : T) := T.
Definition type_of  (T : Type) (t : T) := T.
Implicit Arguments type_of [T].
Print type_of_.
Print type_of.

Check type_of_.
Check type_of_ _ 2.
Check type_of.
Check type_of 2.

Reset type_of_.
Set Implicit Arguments.
Definition type_of  (T : Type) (t : T) := T.
Print type_of.

Definition two := 2.
Check two.
Parameter a : type_of two.
Check a.




#####
#
# Interpretation scopes
# 2009jul30
#
#####

# «scopes»  (to ".scopes")
# (find-coqrefw3m "general-index.html" "Interpretation scopes")
# (find-coqartpage (+ 26  14) "2.1.2. Interpretation scopes")
# (find-coqartfile "specprog/SRC/chap2.v")
# (find-coqrefw3m "Reference-Manual013.html#scopes")
# (find-coqrefw3m "Reference-Manual015.html#scopes")


* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
Require Export ZArith.
Require Export Arith.
Require Export Bool.
Check ((2%Z),(3%nat)).
Check (((2%Z),(3%nat)))%nat.




#####
#
# categories in Coq
# 2009jul29
#
#####

# «categories-in-coq»  (to ".categories-in-coq")

# (find-status   "coq")
# (find-vldifile "coq.list")
# (find-udfile   "coq/")

# (find-status   "coq-libs")
# (find-vldifile "coq-libs.list")
# (find-udfile   "coq-libs/")

# http://en.wikipedia.org/wiki/Coq
# http://www.lix.polytechnique.fr/cocorico/
# http://www.labri.fr/perso/casteran/CoqArt/coqart81.tar.gz

# (find-coqartpage        17  "Contents")
# (find-coqartpage (+ 26   1) "1. A Brief Overview")
# (find-coqartpage (+ 26 460) "Index")
# (find-coqarttext)


* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
Require Export ZArith.
Require Export Arith.
Require Export Bool.

Definition type_of (T : Type) (t : T) := T.
Implicit Arguments type_of [T].

Section Category_C.
  Variable C_0     : Type.
  Variable Hom_C   : C_0 -> C_0 -> Set.
  Variable id_C    : forall (A : C_0), Hom_C A A.
  Variable o_C     : forall (A B C : C_0) (g : Hom_C B C) (f : Hom_C A B), Hom_C A C.
                     Implicit Arguments o_C [A B C].
  Variable idL_C   : forall (A B : C_0) (f : Hom_C A B), (o_C (id_C _) f = f).
                     Implicit Arguments idL_C [A B].
  Variable idR_C   : forall (A B : C_0) (f : Hom_C A B), (o_C f (id_C _) = f).
                     Implicit Arguments idR_C [A B].
  Variable assoc_C : forall (A B C D : C_0)
                            (f : Hom_C A B) (g : Hom_C B C) (h : Hom_C C D),
                            (o_C h (o_C g f) = o_C (o_C h g) f).
                     Implicit Arguments assoc_C [A B C D].

  Definition C       := (C_0, Hom_C, id_C, o_C, idL_C, idR_C, assoc_C).
  Definition C_minus := (C_0, Hom_C, id_C, o_C).

  Definition Category      := type_of C.
  Definition Protocategory := type_of C_minus.

  Check assoc_C.
  Print assoc_C.
  Check C.
  Check Category.
  Print Category.

  Variable D : Category.
  Definition (D_0, Hom_D, id_D, o_D, idL_D, idR_D, assoc_D) := D.

  (* ... *)
  Check D.

  (*         ^
     Syntax error: [Prim.identref] expected after [def_token] (in [vernac:gallina])
  *)




#####
#
# Record types
# 2009jul30
#
#####

# «record-types»  (to ".record-types")
# (find-coqrefw3m "general-index.html" "Record,")
# (find-coqrefpage  47 "\n2.1 Record types")
# (find-coqreftext     "\n2.1 Record types")
# (find-coqfile "")
# (find-coqsh "find | sort")
# (find-coqfile "contrib/" "setoid_ring")
# (find-coqfile "theories/Arith/Mult.v")
# (find-coqfile "theories/Arith/")
# (find-coqfile "toplevel/record.ml")
# (find-coqfile "toplevel/record.mli")
# (find-coqfile "parsing/g_vernac.ml4" "record_token:")

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
Require Export ZArith.
Require Export Arith.
Require Export Bool.
Record Rat:Set := mkRat {
  sign : bool;
  top : nat;
  bottom : nat;
  Rat_bottom_cond : 0 <> bottom
}.
Print Rat.
Print mkRat.

Definition half := mkRat true 1 2 (O_S 1).
Check half.

Eval compute in half.(top).
Eval compute in half.(bottom).
Eval compute in half.(Rat_bottom_cond).

  (* The rest of this block is garbage *)


Reset Initial.
Check 2%Z.

# (find-coqartpage (+ 26 85) "Definition of polymorphic functions")
Definition twice : forall A:Set, (A->A)->A->A
  := fun A f a => f (f a).
Check forall (A B : Set)(a:A)(b:B),A*B.
Check (2,3).
Check 2.
Check Z.
Check Set.




#####
#
# Proving some simple theorems
# 2009jul31
#
#####

# «simple-proofs»  (to ".simple-proofs")
# (find-coqartpage (+ 26  43) "3. Propositions and proofs")
# (find-coqartpage (+ 26  48) "apply")
# (find-coqartpage (+ 26  58) "Exercise 3.2")
# (find-coqartfile "propproof/SRC/")
# (find-coqartfile "propproof/SRC/chap3.v")
# (find-coqartfile "propproof/SRC/simple_proofs.v")
# (find-coqartfile "propproof/SRC/simple_proofs.v" "weak_peirce")

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
* (load "~/COQ/dnc-0.el")
* (dnc-strings "(((P->Q)->P)->P)->Q ((P->Q)->P)->P (P->Q)->P (P->Q)->P' P->Q P")

Section simple_proofs.
 Variables P Q R S : Prop.
 Lemma weak_peirce : ((((P -> Q) -> P) -> P) -> Q) -> Q.
 Proof.
  intro (((P->Q)->P)->P)->Q.
  apply (((P->Q)->P)->P)->Q.
  intro   (P->Q)->P.
  apply   (P->Q)->P.
  intro    P.
  apply (((P->Q)->P)->P)->Q.
  intro   (P->Q)->P'.
  assumption.
  Show Tree.
 Qed.
End simple_proofs.

Reset simple_proofs.




#####
#
# The simplest tactics: intro, apply and assumption
# 2009oct27
#
#####

# «intro-apply-assumption-0»  (to ".intro-apply-assumption-0")

%*
% (eedn4a-bounded)
% (find-sh0 "cd ~/LATEX/ && dvips  -D 600 -P pk -o tmp.ps tmp.dvi")
% (find-sh0 "cd ~/LATEX/ && dvired -D 600 -P pk -o tmp.ps tmp.dvi")
% (find-pspage "~/LATEX/tmp.ps")

\def\vdashq{\begin{picture}(0,0)\put(5,4.5){\tiny?}\end{picture}\vdash}
\def\tactic#1#2{\text{\textsf{#1}: $#2$}}
%:*|-?*\vdashq *
%:*&*\land *

%:
%:     -----------------\tactic{assumption}{{p}':={p}}
%:     {p\_q}:P->Q,{q\_r}:Q->R,{p}:P|-?{p}':P
%:     -----------------\tactic{apply}{{q}:={p\_q}\;{p}'}
%:     {p\_q}:P->Q,{q\_r}:Q->R,{p}:P|-?{q}:Q
%:     -----------------\tactic{apply}{{r}:={q\_r}\;{q}}
%:     {p\_q}:P->Q,{q\_r}:Q->R,{p}:P|-?{r}:R
%:     -------------------\tactic{intro}{{p\_r}:={p}P.{r}}
%:     {p\_q}:P->Q,{q\_r}:Q->R|-?{p\_r}:P->R
%:    -----------------------\tactic{intro}{{q\_r\_\_p\_r}:={q\_r}(Q->R).{p\_r}}
%:    {p\_q}:P->Q|-?{q\_r\_\_p\_r}:(Q->R)->P->R
%:  ---------------------\tactic{intro}{{imp\_trans}:={p\_q}(P->Q).{q\_r\_\_p\_r}}
%:  |-?{imp\_trans}:(P->Q)->(Q->R)->P->R
%:
%:     ^imp_trans_1
%:
\noindent
$\ded{imp_trans_1}$

\msk

{\myttchars
% \footnotesize
% * (eepitch-coqtop)
% * (eepitch-kill)
% * (eepitch-coqtop)
\begin{verbatim}
Parameter P Q R : Prop.
Theorem imp_trans : (P->Q)->(Q->R)->P->R.
Proof.
  intros p_q q_r.
  intro           p.
  apply  q_r.
  apply  p_q.
  assumption.
Qed.
Print imp_trans.
\end{verbatim}
}

\bsk

%:
%:  ----\tactic{exact}{{p}:={proj1}\;{pq}}    ---\tactic{exact}{{q}:={proj2}\;{pq}}
%:  {pq}:P&Q|-?{p}:P                            {pq}:P&Q|-?{q}:Q
%:  ----------------------\tactic{split}{{qp}:={conj}\;{p}\;{q}}
%:  {pq}:P&Q|-?{qp}:Q&P
%:  ------------------------------\tactic{intro}{{and\_commutes}:={pq}(P&Q).{qp}}
%:  |-?{and\_commutes}:P&Q->Q&P
%:
%:  ^and_commutes_1
%:
\noindent
$\ded{and_commutes_1}$

\msk

{\myttchars
% \footnotesize
\begin{verbatim}
Lemma and_commutes : P /\ Q -> Q /\ P.
Proof.
  intro pq.
  split.
  exact (proj2 pq).
  exact (proj1 pq).
Qed.
Print and_commutes.
\end{verbatim}
}

%*

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
Parameters P Q R T : Prop.
Lemma and_commutes : P /\ Q -> Q /\ P.
Proof.
  intro pq.
  split.
  exact (proj2 pq).
  exact (proj1 pq).
Qed.
Print and_commutes.

# (find-coqartpage (+ 26  52)              "Lemma")
# (find-coqartfile "propproof/SRC/chap3.v" "Lemma apply_example")
# (find-coqartpage (+ 26  53)              "exact")

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
* (load "~/COQ/dnc-0.el")
* (dnc-strings "p|->p|->q p")
Parameter P Q R T : Prop.
Theorem delta : (P->P->Q)->P->Q.
Proof (fun p|->p|->q p => p|->p|->q p p).

* (dnc-strings "q|->r|->t p|->q")
Lemma apply_example : (Q->R->T)->(P->Q)->P->R->T.
Proof.
  intros q|->r|->t p|->q p r.
  apply  q|->r|->t.
  exact (p|->q p).
  assumption.
Qed.



#####
#
# The simplest tactics: intro, apply and assumption
# 2009aug01
#
#####

# «intro-apply-assumption»  (to ".intro-apply-assumption")
# (find-coqartpage (+ 26  48)              "imp_trans : (P->Q)->(Q->R)->P->R")
# (find-coqartfile "propproof/SRC/chap3.v" "imp_trans : (P->Q)->(Q->R)->P->R")
# (find-coqartfile "propproof/SRC/chap3.v" "imp_trans : (P->Q)->(Q->R)->P->R")
# (find-coqfile "")

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
* (load "~/COQ/dnc-0.el")
* (dnc-strings "(p|->q)|->(q|->r)|->p|->r p|->q q|->r p")
Parameter P Q R T : Prop.
Theorem imp_trans : (P->Q)->(Q->R)->P->R.
Proof.
  intros p|->q q|->r.
  intro                  p.
  apply  q|->r.
  apply  p|->q.
  assumption.
Qed.

%*
% (eedn4a-bounded)
% (find-sh0 "cd ~/LATEX/ && dvips  -D 300 -P pk -o tmp.ps tmp.dvi")
% (find-sh0 "cd ~/LATEX/ && dvired -D 300 -P pk -o tmp.ps tmp.dvi")
% (find-pspage "~/LATEX/tmp.ps")

\def\vdashq{\begin{picture}(0,0)\put(5,4.5){\tiny?}\end{picture}\vdash}
%:*|-?*\vdashq *

%:
%:      -----------------{assumption}
%:      p|->q,q|->r,p|-?p
%:      -----------------{apply}
%:      p|->q,q|->r,p|-?q
%:      -----------------{apply}
%:      p|->q,q|->r,p|-?r
%:     -------------------{intro}
%:     p|->q,q|->r|-?p|->r
%:    -----------------------{intro}
%:    p|->q|-?(q|->r)|->p|->r
%:  ----------------------------{intro}
%:  |-?(p|->q)|->(q|->r)|->p|->r
%:
%:     ^imp_trans_1
%:
$$\ded{imp_trans_1}$$

intro-apply-assumption

{\myttchars
\footnotesize
\begin{verbatim}
* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
* (load "~/COQ/dnc-0.el")
* (dnc-strings "(p|->q)|->(q|->r)|->p|->r p|->q q|->r p")
Parameter P Q R T : Prop.
Theorem imp_trans : (P->Q)->(Q->R)->P->R.
Proof.
  intros p|->q q|->r.
  intro                  p.
  apply  q|->r.
  apply  p|->q.
  assumption.
Qed.
\end{verbatim}
}

%*





#####
#
# Composition of tactics
# 2009aug09
#
#####

# «composition»  (to ".composition")
# (find-coqartpage (+ 26  62)              "Simple composition")
# (find-coqartfile "propproof/SRC/chap3.v" "Lemma compose_example")
# (find-coqrefpage 181 "\nSequence")
# (find-coqreftext     "\nSequence")

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
* (load "~/COQ/dnc-0.el")
* (dnc-strings "p->q->r")
Parameter P Q R T : Prop.
Theorem then_example_0 : P->Q->(P->Q->R)->R.
Proof.
  intros p q p->q->r.
  apply      p->q->r.
  exact p.
  exact q.
Qed.
Theorem then_example_1 : P->Q->(P->Q->R)->R.
Proof.
  intros p q p->q->r.
  apply      p->q->r; [exact p | exact q].
Qed.
Theorem then_example_2 : P->Q->(P->Q->R)->R.
Proof.
  intros p q p->q->r.
  apply      p->q->r; [assumption | assumption].
Qed.
Theorem then_example : P->Q->(P->Q->R)->R.
Proof.
  intros p q p->q->r.
  apply      p->q->r; assumption.
Qed.


# (find-coqartpage (+ 26  63)              "compose")
# (find-coqartfile "propproof/SRC/chap3.v" "Lemma compose_example")

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
* (load "~/COQ/dnc-0.el")
* (dnc-strings "p->q->r p->q")
Parameter P Q R T : Prop.
Lemma compose_example : (P->Q->R)->(P->Q)->(P->R).
Proof.
  intros p->q->r p->q p.
  apply  p->q->r; [assumption | apply p->q; assumption].
Qed.




#####
#
# The "cut" tactic
# 2009aug09
#
#####

# «cut»  (to ".cut")
# (find-coqartpage (+ 26  68)              "cut")
# (find-coqartfile "propproof/SRC/chap3.v" "Section section_for_cut_example.")
# (find-coqrefpage 141 "3. cut form")
# (find-coqrefpage 139 "8.3.6     apply term")
# (find-coqreftext     "8.3.6     apply term")
# (find-coqrefpage 141 "8.3.8      assert")
# (find-coqreftext     "8.3.8      assert")
# (find-coqreftext     "3. cut form")

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
* (load "~/COQ/dnc-0.el")
* (dnc-strings "_ p->q q->r (p->r)->t->q (p->r)->t p->r")
Parameter P Q R T : Prop.
Section section_for_cut_example.
  Hypotheses (p->q : P->Q)
             (q->r : Q->R)
             ((p->r)->t->q : (P->R)->T->Q)
             ((p->r)->t    : (P->R)->T).
  Lemma cut_example_0 : Q.
  Proof.
    cut    (P->R).
    intro  p->r.
    apply (p->r)->t->q.
    exact  p->r.
    apply (p->r)->t.
    exact  p->r.
    intro  p.
    apply q->r.
    apply p->q.
    exact p.
  Qed.
  Lemma cut_example_1 : Q.
  Proof.
    cut    (P->R).
    intro  p->r.
    apply (p->r)->t->q; [exact p->r | apply (p->r)->t; exact p->r].
    intro p; apply q->r; apply p->q; exact p.
  Qed.
  Lemma cut_example_e : Q.
  Proof (let p->r :=
           fun (p:P) => q->r (p->q p) in
              (p->r)->t->q p->r ((p->r)->t p->r)).
  Print cut_example_0.
  Print cut_example_1.
  Print cut_example_e.
End section_for_cut_example.


%*
% (eedn4a-bounded)
% (find-sh0 "cd ~/LATEX/ && dvips  -D 600 -P pk -o tmp.ps tmp.dvi")
% (find-sh0 "cd ~/LATEX/ && dvired -D 600 -P pk -o tmp.ps tmp.dvi")
% (find-pspage "~/LATEX/tmp.ps")

%:
%:  [P]^6  [P->Q]^1                     [P->R]^5  [(P->R)->T]^4
%:  ---------------                      --------------------
%:         Q        [Q->R]^2   [P->R]^5          T             [(P->R)->T->Q]^3
%:         -----------------   ------------------------------------------------
%:               R               Q
%:             ----6         ---------5
%:             P->R          (P->R)->Q
%:             -----------------------
%:                   Q
%:  ---------------------------------------------1,2,3,4
%:  (P->Q)->(Q->R)->((P->R)->T->Q)->((P->R)->T)->Q
%:
%:          ^foo
%:
$$\footnotesize \ded{foo}$$

%*



* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
* (load "~/COQ/dnc-0.el")
* (dnc-strings "_ ((p->q)->q)->q p->q")
Parameter P Q R T : Prop.
Lemma triple_impl2 : (((P->Q)->Q)->Q)->P->Q.
Proof.
  auto.
Qed.
Print triple_impl2.
Lemma triple_imple : (((P->Q)->Q)->Q)->P->Q.
Proof (fun (H : ((P->Q)->Q)->Q) (H0 : P) =>
         H (fun H1 : P->Q =>
           H (fun _ : P->Q =>
             H (fun _ : P->Q =>
               H1 H0))))
       : (((P->Q)->Q)->Q)->P->Q .
Print triple_imple.
Lemma triple_impld : (((P->Q)->Q)->Q)->P->Q.
Proof (fun (((p->q)->q)->q:((P->Q)->Q)->Q) (p:P) =>
            ((p->q)->q)->q (fun p->q:P->Q =>
            ((p->q)->q)->q (fun _:P->Q =>
            ((p->q)->q)->q (fun _:P->Q =>
              p->q p))))
       : (((P->Q)->Q)->Q)->P->Q .
Print triple_impld.

%*
% (eedn4a-bounded)
% (find-sh0 "cd ~/LATEX/ && dvips  -D 300 -P pk -o tmp.ps tmp.dvi")
% (find-sh0 "cd ~/LATEX/ && dvired -D 300 -P pk -o tmp.ps tmp.dvi")
% (find-pspage "~/LATEX/tmp.ps")

%:   [P]^2  [P->Q]^4
%:   ---------------
%:        Q
%:   ---------5
%:   (P->Q)->Q   [((P->Q)->Q)->Q]^1
%:   --------------------------
%:             Q
%:         ---------4
%:         (P->Q)->Q    [((P->Q)->Q)->Q]^1
%:         ---------------------------
%:                       Q
%:                  ---------3
%:                  (P->Q)->Q    [((P->Q)->Q)->Q]^1
%:                  ---------------------------
%:                              Q
%:                            ----2
%:                            P->Q
%:                     ----------------------1
%:                     (((P->Q)->Q)->Q)->P->Q
%:
%:                     ^triple_impl_auto
%:
$$\footnotesize
  \ded{triple_impl_auto}
$$

%*












#####
#
# E-mail about 7-uples to the Coq-Club mailing list
# 2009aug01
#
#####

# «email-about-7-uples»  (to ".email-about-7-uples")
# http://pauillac.inria.fr/pipermail/coq-club/2009/005078.html

Hello list,

this is probably a basic question (I'm a newbie) but anyway, here it
goes... If abcdefg is a 7-uple - with a complex dependent type - is
there a way to extract all its components at once? Something like this
would be ideal,

  Definition (a, b, c, d, e, f, g) := abcdefg.

but this is not accepted...

Let me explain how I arrived at this problem. I am trying to use Coq
to formalize a certain notation that I have been using for years for
doing constructions and proofs in Category Theory, and I tried to do
this:

  (* ------ snip, snip ------ *)

  Definition type_of (T : Type) (t : T) := T.
  Implicit Arguments type_of [T].

  Section Categories.
    Variable C_0     : Type.
    Variable Hom_C   : C_0 -> C_0 -> Set.
    Variable id_C    : forall (A : C_0), Hom_C A A.
    Variable o_C     : forall (A B C : C_0) (g : Hom_C B C) (f : Hom_C A B),
                              Hom_C A C.
                       Implicit Arguments o_C [A B C].
    Variable idL_C   : forall (A B : C_0) (f : Hom_C A B),
                              (o_C (id_C _) f = f).
                       Implicit Arguments idL_C [A B].
    Variable idR_C   : forall (A B : C_0) (f : Hom_C A B),
                              (o_C f (id_C _) = f).
                       Implicit Arguments idR_C [A B].
    Variable assoc_C : forall (A B C D : C_0)
                              (f : Hom_C A B) (g : Hom_C B C) (h : Hom_C C D),
                              (o_C h (o_C g f) = o_C (o_C h g) f).
                       Implicit Arguments assoc_C [A B C D].

    Definition C       := (C_0, Hom_C, id_C, o_C, idL_C, idR_C, assoc_C).
    Definition C_minus := (C_0, Hom_C, id_C, o_C).

    Definition Category      := type_of C.
    Definition Protocategory := type_of C_minus.

    Variable   D : Category.
    Definition (D_0, Hom_D, id_D, o_D, idL_D, idR_D, assoc_D) := D.  (* <- *)
    Definition D_minus := (C_0, Hom_C, id_C, o_C).

    (* etc... *)
  end Categories.

  (* ------ snip, snip ------ *)

It would be fantastic if the "(* <- *)" line above would be accepted,
but it isn't... Any hints, suggestions, pointers, workarounds (using
records, maybe)?...

Thanks in advance,
  Eduardo Ochs
  eduardoochs@gmail.com
  http://angg.twu.net/




#####
#
# Dependent projections (an attempt to solve the problem above)
# 2009aug01
#
#####

# «dependent-projections»  (to ".dependent-projections")

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
Section foo.
  Variable A : Set.
  Variable a : A.
  Variable B : forall (a:A), Set.
  Variable b : B a.
  Variable C : forall (a:A) (b:B a), Set.
  Variable c : C a b.
  Variable D : forall (a:A) (b:B a) (c:C a b), Set.
  Variable d : D a b c.
  Check d.
  Check (a,b,c,d).
End foo.

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
Section foo.
  Variable A : Set.
  Variable B : forall (a:A), Set.
  Variable C : forall (a:A) (b:B a), Set.
  Variable D : forall (a:A) (b:B a) (c:C a b), Set.
  Section abcd.
    Variable a : A.
    Variable b : B a.
    Variable c : C a b.
    Variable d : D a b c.
    Check d.
    Check (a,b,c,d).
    Record ABCD' : Set := mkabcd' {
      a' : A; b' : B a'; c' : C a' b'; d' : D a' b' c'
    }.
    Check a'.
    Check d'.
  End abcd.
  Record ABCD : Set := mkabcd {
    a : A; b : B a; c : C a b; d : D a b c
  }.
  Check a.
  Check d.
End foo.

# (find-coqrefw3m "Reference-Manual004.html#Letin")


Coq < Record Rat : Set := mkRat
Coq <   {sign : bool;
Coq <    top : nat;
Coq <    bottom : nat;
Coq <    Rat_bottom_cond : 0 <> bottom;
Coq <    Rat_irred_cond :
Coq <     forall x y z:nat, (x * y) = top /\ (x * z) = bottom -> x = 1}.
Rat is defined
Rat_rect is defined
Rat_ind is defined
Rat_rec is defined
sign is defined
top is defined
bottom is defined
Rat_bottom_cond is defined
Rat_irred_cond is defined








#####
#
# Proving that ab=1 -> a=1 (in Nat; just the beginning)
# 2009jul30
#
#####

# «ab=1-implies-a=1»  (to ".ab=1-implies-a=1")
# (find-coqrefpage  47 "\n2.1 Record types")
# (find-coqreftext     "\n2.1 Record types")
# (find-coqfile "")
# (find-coqfile "theories/Arith/")
# (find-coqfile "theories/Arith/Mult.v" "mult_lt_compat_r")
# (find-coqfile "theories/Arith/Compare.v")

# (find-angg "COQ/dnc-0.el")
# (load    "~/COQ/dnc-0.el")
;;
;;                                           [a>1]^2  [b>0]^1  [b>0]^1
;;                                           ----------------  ------- 
;;            [a<1]^2              [b=0]^1        ab>b          b>=1   
;;            -------              -------        ------------------   
;;              a=0                 ab=0               ab>1            
;;              ----    --------    -----             -----            
;;   a~=1       ab=0    b=0\/b>0    ab~=1             ab~=1            
;;  -------    -----    -----------------------------------            
;;  a<1\/a>1   ab~=1                ab~=1
;;  -------------------------------------
;;                     ab~=1
;;

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
Require Export ZArith.
Require Export Arith.
Require Export Bool.




* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
Require Export Omega.
Open Scope nat_scope.

Theorem foo : forall a b : nat, b > 1 -> a <= a * b.
  intros. omega.








#####
#
# Coq mode for Emacs
# 2009jul29
#
#####

# «coq-mode»  (to ".coq-mode")
# (find-fline "/etc/emacs/site-start.d/50coq.el")
# (find-fline "/usr/share/emacs/site-lisp/coq/coq.el")
# (find-fline "/usr/share/emacs/22.2/lisp/obsolete/hilit19.el.gz")
# (load       "/usr/share/emacs/22.2/lisp/obsolete/hilit19.el.gz")
# (find-coqfile "theories/Init/Notations.v")

# No font-locking on emacs23... 8-\

# http://web.math.unifi.it/~maggesi/mechanized/emacs/coq.el
# http://web.math.unifi.it/~maggesi/mechanized/emacs/inferior-coq.el
# http://web.math.unifi.it/users/maggesi/mechanized/emacs/coq.el





#####
#
# Mailing list and links
# 2009aug01
#
#####

# «mailing-list»  (to ".mailing-list")
# http://pauillac.inria.fr/mailman/listinfo/coq-club
# http://pauillac.inria.fr/pipermail/coq-club/
# http://www.reddit.com/r/dependent_types
# http://www.reddit.com/r/dependent_types/comments/95efw/has_anyone_studied_this_type_theory/
# http://www.reddit.com/r/Coq
# http://www.cs.chalmers.se/Cs/Research/Logic/TypesSS05/Extra/bertot_coq.pdf
# http://www.seas.upenn.edu/~cis500/cis500-f07/schedule.html




#####
#
# Print string
# 2009aug05
#
#####

# «print-string»  (to ".print-string")
# http://pauillac.inria.fr/pipermail/coq-club/2009/005090.html





#####
#
# Search
# 2009aug09
#
#####

# «search»  (to ".search")
# (find-coqrefw3m "general-index.html" "Search")
# (find-coqrefw3m "general-index.html" "SearchAbout")
# (find-coqrefw3m "general-index.html" "SearchPattern")
# (find-coqtut3w3m "#htoc30")

# (find-coqhurrypage 1)
# (find-coqhurrytext)

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
SearchAbout and.
SearchAbout   (_ /\ _ -> _).
SearchPattern (_ /\ _ -> _).
SearchPattern (_ /\ _ -> _).
  (* User error: the pattern is not simple enough *)
SearchPattern (_ = _).




#####
#
# Conjunction
# 2009aug09
#
#####

# «conjunction»  (to ".conjunction")
# (find-coqrefw3m "general-index.html")
# (find-coqrefw3m "toc.html")
# (find-coqrefw3m "tactic-index.html" "intuition")
# (find-coqrefw3m "Reference-Manual010.html#intuition")
# (find-coqrefw3m "Reference-Manual011.html#intuition")
# (find-coqreftext           "8.12.4 intuition tactic")

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
* (load "~/COQ/dnc-0.el")
* (dnc-strings "_ p&q q&p")
Parameters P Q R T : Prop.
Lemma and_commutes : P /\ Q -> Q /\ P.
Proof.
  intuition.
Qed.
Print and_commutes.


# (find-coqrefpage 333)
# (find-coqrefpage 341)
# (find-coqrefpage 149 "elim")
# (find-coqrefpage 146)
# (find-coqrefpage 148 "3. split")
# (find-coqreftext     "3. split")
# (find-coqtut1w3m "#htoc7" "Conjunction")
# (find-coqtuttext  "1.3.1   Conjunction")
# (find-coqtut1w3m "#htoc7" "apply conj")
# (find-coqtuttext          "apply conj")

# (find-coqartpage (+ 26 121)              "5.2.4 Conjunction and disjunction")
# (find-coqartfile "everyday/SRC/chap5.v")
# (find-coqartfile "everyday/SRC/chap5.v" "Lemma and_commutes")
# (find-coqlibdocw3m "Coq.Init.Logic.html")

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
Parameters P Q R T : Prop.
Lemma and_commutes : P /\ Q -> Q /\ P.
Proof.
  intro pq.
  split.
  exact (proj2 pq).
  exact (proj1 pq).
Qed.
Print and_commutes.

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
* (load "~/COQ/dnc-0.el")
* (dnc-strings "_ p&q q&p")
Parameters P Q R T : Prop.
Lemma and_commutes : P /\ Q -> Q /\ P.
Proof.
  intro p&q.
  split.
  exact (proj2 p&q).
  exact (proj1 p&q).
Qed.
Print and_commutes.


* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
* (load "~/COQ/dnc-0.el")
* (dnc-strings "_ p->q p->r q&r")
Parameter P Q R T : Prop.
Theorem conj_foo : P -> (P -> Q) -> (P -> R) -> Q /\ R.
Proof.
  intros p p->q p->r.
  split.
  exact (p->q p).
  exact (p->r p).
Qed.

Section Foo_Conjunction.
Variables A B C : Prop.
Lemma and_commutative : A /\ B -> B /\ A.
intro.
elim H.
split.
Restart.
intro H; elim H; auto.
Qed.
Check conj.

*;; (find-coqtutw3m "#htoc8" "Disjunction")
Lemma or_commutative : A \/ B -> B \/ A.
intro H; elim H.
intro HA.
clear H.
right.
trivial.
auto.




#####
#
# Sections
# 2009aug09
#
#####

# «sections»  (to ".sections")

# (find-coqrefpage 337 "let")
# (find-coqrefpage 48 "let")
# (find-coqrefpage 49 "dot notation")
# (find-coqrefpage 50 "let ... in ...")
# (find-coqreftext 337 "let")

# Two kinds of sanity checks:
#   typeof ab = AB
#   AB = record bleh

# (find-coqrefpage 55 "Sections")
# (find-coqreftext)
# (find-coqreftext "2.4 Section mechanism")
# (find-coqreftext "\n2.4 Section mechanism")
# (find-coqreftext 337 "let")

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
Section s1.
Variables x y : nat.
Let y' := y.
Definition x' := S x.
Definition x'' := x' + y'.
Print x'.
End s1.
Print x'.
Print x''.




#####
#
# Agda
# 2009sep23
#
#####

# «agda»  (to ".agda")
# (find-es "agda")
# http://gelisam.blogspot.com/2009/09/samuels-really-straightforward-proof-of.html
# http://wiki.portal.chalmers.se/agda/agda.php
# http://www.cs.swan.ac.uk/~csetzer/lectures/intertheo/07/interactiveTheoremProvingForAgdaUsers.html

# http://ftp.de.debian.org/debian/pool/main/a/agda/
# http://ftp.de.debian.org/debian/pool/main/a/agda/agda_2.2.4+dfsg-1.dsc
# http://ftp.de.debian.org/debian/pool/main/a/agda/agda_2.2.4+dfsg-1.diff.gz
# http://ftp.de.debian.org/debian/pool/main/a/agda/agda_2.2.4+dfsg.orig.tar.gz
# http://ftp.de.debian.org/debian/pool/main/a/agda-bin/
# http://ftp.de.debian.org/debian/pool/main/a/agda-bin/agda-bin_2.2.4-1.dsc
# http://ftp.de.debian.org/debian/pool/main/a/agda-bin/agda-bin_2.2.4-1.diff.gz
# http://ftp.de.debian.org/debian/pool/main/a/agda-bin/agda-bin_2.2.4.orig.tar.gz

# http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Main.Download
# http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Main.InstallationOfAgdaFromSourceForNonprogrammers
# http://www.cs.swan.ac.uk/~csetzer/othersoftware/agda2/agda2installation.html

# (find-es "eev" "apt-ftparchive")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv /tmp/ag/
mkdir  /tmp/ag/
cd     /tmp/ag/
cp -v $S/http/ftp.de.debian.org/debian/pool/main/a/agda-bin/* .
cp -v $S/http/ftp.de.debian.org/debian/pool/main/a/agda/* .

mkdir -p dists/./main/source/
laf
apt-ftparchive sources .
apt-ftparchive sources . \
  | gzip -c9 > dists/./main/source/Sources.gz

# (find-fline "/etc/apt/sources.list")
# deb-src file:///tmp/ag . main

sudo apt-get install
sudo apt-get build-dep agda




# Featherweight Java:
# http://pauillac.inria.fr/pipermail/coq-club/2009/005115.html
# (find-fline "~/tmp/featherj.zip")

# http://users.dimi.uniud.it/~marino.miculan/data/downloads/TYPES02.pdf


# (find-fline "~/LOGS/2009aug09.coq")

Ltac abstr_proofs :=
match goal with
| |- context [?e] =>
      match type of e with
      | ?T =>
          match type of T with
          | Prop =>
              let H := fresh "prf" in
              set (H := e) in |- *; generalize H; clear H
          end
      end
end


http://packages.debian.org/source/sid/ssreflect

http://homepages.inf.ed.ac.uk/ratkey/parametricity/





#####
#
# Notas para a oficina de assistentes de provas
# 2009oct23
#
#####

# «oficina»  (to ".oficina")
# (find-efunction 'eev-oficina-settings)

* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)

Parameter P Q R : Prop.
Theorem imp_trans : (P->Q)->(Q->R)->P->R.
Proof.
  intros p_q q_r.
  intro           p.
  apply  q_r.
  apply  p_q.
  assumption.
Qed.
Print imp_trans.

Lemma and_commutes : P /\ Q -> Q /\ P.
Proof.
  intro pq.
  split.
  exact (proj2 pq).
  exact (proj1 pq).
Qed.
Print and_commutes.




#####
#
# Adam Chlipala's "Certified Programming with Dependent Types" book
# 2010jan13
#
#####

# «cpdt»  (to ".cpdt")
# http://adam.chlipala.net/
# http://adam.chlipala.net/cpdt/
# http://adam.chlipala.net/cpdt/html/toc.html
# http://adam.chlipala.net/cpdt/html/Intro.html
# http://adam.chlipala.net/cpdt/html/StackMachine.html



#####
#
# Coq in a hurry
# 2010feb25
#
#####

# «coq-in-a-hurry»  (to ".coq-in-a-hurry")
# http://cel.archives-ouvertes.fr/inria-00001173/
# http://cel.archives-ouvertes.fr/docs/00/45/91/39/PDF/coq-hurry.pdf

(code-xpdf      "coqinahurry" "$S/http/cel.archives-ouvertes.fr/docs/00/45/91/39/PDF/coq-hurry.pdf")
(code-pdftotext "coqinahurry" "$S/http/cel.archives-ouvertes.fr/docs/00/45/91/39/PDF/coq-hurry.pdf")
;; (find-coqinahurrypage      1  "Contents")
;; (find-coqinahurrypage (+ 1 1) "Index")
;; (find-coqinahurrytext "")




#####
#
# Monoid (ideas - that I don't understand - from the Coq-club list)
# 2010apr14
#
#####

# «monoid»  (to ".monoid")
# http://article.gmane.org/gmane.science.mathematics.logic.coq.club/4796
# http://article.gmane.org/gmane.science.mathematics.logic.coq.club/4797
# http://article.gmane.org/gmane.science.mathematics.logic.coq.club/4799

Class Monoid (Carrier:Set)(mult:Carrier->Carrier->Carrier) :=
{ neutral : Carrier
; identL  : forall a,     (mult a neutral) = a
; identR  : forall a,     (mult neutral a) = a
; assoc   : forall a b c, (mult a (mult b c)) = (mult (mult a b) c)
}.


Class SemiGroupOp A := sg_op: A -> A -> A.
Infix "&" := sg_op (at level 50, left associativity).

[
It would be nicer to write:
Class SemiGroupOp A := (&) : A -> A -> A.
Like in haskell.
]

and then:
Context A {e: Equiv A}.

Class Setoid: Prop := setoid_eq:> Equivalence (@equiv A e).

Class SemiGroup {op: SemiGroupOp A}: Prop :=
   { sg_setoid:> Setoid
   ; sg_ass:> Associative sg_op
   ; sg_mor:> Proper (e ==> e ==> e)%signature sg_op }.

 Class Monoid {op: SemiGroupOp A} {unit: MonoidUnit A}: Prop :=
   { monoid_semigroup:> SemiGroup
   ; monoid_left_id:> LeftIdentity sg_op mon_unit
   ; monoid_right_id:> RightIdentity sg_op mon_unit }.

 Class Group {op: SemiGroupOp A} {unit: MonoidUnit A} {inv: GroupInv
A}: Prop :=
   { group_monoid:> Monoid
   ; inv_proper:> Proper (e ==> e) inv
   ; ginv_l: `(- x & x = mon_unit)
   ; ginv_r: `(x & - x = mon_unit) }.




#####
#
# ProofWeb
# 2010jun26
#
#####

# «proofweb»  (to ".proofweb")
# (find-angg ".emacs.papers" "proofweb")




#####
#
# Locate
# 2013jan01
#
#####

# «Locate» (to ".Locate")
* (eepitch-coqtop)
* (eepitch-kill)
* (eepitch-coqtop)
Locate "exists2".
# Search "exists2".
# Check "exists2".

# will describe what the notation means. It is defined in
# http://coq.inria.fr/V8.4/stdlib/Coq.Init.Logic.html and it should
# also hint you toward your second question.




#####
#
# IRC channels
# 2013jul12
#
#####

# «irc-channels» (to ".irc-channels")

Hello,

Just a quick note that there is now a channel on the freenode IRC
network for real time discussion of Homotopy Type Theory and related
topics.

The channel is ##hott (please note the double hash!) on
irc://chat.freenode.net and currently has around 20 users and growing.

For reference, the freenode IRC network has an active community of
type theory enthusiasts, functional programmers, and mathematicians in
various channels, including ##categorytheory, ##logic, #agda, #coq,
#epigram, #haskell, #idris, #ocaml, and others. Across these channels
there are now upwards of 1000 users.

One can find more information on the freenode IRC network, including
software or web-based IRC clients, at https://freenode.net

We are hoping the ##hott channel can be a useful resource for
interested parties. Please feel free to repost this information
elsewhere.

(find-freenode "##hott")

(find-freenode "##categorytheory")
(find-freenode "##logic")
(find-freenode "#agda")
(find-freenode "#coq")
(find-freenode "#epigram")
(find-freenode "#haskell")
(find-freenode "#idris")
(find-freenode "#ocaml")




#####
#
# HOTT
# 2013aug01
#
#####

# «HOTT» (to ".HOTT")

http://www.homotopytypetheory.org/book
http://homotopytypetheory.org/2013/06/20/the-hott-book/
http://golem.ph.utexas.edu/category/2013/06/the_hott_book.html
http://math.andrej.com/2013/06/20/the-hott-book/
https://github.com/HoTT/book/issues/292
http://ncatlab.org/nlab/show/homotopy+type+theory
https://groups.google.com/forum/#!forum/hott-amateurs

http://hottheory.files.wordpress.com/2013/03/hott-online-207-g21ac918.pdf

;; (find-fline "$S/http/hottheory.files.wordpress.com/2013/03/")
(code-xpdf     "hottbook" "$S/http/hottheory.files.wordpress.com/2013/03/hott-online-207-g21ac918.pdf")
(code-pdf-text "hottbook" "$S/http/hottheory.files.wordpress.com/2013/03/hott-online-207-g21ac918.pdf")
;; (find-hottbookpage)
;; (find-hottbooktext)





#####
#
# Performant CT
# 2014jun16
#
#####

# «performant-CT» (to ".performant-CT")

In my experience using several definitions (e.g. for a group to have
the "group_carrier", "group_data", then "group_axioms" consisting of
"group_assoc", "group_unit", "group_inverse" all of these being
separate definitions, then "group" consisting of "group_data" and
"group_axioms") makes things much much faster since Coq does not
unfold the internal definitions unless necessary.

# https://mail.google.com/mail/ca/u/0/#inbox/1469ba68b7d2b9ac
# http://people.csail.mit.edu/jgross/#category-coq-experience
# http://people.csail.mit.edu/jgross/personal-website/papers/category-coq-experience-itp-submission-final.pdf

;; (find-fline "$S/http/people.csail.mit.edu/jgross/personal-website/papers/")
(code-xpdf     "performantctcoq" "$S/http/people.csail.mit.edu/jgross/personal-website/papers/category-coq-experience-itp-submission-final.pdf")
(code-pdf-text "performantctcoq" "$S/http/people.csail.mit.edu/jgross/personal-website/papers/category-coq-experience-itp-submission-final.pdf")
;; (find-performantctcoqpage)
;; (find-performantctcoqtext)

http://users.cecs.anu.edu.au/~okeefe/work/fcat4cats04.pdf



#####
#
# CS1 Through Type Theory
# 2016nov06
#
#####

# «CS1-through-TT» (to ".CS1-through-TT")
# https://github.com/kevinsullivan/cs1113f16 








From Vladimir Voevodsky, on Coq-club, 2010sep09:

Actually, as I have accidentally discovered recently there is a way to
control the universe assignment in Coq. For example, one can start
one's development with something like that:

Definition Type1:=Type.
Definition Type0:Type1:=Type.
Definition jj01:Type0 -> Type1:= fun T => T.

This fixes two universes Type0 and Type1 such that Type0:Type1 and
Type0 is a sub-universe of Type1. In further development you may use
Type0 or Type1 everywhere instead of Type. Some definitions may have
to be repeated twice once for Type0 and once for Type1.




http://coq.inria.fr/cocorico/SquareRootTwo
http://r6research.livejournal.com/

http://perso.ens-lyon.fr/aurelien.pardon/coq/index.html
http://www.lri.fr/~lescuyer/software.en.html
http://cs.ru.nl/~Adam.Koprowski/teaching/Coq/assignments07.pdf

http://www.alumnos.unican.es/ccc66/coq.htm
http://www.alumnos.unican.es/ccc66/coq/usingensembles.v

http://www-sop.inria.fr/lemme/Laurent.Chicli/index.html
http://www-sop.inria.fr/lemme/personnel/Laurent.Chicli/FrCoq.html
http://www.xs4all.nl/~weegen/eelis/research/math-classes/
http://www.xs4all.nl/~weegen/eelis/research/math-classes/mscs.pdf

C-zar:
http://coq.inria.fr/V8.2pl1/refman/Reference-Manual014.html

http://askra.de/software/coq-tree/proof-tree.jpg
http://askra.de/software/prooftree/
https://github.com/pilki/cases

http://mws.cs.ru.nl/proviola/index.html

  [1] Carst Tankink, Herman Geuvers, James McKinna, and Freek Wiedijk.
  Proviola: a tool for proof re-animation. Intelligent Computer
  Mathematics, volume LNAI 6167 of Lecture Notes in Artifical
  Intelligence, pages 440 - 454. March 2010. Preprint available
  through http://cs.ru.nl/~carst/files/proviola.pdf.

  [2] Carst Tankink, Herman Geuvers, and James McKinna. Narrating
  formal proof (work in progress). In User Interfaces for Theorem
  Provers 2010. To appear in an issue of ENTCS. Available through
  http://www.cs.ru.nl/~carst/files/narration.pdf






let me give you some references to "intrinsic typing", a technique of
ensuring welltypedness of terms by dependent types of the metalevel. All
of the references implement abstract syntax in Coq.

This one is a quite pedagogical, because very detailed, account of
intrinsic typing:

N Benton, C-K Hur, A Kennedy and C McBride. Strongly Typed Term
Representations in Coq.
http://research.microsoft.com/en-us/um/people/nick/jartypedsyntax.pdf


Intrinsic typing for the simply--typed syntax associated to a signature
is used in

V Capretta, A Felty. Higher-Order Abstract Syntax in Type Theory
http://www.site.uottawa.ca/~afelty/dist/lc06.pdf
http://www.site.uottawa.ca/~afelty/coq/HOUA.v
http://www.site.uottawa.ca/~afelty/coq/TLC.v

and

B Ahrens, J Zsido. Initial Semantics for higher-order typed syntax in Coq.
http://jfr.cib.unibo.it/article/view/2066



http://jfr.cib.unibo.it/article/view/1695
http://www.lix.polytechnique.fr/~barras/proofs/sets/index.html


http://people.debian.org/~schepler/coqtut.v.pdf
http://www.people.fas.harvard.edu/~gmalecha/
http://www.cs.st-andrews.ac.uk/~vk/doc/subfold.pdf

http://www.cs.ru.nl/~spitters/coqw_files/program.html
http://lacl.u-pec.fr/polonowski/Develop/Generic_Env/gen-env.html

http://richmodels.epfl.ch/

2012may10: [Coq-Club] Alternate proof that classic -> proof_irrelevance

http://www-sop.inria.fr/lemme/Frederique.Guilhot/


http://wiki.portal.chalmers.se/cse/pmwiki.php/ForMath/ForMath
http://math-classes.org/

I've been looking and thinking about how you would introduce freshmen
to discrete math using Coq, and again looking at the Gries and
Schneider book "A Logical Approach to Discrete Math," I rather like
it...

http://iron.ouroborus.net/ Iron Lambda


http://www.lama.univ-savoie.fr/~david/ftp/experiment.ps
http://www.lama.univ-savoie.fr/~david/ftp/pate07.pdf
http://www.ps.uni-saarland.de/courses/cl-ss11/script/icl.pdf
http://math.unice.fr/~ah/div/bghp.pdf
http://www.lama.univ-savoie.fr/~raffalli/?page=cours&lang=fr

https://wiki.mq.edu.au/display/plrg/Resources

http://www.youtube.com/watch?v=l6zqLJQCnzo How to use Coq with Proof General

http://coq.inria.fr/cocorico/Other%20Coq%20Resources
http://fuscia.info/cours/coq/
http://www-sop.inria.fr/members/Yves.Bertot/coq-master1.html
http://www.inria.fr/sophia/members/Yves.Bertot/coqartF.pdf
http://www.labri.fr/Perso/%7Ecasteran/CoqArt/index.html

http://www.mpi-sws.org/~beta/Publications.html

Jeremy Avigad's message to FOM with links about formalized maths:
http://www.cs.nyu.edu/pipermail/fom/2014-October/018221.html

http://gmalecha.github.io/publication/2015/02/01/extensible-proof-engineering-in-intensional-type-theory.html

http://www.wired.com/2015/05/will-computers-redefine-roots-math/ ***

http://217.67.21.78/doc/coq/coq-8.5-hack/index.html Show Tree






#  Local Variables:
#  coding:               raw-text-unix
#  ee-delimiter-hash:    "\n#*\n"
#  ee-delimiter-percent: "\n%*\n"
#  ee-anchor-format:     "«%s»"
#  End: