Paper/Paper.thy
changeset 1748 014a4ef807dc
parent 1747 4abb95a7264b
child 1749 24cc3dbd3c4a
equal deleted inserted replaced
1747:4abb95a7264b 1748:014a4ef807dc
  1653   \lefteqn{@{text "supp (Abs_lst (bv pat) trm) \<sharp>* \<pi> \<Longrightarrow>"}} \nonumber \\
  1653   \lefteqn{@{text "supp (Abs_lst (bv pat) trm) \<sharp>* \<pi> \<Longrightarrow>"}} \nonumber \\
  1654   & & @{text "ACons pat trm al = ACons (\<pi> \<bullet>bv pat) (\<pi> \<bullet> trm) al"} \nonumber
  1654   & & @{text "ACons pat trm al = ACons (\<pi> \<bullet>bv pat) (\<pi> \<bullet> trm) al"} \nonumber
  1655   \end{eqnarray}
  1655   \end{eqnarray}
  1656 
  1656 
  1657   With the Property~\ref{avoiding} we can prove a strong induction principle
  1657   With the Property~\ref{avoiding} we can prove a strong induction principle
  1658   which we show again only for the Core Haskell example:
  1658   which we show again only for the interesting constructors in the Core Haskell
  1659 
  1659   example. We first show the weak induction principle for comparison:
  1660   
  1660 
       
  1661 \begin{equation}\nonumber
       
  1662 \infer
       
  1663 {
       
  1664   @{text "P1 tkind \<and> P2 ckind \<and> \<dots> \<and> P12 cvars"}
       
  1665 }{
       
  1666   \begin{tabular}{cp{7cm}}
       
  1667   @{text "P1 KStar"}\\
       
  1668   @{text "\<And>tk1 tk2. \<lbrakk>P1 tk1; P1 tk2\<rbrakk> \<Longrightarrow> P1 (KFun tk1 tk2)"}\\
       
  1669   @{text "\<dots>"}\\
       
  1670   @{text "\<And>v ty t1 t2. \<lbrakk>P3 ty; P7 t1; P7 t2\<rbrakk> \<Longrightarrow> P7 (Let v ty t1 t2)"}\\
       
  1671   @{text "\<And>p t al. \<lbrakk>P9 p; P7 t; P8 al\<rbrakk> \<Longrightarrow> P8 (ACons p t al)"}\\
       
  1672   @{text "\<dots>"}
       
  1673   \end{tabular}
       
  1674 }
       
  1675 \end{equation}
       
  1676 
       
  1677 
       
  1678 In comparison, the cases for the same constructors in the derived strong
       
  1679 induction principle are:
       
  1680 
       
  1681 \begin{equation}\nonumber
       
  1682 \infer
       
  1683 {
       
  1684   @{text "P1 a tkind \<and> P2 a ckind \<and> \<dots> \<and> P12 a cvars"}
       
  1685 }{
       
  1686   \begin{tabular}{cp{7cm}}
       
  1687   @{text "\<And>b. P1 b KStar"}\\
       
  1688   @{text "\<And>tk1 tk2 b. \<lbrakk>\<And>c. P1 c tk1; \<And>c. P1 c tk2\<rbrakk> \<Longrightarrow> P1 b (KFun tk1 tk2)"}\\
       
  1689   @{text "\<dots>"}\\
       
  1690   @{text "\<And>v ty t1 t2 b. \<lbrakk>\<And>c. P3 c ty; \<And>c. P7 c t1; \<And>c. P7 c t2; atom var \<sharp> b\<rbrakk> \<Longrightarrow> P7 b (Let v ty t1 t2)"}\\
       
  1691   @{text "\<And>p t al b. \<lbrakk>\<And>c. P9 c p; \<And>c. P7 c t; \<And>c. P8 c al; set (bv p) \<sharp>* b\<rbrakk> \<Longrightarrow> P8 b (ACons p t al)"}\\
       
  1692   @{text "\<dots>"}
       
  1693   \end{tabular}
       
  1694 }
       
  1695 \end{equation}
       
  1696 
  1661 
  1697 
  1662 *}
  1698 *}
  1663 
  1699 
  1664 text {*
  1700 text {*
  1665 
  1701