<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=ks_c_5601-1987" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.6001.18854">
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT size=2 face=Arial>Hi,</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial>I need to mention one more thing.</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial>Indeed, the injectivity of inductive type 
constructor is inconsistent in the prsence of Prop without LEM.</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial>Actually, the original idea came from Alexandre 
Miquel.</FONT></DIV>
<DIV><FONT size=2 face=Arial>He told Hugo that the injectivity of type 
constroctors for inductive familes of Prop is inconsistent without any help 
of&nbsp;axioms like "P &lt;-&gt; Q" -&gt; "P = Q".</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial>His proof in Coq is as follows:</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 
face=Arial>----------------------------------------------------------------------<BR>Inductive 
I : (Prop -&gt; Prop) -&gt; Prop := .<BR><BR>Axiom inj_I : forall x y, I x = I y 
-&gt; x = y.<BR><BR>Definition R (x : Prop) := forall p, x = I p -&gt; ~ p 
x.<BR><BR>Lemma R_eqv :<BR>&nbsp; forall p, R (I p) &lt;-&gt; ~ p (I 
p).<BR><BR>Proof.<BR>split; intros.<BR>&nbsp;unfold R; apply 
H.<BR>&nbsp;reflexivity.<BR>&nbsp;unfold R; intros q H0.<BR>&nbsp;rewrite &lt;- 
(inj_I p q H0).<BR>&nbsp;assumption.<BR>Qed.<BR><BR>Lemma R_eqv_not_R 
:<BR>&nbsp; R (I R) &lt;-&gt; ~ R (I R).<BR><BR>Proof (R_eqv R).<BR><BR>Lemma 
absurd : False.<BR><BR>Proof.<BR>destruct R_eqv_not_R.<BR>exact (H (H0 (fun x 
=&gt; H x x)) (H0 (fun x =&gt; H x 
x))).<BR>Qed.<BR>-----------------------------------------------------</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial>From this proof, I realized it can be applied to 
Set as well.</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 
face=Arial>-----------------------------------------------------</FONT></DIV>
<DIV><FONT size=2 face=Arial>Inductive I : (Set -&gt; Set) -&gt; Set := <BR>| i1 
: I (fun x =&gt; x)<BR>| i2 : I (fun x =&gt; x)<BR>.<BR><BR>Axiom inj_I : forall 
x y, I x = I y -&gt; x = y.<BR><BR>Definition R (x : Set) : Set := forall p: Set 
-&gt; Set, x = I p -&gt; p x -&gt; False.<BR><BR>Lemma R_eqv_1 :<BR>&nbsp; 
forall p, R (I p) -&gt; (p (I p) -&gt; False).<BR><BR>Proof.<BR>intros ? ?. 
<BR>&nbsp; apply H. reflexivity.<BR>Qed.<BR><BR>Lemma R_eqv_2 :<BR>&nbsp; forall 
p, (p (I p) -&gt; False) -&gt; R (I p).<BR><BR>intros.<BR>&nbsp;unfold R; intros 
q H0.<BR>&nbsp;rewrite &lt;- (inj_I p q 
H0).<BR>&nbsp;assumption.<BR>Qed.<BR><BR>Lemma R_eqv_not_R_1 :<BR>&nbsp; R (I R) 
-&gt; R (I R) -&gt; False.<BR><BR>Proof (R_eqv_1 R).<BR><BR>Lemma R_eqv_not_R_2 
:<BR>&nbsp; (R (I R) -&gt; False) -&gt; R (I R).<BR><BR>Proof (R_eqv_2 
R).<BR><BR>Lemma absurd : False.<BR><BR>Proof.<BR>set (H := 
R_eqv_not_R_1).<BR>set (H0 := R_eqv_not_R_2).<BR><BR>exact (H (H0 (fun x =&gt; H 
x x)) (H0 (fun x =&gt; H x 
x))).<BR>Qed.<BR>------------------------------------------------</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial>But, in this proof, we need to notice that we use 
"False : Prop" rather than "Empty_set : Set".</FONT></DIV>
<DIV><FONT size=2 face=Arial>If you change "False" to "Empty_set", then the type 
of R cannot be "Set -&gt; Set", rather it should "Set -&gt; Type".</FONT></DIV>
<DIV><FONT size=2 face=Arial>The reason why R is typable as Set -&gt; Set 
is&nbsp;due to&nbsp;the impredicativity of Prop, because R&nbsp;is typepable as 
Set -&gt; Prop, which is</FONT></DIV>
<DIV><FONT size=2 face=Arial>coercible to Set -&gt; Set.</FONT></DIV>
<DIV><FONT size=2 face=Arial>This proof does not need any axiom, but just the 
impredicativity of Prop.</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial>So, this idea does not aplly to Agda because it 
does not have any impredicative set like Prop.</FONT></DIV>
<DIV><FONT size=2 face=Arial>So, I applied cantor's diagonalization assuming the 
law of excluded middle.</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial>I think the presence of Prop is one of the fancy 
features of Coq as a proof assistant (at least to me).</FONT></DIV>
<DIV><FONT size=2 face=Arial>So, the injectivity seems unatural to me in this 
view point.</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial>Cheers,</FONT></DIV>
<DIV><FONT size=2 face=Arial>Chung-Kil Hur</FONT></DIV>
<DIV><FONT face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial>----- Original Message ----- </FONT></DIV>
<BLOCKQUOTE 
style="BORDER-LEFT: #000000 2px solid; PADDING-LEFT: 5px; PADDING-RIGHT: 0px; MARGIN-LEFT: 5px; MARGIN-RIGHT: 0px">
  <DIV style="FONT: 10pt ±¼¸²; BACKGROUND: #e4e4e4; font-color: black"><FONT 
  face=Arial><B>From:</B> </FONT><A title=ckh25@cam.ac.uk 
  href="mailto:ckh25@cam.ac.uk"><FONT face=Arial>Chung Kil Hur</FONT></A><FONT 
  face=Arial> </FONT></DIV>
  <DIV style="FONT: 10pt ±¼¸²"><FONT face=Arial><B>To:</B> </FONT><A 
  title=agda@lists.chalmers.se href="mailto:agda@lists.chalmers.se"><FONT 
  face=Arial>Agda mailing list</FONT></A><FONT face=Arial> ; </FONT><A 
  title=coq-club@inria.fr href="mailto:coq-club@inria.fr"><FONT 
  face=Arial>coq-club@inria.fr</FONT></A><FONT face=Arial> </FONT></DIV>
  <DIV style="FONT: 10pt ±¼¸²"><FONT face=Arial><B>Sent:</B> Thursday, January 07, 
  2010 12:59 AM</FONT></DIV>
  <DIV style="FONT: 10pt ±¼¸²"><FONT face=Arial><B>Subject:</B> [Agda] Agda with 
  the excluded middle is inconsistent ?</FONT></DIV>
  <DIV><FONT face=Arial><BR><FONT size=2></FONT></FONT></DIV>
  <DIV>
  <DIV><FONT size=2 face=Arial>Hi everyone,</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>I proved the absurdity in Agda assuming the 
  excluded middle.</FONT></DIV>
  <DIV><FONT size=2 face=Arial>Is it a well-known fact ?</FONT></DIV>
  <DIV><FONT size=2 face=Arial>It seems that Agda's set theory is 
  weird.</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>This comes from the injectivity of inductive type 
  constructors.</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>The proof sketch is as follows.</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>Define a family of inductive type</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>data I : (Set -&gt; Set) -&gt; 
  Set&nbsp;where</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>with no constructors.</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>By injectivity of type constructors, I can show 
  that I : (Set -&gt; Set) -&gt; Set is injective.</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>As you may see, there is a size problem with this 
  injectivity.</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>So, I just used the cantor's diagonalization to 
  derive absurdity in a&nbsp;classical way.</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>Does anyone know whether cantor's diagonalization 
  essentially needs the classical axiom, or can be done intuitionistically 
  ?</FONT></DIV>
  <DIV><FONT size=2 face=Arial>If the latter is true, then the Agda system is 
  inconsistent.</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>Please have a look at the Agda code below, and 
  let me know if there's any mistakes.</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>All comments are wellcome.</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>Thanks,</FONT></DIV>
  <DIV><FONT size=2 face=Arial>Chung-Kil Hur</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>============== Agda code 
  ===============</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>module cantor where</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; data Empty : Set where</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; data One : Set where<BR>&nbsp;&nbsp;&nbsp; 
  one : One</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; data coprod (A : Set1) (B : Set1) : Set1 
  where<BR>&nbsp;&nbsp;&nbsp; inl : ¢£ (a : A) -&gt; coprod A 
  B<BR>&nbsp;&nbsp;&nbsp; inr : ¢£ (b : B) -&gt; coprod A B </FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; postulate exmid : ¢£ (A : Set1) -&gt; 
  coprod A (A -&gt; Empty)</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; data Eq1 {A : Set1} (x : A) : A -&gt; Set1 
  where<BR>&nbsp;&nbsp;&nbsp; refleq1 : Eq1 x x</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; cast : ¢£ { A B } -&gt; Eq1 A B -&gt; A 
  -&gt; B<BR>&nbsp; cast refleq1 a = a</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; Eq1cong : ¢£ {f g : Set -&gt; Set} a -&gt; 
  Eq1 f g -&gt; Eq1 (f a) (g a)<BR>&nbsp; Eq1cong a refleq1 = 
  refleq1</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; Eq1sym : ¢£ {A : Set1} { x y : A } -&gt; 
  Eq1 x y -&gt; Eq1 y x<BR>&nbsp; Eq1sym refleq1 = refleq1</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; Eq1trans : ¢£ {A : Set1} { x y z : A } 
  -&gt; Eq1 x y -&gt; Eq1 y z -&gt; Eq1 x z<BR>&nbsp; Eq1trans refleq1 refleq1 = 
  refleq1</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; data I : (Set -&gt; Set) -&gt; Set 
  where</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; Iinj : ¢£ { x y : Set -&gt; Set } -&gt; Eq1 
  (I x) (I y) -&gt; Eq1 x y <BR>&nbsp; Iinj refleq1 = refleq1</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; data invimageI (a : Set) : Set1 
  where<BR>&nbsp;&nbsp;&nbsp; invelmtI : forall x -&gt; (Eq1 (I x) a) -&gt; 
  invimageI a</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; J : Set -&gt; (Set -&gt; Set)<BR>&nbsp; J 
  a with exmid (invimageI a)<BR>&nbsp; J a | inl (invelmtI x y) = x<BR>&nbsp; J 
  a | inr b = ¥ë x ¡æ Empty</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; data invimageJ (x : Set -&gt; Set) : Set1 
  where<BR>&nbsp;&nbsp;&nbsp; invelmtJ : forall a -&gt; (Eq1 (J a) x) -&gt; 
  invimageJ x</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; IJIeqI : ¢£ x -&gt; Eq1 (I (J (I x))) (I 
  x)<BR>&nbsp; IJIeqI x with exmid (invimageI (I x))<BR>&nbsp; IJIeqI x | inl 
  (invelmtI x' y) = y<BR>&nbsp; IJIeqI x | inr b with b (invelmtI x 
  refleq1)<BR>&nbsp; IJIeqI x | inr b | ()</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; J_srj : ¢£ (x : Set -&gt; Set) -&gt; 
  invimageJ x<BR>&nbsp; J_srj x = invelmtJ (I x) (Iinj (IJIeqI x))</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; cantor : Set -&gt; Set<BR>&nbsp; cantor a 
  with exmid (Eq1 (J a a) Empty)<BR>&nbsp; cantor a | inl a' = One<BR>&nbsp; 
  cantor a | inr b = Empty</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; OneNeqEmpty : Eq1 One Empty -&gt; 
  Empty<BR>&nbsp; OneNeqEmpty p = cast p one</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; cantorone : ¢£ a -&gt; Eq1 (J a a) Empty 
  -&gt; Eq1 (cantor a) One <BR>&nbsp; cantorone a p with exmid (Eq1 (J a a) 
  Empty)<BR>&nbsp; cantorone a p | inl a' = refleq1<BR>&nbsp; cantorone a p | 
  inr b with b p<BR>&nbsp; cantorone a p | inr b | ()</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; cantorempty : ¢£ a -&gt; (Eq1 (J a a) Empty 
  -&gt; Empty) -&gt; Eq1 (cantor a) Empty<BR>&nbsp; cantorempty a p with exmid 
  (Eq1 (J a a) Empty)<BR>&nbsp; cantorempty a p | inl a' with p a'<BR>&nbsp; 
  cantorempty a p | inl a' | ()<BR>&nbsp; cantorempty a p | inr b = 
  refleq1</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; cantorcase : ¢£ a -&gt; Eq1 cantor (J a) 
  -&gt; Empty<BR>&nbsp; cantorcase a pf with exmid (Eq1 (J a a) Empty)<BR>&nbsp; 
  cantorcase a pf | inl a' = OneNeqEmpty (Eq1trans (Eq1trans (Eq1sym (cantorone 
  a a')) (Eq1cong a pf)) a')<BR>&nbsp; cantorcase a pf | inr b = b (Eq1trans 
  (Eq1sym (Eq1cong a pf)) (cantorempty a b))</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial>&nbsp; absurd : Empty<BR>&nbsp; absurd with 
  (J_srj cantor)<BR>&nbsp; absurd | invelmtJ a y = cantorcase a (Eq1sym 
  y)</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 
face=Arial>=====================================</FONT></DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
  <DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV></DIV>
  <P><FONT size=2 face=Arial></FONT></P><FONT size=2 face=Arial>
  <HR>
  </FONT>
  <P></P><FONT size=2 
  face=Arial>_______________________________________________<BR>Agda mailing 
  list<BR>Agda@lists.chalmers.se<BR>https://lists.chalmers.se/mailman/listinfo/agda<BR></FONT></BLOCKQUOTE></BODY></HTML>