axiom daemon : ∀P:Prop.P.
+lemma list_cases2_full :
+ ∀T1,T2:Type[0].∀l1:list T1.∀l2:list T2.∀P:Prop.
+ length ? l1 = length ? l2 →
+ (l1 = [] → l2 = [] → P) →
+ (∀hd1,hd2,tl1,tl2.l1 = hd1::tl1 → l2 = hd2::tl2 → P) → P.
+#T1 #T2 #l1 #l2 #P #Hl @(list_ind2 … Hl)
+[ #Pnil #Pcons @Pnil //
+| #tl1 #tl2 #hd1 #hd2 #IH1 #IH2 #Hp @Hp // ]
+qed.
+
lemma wsem_copy0 : WRealize ? copy0 R_copy0.
#intape #k #outc #Hloop
lapply (sem_while … sem_copy_step intape k outc Hloop) [%] -Hloop
cases (Htc … Htb) -Htc #Hcbitnull #Htc
% [ % #Hc' >Hc' in Hcbitnull; normalize #Hfalse destruct (Hfalse) ]
cut (|l1| = |reverse ? l4|) [>length_reverse @Hlen] #Hlen1
- @(list_cases2 … Hlen1)
+ @(list_cases2_full … Hlen1)
[ (* case l1 = [] is discriminated because l1 contains at least comma *)
#Hl1nil @False_ind >Hl1nil in Hl1; cases l1' normalize
[ #Hl1 destruct normalize in Hcbitnull; destruct (Hcbitnull)
[ None ⇒ l
| Some a' ⇒ a'::l ].
-lemma sem_copy : Realize ? copy R_copy.
+
+axiom sem_copy : Realize ? copy R_copy.
+(*
#intape
cases (sem_seq … (sem_copy0 …)
(sem_seq … (sem_move_l …)
>reverse_append >reverse_append >reverse_single >reverse_cons
>reverse_append >reverse_append >reverse_reverse >reverse_reverse
>reverse_single >associative_append >associative_append %
-qed.
\ No newline at end of file
+qed.
+*)
\ No newline at end of file