diff --git a/metasrc/paco.py b/metasrc/paco.py index 17262b5..16c1cd4 100755 --- a/metasrc/paco.py +++ b/metasrc/paco.py @@ -16,7 +16,7 @@ n = relsize -print ('Section SIGT.') +print ('Section PACO'+str(n)+'.') print ('') for i in range(n): @@ -102,20 +102,12 @@ print ('Qed.') print ('') -print ('End SIGT.') -print ('') - print ('(** ** Predicates of Arity '+str(n)) print ('*)') print ('') for m in range(1,mutsize+1): print ('Section Arg'+str(n)+lev(m)+'_def.') - for i in range(n): - print ('Variable T'+str(i)+' : '+ifpstr(i,'forall'),end='') - for j in range(i): - print (' (x'+str(j)+': @T'+str(j)+itrstr(" x",j)+')',end='') - print (ifpstr(i,', ')+'Type.') print ('Variable'+itridx(" gf",m)+' : '+m*('rel'+str(n)+itrstr(" T",n)+' -> ')+'rel'+str(n)+itrstr(" T",n)+'.') for i in range(m): print ('Arguments gf'+idx(m,i)+' : clear implicits.') @@ -136,39 +128,33 @@ print ('.') print ('End Arg'+str(n)+lev(m)+'_def.') for i in range(m): - print ('Arguments paco'+str(n)+lev(m)+idx(m,i)+ifpstr(n,' ['+itrstr(" T",n)+' ].'," : clear implicits.")) - print ('Arguments upaco'+str(n)+lev(m)+idx(m,i)+ifpstr(n,' ['+itrstr(" T",n)+' ].'," : clear implicits.")) + print ('Arguments paco'+str(n)+lev(m)+idx(m,i)+' : clear implicits.') + print ('Arguments upaco'+str(n)+lev(m)+idx(m,i)+' : clear implicits.') print ('Hint Unfold upaco'+str(n)+lev(m)+idx(m,i)+'.') print ('') -print ("(* Less than or equal - internal use only *)") -print ("Notation \"p <_paco_"+str(n)+"= q\" :=") -print (" (forall"+itrstr(" _paco_x",n)+" (PR: p"+itrstr(" _paco_x",n)+" : Prop), q"+itrstr(" _paco_x",n)+" : Prop)") -print (" (at level 50, no associativity).") -print ('') - for m in range (1,mutsize+1): print ('(** '+str(m)+' Mutual Coinduction *)') print ('') print ('Section Arg'+str(n)+'_'+str(m)+'.') print ('') - print ("Definition monotone"+str(n)+lev(m)+itrstr(" T",n)+" (gf: "+m*("rel"+str(n)+itrstr(" T",n)+" -> ")+"rel"+str(n)+itrstr(" T",n)+") :=") + print ("Definition monotone"+str(n)+lev(m)+" (gf: "+m*("rel"+str(n)+itrstr(" T",n)+" -> ")+"rel"+str(n)+itrstr(" T",n)+") :=") print (" forall"+itrstr(" x",n)+itridx(" r",m)+itridx(" r'",m)+" (IN: gf"+itridx(" r",m)+itrstr(" x",n)+") ",end='') for i in range(m): print ("(LE"+idx(m,i)+": r"+idx(m,i)+" <"+str(n)+"= r'"+idx(m,i)+")",end='') print (", gf"+itridx(" r'",m)+itrstr(" x",n)+".") print ('') - print ("Definition _monotone"+str(n)+lev(m)+itrstr(" T",n)+" (gf: "+m*("rel"+str(n)+itrstr(" T",n)+" -> ")+"rel"+str(n)+itrstr(" T",n)+") :=") + print ("Definition _monotone"+str(n)+lev(m)+" (gf: "+m*("rel"+str(n)+itrstr(" T",n)+" -> ")+"rel"+str(n)+itrstr(" T",n)+") :=") print (" forall"+itridx(" r",m)+itridx(" r'",m),end='') for i in range(m): print ("(LE"+idx(m,i)+": r"+idx(m,i)+" <"+str(n)+"= r'"+idx(m,i)+")",end='') print (", gf"+itridx(" r",m)+' <'+str(n)+'== gf'+itridx(" r'",m)+'.') print ('') - print ("Lemma monotone"+str(n)+lev(m)+'_eq'+itrstr(" T",n)+" (gf: "+m*("rel"+str(n)+itrstr(" T",n)+" -> ")+"rel"+str(n)+itrstr(" T",n)+") :") + print ("Lemma monotone"+str(n)+lev(m)+'_eq'+" (gf: "+m*("rel"+str(n)+itrstr(" T",n)+" -> ")+"rel"+str(n)+itrstr(" T",n)+") :") print (" monotone"+str(n)+lev(m)+' gf <-> _monotone'+str(n)+lev(m)+' gf.') print ("Proof. unfold monotone"+str(n)+lev(m)+', _monotone'+str(n)+lev(m)+', le'+str(n)+'. split; eauto. Qed.') print ('') - print ("Lemma monotone"+str(n)+lev(m)+'_map'+itrstr(" T",n)+" (gf: "+m*("rel"+str(n)+itrstr(" T",n)+" -> ")+"rel"+str(n)+itrstr(" T",n)+")") + print ("Lemma monotone"+str(n)+lev(m)+'_map'+" (gf: "+m*("rel"+str(n)+itrstr(" T",n)+" -> ")+"rel"+str(n)+itrstr(" T",n)+")") print (" (MON: _monotone"+str(n)+lev(m)+' gf) :') print (" _monotone"+lev(m)+' (fun'+itrstr(' R', m)+' => curry'+str(n)+' (gf'+itrstr(' (uncurry'+str(n)+' R', m, ')')+')).') print ('Proof.') @@ -176,11 +162,6 @@ print ('Qed.') print ('') - for i in range(n): - print ('Variable T'+str(i)+' : '+ifpstr(i,'forall'),end='') - for j in range(i): - print (' (x'+str(j)+': @T'+str(j)+itrstr(" x",j)+')',end='') - print (ifpstr(i,', ')+'Type.') print ('Variable'+itridx(" gf",m)+' : '+m*('rel'+str(n)+itrstr(" T",n)+' -> ')+'rel'+str(n)+itrstr(" T",n)+'.') for i in range(m): print ('Arguments gf'+idx(m,i)+' : clear implicits.') @@ -305,10 +286,22 @@ print ('End Arg'+str(n)+'_'+str(m)+'.') print ('') - print ('Hint Unfold monotone'+str(n)+lev(m)+'.') + +print ('End PACO'+str(n)+'.') +print ('') + +for m in range(1,mutsize+1): + for i in range(m): + print ('Global Opaque paco'+str(n)+lev(m)+idx(m,i)+'.') + print ('') + + for i in range(m): + print ('Hint Unfold upaco'+str(n)+lev(m)+idx(m,i)+'.') for i in range(m): print ('Hint Resolve paco'+str(n)+lev(m)+idx(m,i)+'_fold.') + print ('Hint Unfold monotone'+str(n)+lev(m)+'.') print ('') + for i in range(m): print ('Arguments paco'+str(n)+lev(m)+idx(m,i)+'_acc'+ifpstr(n,' ['+itrstr(" T",n)+' ].'," : clear implicits.")) for i in range(m): @@ -323,13 +316,6 @@ print ('Arguments paco'+str(n)+lev(m)+idx(m,i)+'_unfold'+ifpstr(n,' ['+itrstr(" T",n)+' ].'," : clear implicits.")) print ('') - for i in range(m): - print ('Global Opaque paco'+str(n)+lev(m)+idx(m,i)+'.') - print ('Global Opaque paco'+str(n)+lev(m)+idx(m,i)+'_acc.') - print ('Global Opaque paco'+str(n)+lev(m)+idx(m,i)+'_mult.') - print ('Global Opaque paco'+str(n)+lev(m)+idx(m,i)+'_fold.') - print ('Global Opaque paco'+str(n)+lev(m)+idx(m,i)+'_unfold.') - print ('') for i in range(m): print ("Instance paco"+str(n)+lev(m)+idx(m,i)+"_inst "+itrstr(" T",n)+" ("+itridx("gf",m," ")+": rel"+str(n)+itrstr(" T",n)+"->_)"+itridx(" r",m)+itrstr(" x",n)+" : paco_class (paco"+str(n)+lev(m)+idx(m,i)+itridx(" gf",m)+itridx(" r",m)+itrstr(" x",n)+") :=") print ("{ pacoacc := paco"+str(n)+lev(m)+idx(m,i)+"_acc"+itridx(" gf",m)+";") diff --git a/src/paco0.v b/src/paco0.v index 66a1528..0df9120 100644 --- a/src/paco0.v +++ b/src/paco0.v @@ -2,7 +2,7 @@ Require Export paconotation pacotacuser. Require Import paconotation_internal pacotac pacon. Set Implicit Arguments. -Section SIGT. +Section PACO0. Record sig0T := @@ -64,8 +64,6 @@ Proof. apply curry_map_rev0. eapply le1_trans; [|eauto]. apply uncurry_bij1_0. Qed. -End SIGT. - (** ** Predicates of Arity 0 *) @@ -132,11 +130,6 @@ Arguments paco0_3_2 : clear implicits. Arguments upaco0_3_2 : clear implicits. Hint Unfold upaco0_3_2. -(* Less than or equal - internal use only *) -Notation "p <_paco_0= q" := - (forall (PR: p : Prop), q : Prop) - (at level 50, no associativity). - (** 1 Mutual Coinduction *) Section Arg0_1. @@ -238,28 +231,6 @@ Qed. End Arg0_1. -Hint Unfold monotone0. -Hint Resolve paco0_fold. - -Arguments paco0_acc : clear implicits. -Arguments paco0_mon : clear implicits. -Arguments paco0_mult_strong : clear implicits. -Arguments paco0_mult : clear implicits. -Arguments paco0_fold : clear implicits. -Arguments paco0_unfold : clear implicits. - -Global Opaque paco0. -Global Opaque paco0_acc. -Global Opaque paco0_mult. -Global Opaque paco0_fold. -Global Opaque paco0_unfold. - -Instance paco0_inst (gf : rel0->_) r : paco_class (paco0 gf r) := -{ pacoacc := paco0_acc gf; - pacomult := paco0_mult gf; - pacofold := paco0_fold gf; - pacounfold := paco0_unfold gf }. - (** 2 Mutual Coinduction *) Section Arg0_2. @@ -437,47 +408,6 @@ Qed. End Arg0_2. -Hint Unfold monotone0_2. -Hint Resolve paco0_2_0_fold. -Hint Resolve paco0_2_1_fold. - -Arguments paco0_2_0_acc : clear implicits. -Arguments paco0_2_1_acc : clear implicits. -Arguments paco0_2_0_mon : clear implicits. -Arguments paco0_2_1_mon : clear implicits. -Arguments paco0_2_0_mult_strong : clear implicits. -Arguments paco0_2_1_mult_strong : clear implicits. -Arguments paco0_2_0_mult : clear implicits. -Arguments paco0_2_1_mult : clear implicits. -Arguments paco0_2_0_fold : clear implicits. -Arguments paco0_2_1_fold : clear implicits. -Arguments paco0_2_0_unfold : clear implicits. -Arguments paco0_2_1_unfold : clear implicits. - -Global Opaque paco0_2_0. -Global Opaque paco0_2_0_acc. -Global Opaque paco0_2_0_mult. -Global Opaque paco0_2_0_fold. -Global Opaque paco0_2_0_unfold. - -Global Opaque paco0_2_1. -Global Opaque paco0_2_1_acc. -Global Opaque paco0_2_1_mult. -Global Opaque paco0_2_1_fold. -Global Opaque paco0_2_1_unfold. - -Instance paco0_2_0_inst (gf_0 gf_1 : rel0->_) r_0 r_1 : paco_class (paco0_2_0 gf_0 gf_1 r_0 r_1) := -{ pacoacc := paco0_2_0_acc gf_0 gf_1; - pacomult := paco0_2_0_mult gf_0 gf_1; - pacofold := paco0_2_0_fold gf_0 gf_1; - pacounfold := paco0_2_0_unfold gf_0 gf_1 }. - -Instance paco0_2_1_inst (gf_0 gf_1 : rel0->_) r_0 r_1 : paco_class (paco0_2_1 gf_0 gf_1 r_0 r_1) := -{ pacoacc := paco0_2_1_acc gf_0 gf_1; - pacomult := paco0_2_1_mult gf_0 gf_1; - pacofold := paco0_2_1_fold gf_0 gf_1; - pacounfold := paco0_2_1_unfold gf_0 gf_1 }. - (** 3 Mutual Coinduction *) Section Arg0_3. @@ -731,10 +661,72 @@ Qed. End Arg0_3. -Hint Unfold monotone0_3. +End PACO0. + +Global Opaque paco0. + +Hint Unfold upaco0. +Hint Resolve paco0_fold. +Hint Unfold monotone0. + +Arguments paco0_acc : clear implicits. +Arguments paco0_mon : clear implicits. +Arguments paco0_mult_strong : clear implicits. +Arguments paco0_mult : clear implicits. +Arguments paco0_fold : clear implicits. +Arguments paco0_unfold : clear implicits. + +Instance paco0_inst (gf : rel0->_) r : paco_class (paco0 gf r) := +{ pacoacc := paco0_acc gf; + pacomult := paco0_mult gf; + pacofold := paco0_fold gf; + pacounfold := paco0_unfold gf }. + +Global Opaque paco0_2_0. +Global Opaque paco0_2_1. + +Hint Unfold upaco0_2_0. +Hint Unfold upaco0_2_1. +Hint Resolve paco0_2_0_fold. +Hint Resolve paco0_2_1_fold. +Hint Unfold monotone0_2. + +Arguments paco0_2_0_acc : clear implicits. +Arguments paco0_2_1_acc : clear implicits. +Arguments paco0_2_0_mon : clear implicits. +Arguments paco0_2_1_mon : clear implicits. +Arguments paco0_2_0_mult_strong : clear implicits. +Arguments paco0_2_1_mult_strong : clear implicits. +Arguments paco0_2_0_mult : clear implicits. +Arguments paco0_2_1_mult : clear implicits. +Arguments paco0_2_0_fold : clear implicits. +Arguments paco0_2_1_fold : clear implicits. +Arguments paco0_2_0_unfold : clear implicits. +Arguments paco0_2_1_unfold : clear implicits. + +Instance paco0_2_0_inst (gf_0 gf_1 : rel0->_) r_0 r_1 : paco_class (paco0_2_0 gf_0 gf_1 r_0 r_1) := +{ pacoacc := paco0_2_0_acc gf_0 gf_1; + pacomult := paco0_2_0_mult gf_0 gf_1; + pacofold := paco0_2_0_fold gf_0 gf_1; + pacounfold := paco0_2_0_unfold gf_0 gf_1 }. + +Instance paco0_2_1_inst (gf_0 gf_1 : rel0->_) r_0 r_1 : paco_class (paco0_2_1 gf_0 gf_1 r_0 r_1) := +{ pacoacc := paco0_2_1_acc gf_0 gf_1; + pacomult := paco0_2_1_mult gf_0 gf_1; + pacofold := paco0_2_1_fold gf_0 gf_1; + pacounfold := paco0_2_1_unfold gf_0 gf_1 }. + +Global Opaque paco0_3_0. +Global Opaque paco0_3_1. +Global Opaque paco0_3_2. + +Hint Unfold upaco0_3_0. +Hint Unfold upaco0_3_1. +Hint Unfold upaco0_3_2. Hint Resolve paco0_3_0_fold. Hint Resolve paco0_3_1_fold. Hint Resolve paco0_3_2_fold. +Hint Unfold monotone0_3. Arguments paco0_3_0_acc : clear implicits. Arguments paco0_3_1_acc : clear implicits. @@ -755,24 +747,6 @@ Arguments paco0_3_0_unfold : clear implicits. Arguments paco0_3_1_unfold : clear implicits. Arguments paco0_3_2_unfold : clear implicits. -Global Opaque paco0_3_0. -Global Opaque paco0_3_0_acc. -Global Opaque paco0_3_0_mult. -Global Opaque paco0_3_0_fold. -Global Opaque paco0_3_0_unfold. - -Global Opaque paco0_3_1. -Global Opaque paco0_3_1_acc. -Global Opaque paco0_3_1_mult. -Global Opaque paco0_3_1_fold. -Global Opaque paco0_3_1_unfold. - -Global Opaque paco0_3_2. -Global Opaque paco0_3_2_acc. -Global Opaque paco0_3_2_mult. -Global Opaque paco0_3_2_fold. -Global Opaque paco0_3_2_unfold. - Instance paco0_3_0_inst (gf_0 gf_1 gf_2 : rel0->_) r_0 r_1 r_2 : paco_class (paco0_3_0 gf_0 gf_1 gf_2 r_0 r_1 r_2) := { pacoacc := paco0_3_0_acc gf_0 gf_1 gf_2; pacomult := paco0_3_0_mult gf_0 gf_1 gf_2; diff --git a/src/paco1.v b/src/paco1.v index 9fd7506..84a66d9 100644 --- a/src/paco1.v +++ b/src/paco1.v @@ -2,7 +2,7 @@ Require Export paconotation pacotacuser. Require Import paconotation_internal pacotac pacon. Set Implicit Arguments. -Section SIGT. +Section PACO1. Variable T0 : Type. @@ -66,13 +66,10 @@ Proof. apply curry_map_rev1. eapply le1_trans; [|eauto]. apply uncurry_bij1_1. Qed. -End SIGT. - (** ** Predicates of Arity 1 *) Section Arg1_def. -Variable T0 : Type. Variable gf : rel1 T0 -> rel1 T0. Arguments gf : clear implicits. @@ -81,12 +78,11 @@ Definition paco1( r: rel1 T0) : rel1 T0 := Definition upaco1( r: rel1 T0) := paco1 r \1/ r. End Arg1_def. -Arguments paco1 [ T0 ]. -Arguments upaco1 [ T0 ]. +Arguments paco1 : clear implicits. +Arguments upaco1 : clear implicits. Hint Unfold upaco1. Section Arg1_2_def. -Variable T0 : Type. Variable gf_0 gf_1 : rel1 T0 -> rel1 T0 -> rel1 T0. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -100,15 +96,14 @@ Definition paco1_2_1( r_0 r_1: rel1 T0) : rel1 T0 := Definition upaco1_2_0( r_0 r_1: rel1 T0) := paco1_2_0 r_0 r_1 \1/ r_0. Definition upaco1_2_1( r_0 r_1: rel1 T0) := paco1_2_1 r_0 r_1 \1/ r_1. End Arg1_2_def. -Arguments paco1_2_0 [ T0 ]. -Arguments upaco1_2_0 [ T0 ]. +Arguments paco1_2_0 : clear implicits. +Arguments upaco1_2_0 : clear implicits. Hint Unfold upaco1_2_0. -Arguments paco1_2_1 [ T0 ]. -Arguments upaco1_2_1 [ T0 ]. +Arguments paco1_2_1 : clear implicits. +Arguments upaco1_2_1 : clear implicits. Hint Unfold upaco1_2_1. Section Arg1_3_def. -Variable T0 : Type. Variable gf_0 gf_1 gf_2 : rel1 T0 -> rel1 T0 -> rel1 T0 -> rel1 T0. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -127,43 +122,37 @@ Definition upaco1_3_0( r_0 r_1 r_2: rel1 T0) := paco1_3_0 r_0 r_1 r_2 \1/ r_0. Definition upaco1_3_1( r_0 r_1 r_2: rel1 T0) := paco1_3_1 r_0 r_1 r_2 \1/ r_1. Definition upaco1_3_2( r_0 r_1 r_2: rel1 T0) := paco1_3_2 r_0 r_1 r_2 \1/ r_2. End Arg1_3_def. -Arguments paco1_3_0 [ T0 ]. -Arguments upaco1_3_0 [ T0 ]. +Arguments paco1_3_0 : clear implicits. +Arguments upaco1_3_0 : clear implicits. Hint Unfold upaco1_3_0. -Arguments paco1_3_1 [ T0 ]. -Arguments upaco1_3_1 [ T0 ]. +Arguments paco1_3_1 : clear implicits. +Arguments upaco1_3_1 : clear implicits. Hint Unfold upaco1_3_1. -Arguments paco1_3_2 [ T0 ]. -Arguments upaco1_3_2 [ T0 ]. +Arguments paco1_3_2 : clear implicits. +Arguments upaco1_3_2 : clear implicits. Hint Unfold upaco1_3_2. -(* Less than or equal - internal use only *) -Notation "p <_paco_1= q" := - (forall _paco_x0 (PR: p _paco_x0 : Prop), q _paco_x0 : Prop) - (at level 50, no associativity). - (** 1 Mutual Coinduction *) Section Arg1_1. -Definition monotone1 T0 (gf: rel1 T0 -> rel1 T0) := +Definition monotone1 (gf: rel1 T0 -> rel1 T0) := forall x0 r r' (IN: gf r x0) (LE: r <1= r'), gf r' x0. -Definition _monotone1 T0 (gf: rel1 T0 -> rel1 T0) := +Definition _monotone1 (gf: rel1 T0 -> rel1 T0) := forall r r'(LE: r <1= r'), gf r <1== gf r'. -Lemma monotone1_eq T0 (gf: rel1 T0 -> rel1 T0) : +Lemma monotone1_eq (gf: rel1 T0 -> rel1 T0) : monotone1 gf <-> _monotone1 gf. Proof. unfold monotone1, _monotone1, le1. split; eauto. Qed. -Lemma monotone1_map T0 (gf: rel1 T0 -> rel1 T0) +Lemma monotone1_map (gf: rel1 T0 -> rel1 T0) (MON: _monotone1 gf) : _monotone (fun R0 => curry1 (gf (uncurry1 R0))). Proof. repeat_intros 3. apply curry_map1. apply MON; apply uncurry_map1; auto. Qed. -Variable T0 : Type. Variable gf : rel1 T0 -> rel1 T0. Arguments gf : clear implicits. @@ -244,50 +233,27 @@ Qed. End Arg1_1. -Hint Unfold monotone1. -Hint Resolve paco1_fold. - -Arguments paco1_acc [ T0 ]. -Arguments paco1_mon [ T0 ]. -Arguments paco1_mult_strong [ T0 ]. -Arguments paco1_mult [ T0 ]. -Arguments paco1_fold [ T0 ]. -Arguments paco1_unfold [ T0 ]. - -Global Opaque paco1. -Global Opaque paco1_acc. -Global Opaque paco1_mult. -Global Opaque paco1_fold. -Global Opaque paco1_unfold. - -Instance paco1_inst T0 (gf : rel1 T0->_) r x0 : paco_class (paco1 gf r x0) := -{ pacoacc := paco1_acc gf; - pacomult := paco1_mult gf; - pacofold := paco1_fold gf; - pacounfold := paco1_unfold gf }. - (** 2 Mutual Coinduction *) Section Arg1_2. -Definition monotone1_2 T0 (gf: rel1 T0 -> rel1 T0 -> rel1 T0) := +Definition monotone1_2 (gf: rel1 T0 -> rel1 T0 -> rel1 T0) := forall x0 r_0 r_1 r'_0 r'_1 (IN: gf r_0 r_1 x0) (LE_0: r_0 <1= r'_0)(LE_1: r_1 <1= r'_1), gf r'_0 r'_1 x0. -Definition _monotone1_2 T0 (gf: rel1 T0 -> rel1 T0 -> rel1 T0) := +Definition _monotone1_2 (gf: rel1 T0 -> rel1 T0 -> rel1 T0) := forall r_0 r_1 r'_0 r'_1(LE_0: r_0 <1= r'_0)(LE_1: r_1 <1= r'_1), gf r_0 r_1 <1== gf r'_0 r'_1. -Lemma monotone1_2_eq T0 (gf: rel1 T0 -> rel1 T0 -> rel1 T0) : +Lemma monotone1_2_eq (gf: rel1 T0 -> rel1 T0 -> rel1 T0) : monotone1_2 gf <-> _monotone1_2 gf. Proof. unfold monotone1_2, _monotone1_2, le1. split; eauto. Qed. -Lemma monotone1_2_map T0 (gf: rel1 T0 -> rel1 T0 -> rel1 T0) +Lemma monotone1_2_map (gf: rel1 T0 -> rel1 T0 -> rel1 T0) (MON: _monotone1_2 gf) : _monotone_2 (fun R0 R1 => curry1 (gf (uncurry1 R0) (uncurry1 R1))). Proof. repeat_intros 6. apply curry_map1. apply MON; apply uncurry_map1; auto. Qed. -Variable T0 : Type. Variable gf_0 gf_1 : rel1 T0 -> rel1 T0 -> rel1 T0. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -444,69 +410,27 @@ Qed. End Arg1_2. -Hint Unfold monotone1_2. -Hint Resolve paco1_2_0_fold. -Hint Resolve paco1_2_1_fold. - -Arguments paco1_2_0_acc [ T0 ]. -Arguments paco1_2_1_acc [ T0 ]. -Arguments paco1_2_0_mon [ T0 ]. -Arguments paco1_2_1_mon [ T0 ]. -Arguments paco1_2_0_mult_strong [ T0 ]. -Arguments paco1_2_1_mult_strong [ T0 ]. -Arguments paco1_2_0_mult [ T0 ]. -Arguments paco1_2_1_mult [ T0 ]. -Arguments paco1_2_0_fold [ T0 ]. -Arguments paco1_2_1_fold [ T0 ]. -Arguments paco1_2_0_unfold [ T0 ]. -Arguments paco1_2_1_unfold [ T0 ]. - -Global Opaque paco1_2_0. -Global Opaque paco1_2_0_acc. -Global Opaque paco1_2_0_mult. -Global Opaque paco1_2_0_fold. -Global Opaque paco1_2_0_unfold. - -Global Opaque paco1_2_1. -Global Opaque paco1_2_1_acc. -Global Opaque paco1_2_1_mult. -Global Opaque paco1_2_1_fold. -Global Opaque paco1_2_1_unfold. - -Instance paco1_2_0_inst T0 (gf_0 gf_1 : rel1 T0->_) r_0 r_1 x0 : paco_class (paco1_2_0 gf_0 gf_1 r_0 r_1 x0) := -{ pacoacc := paco1_2_0_acc gf_0 gf_1; - pacomult := paco1_2_0_mult gf_0 gf_1; - pacofold := paco1_2_0_fold gf_0 gf_1; - pacounfold := paco1_2_0_unfold gf_0 gf_1 }. - -Instance paco1_2_1_inst T0 (gf_0 gf_1 : rel1 T0->_) r_0 r_1 x0 : paco_class (paco1_2_1 gf_0 gf_1 r_0 r_1 x0) := -{ pacoacc := paco1_2_1_acc gf_0 gf_1; - pacomult := paco1_2_1_mult gf_0 gf_1; - pacofold := paco1_2_1_fold gf_0 gf_1; - pacounfold := paco1_2_1_unfold gf_0 gf_1 }. - (** 3 Mutual Coinduction *) Section Arg1_3. -Definition monotone1_3 T0 (gf: rel1 T0 -> rel1 T0 -> rel1 T0 -> rel1 T0) := +Definition monotone1_3 (gf: rel1 T0 -> rel1 T0 -> rel1 T0 -> rel1 T0) := forall x0 r_0 r_1 r_2 r'_0 r'_1 r'_2 (IN: gf r_0 r_1 r_2 x0) (LE_0: r_0 <1= r'_0)(LE_1: r_1 <1= r'_1)(LE_2: r_2 <1= r'_2), gf r'_0 r'_1 r'_2 x0. -Definition _monotone1_3 T0 (gf: rel1 T0 -> rel1 T0 -> rel1 T0 -> rel1 T0) := +Definition _monotone1_3 (gf: rel1 T0 -> rel1 T0 -> rel1 T0 -> rel1 T0) := forall r_0 r_1 r_2 r'_0 r'_1 r'_2(LE_0: r_0 <1= r'_0)(LE_1: r_1 <1= r'_1)(LE_2: r_2 <1= r'_2), gf r_0 r_1 r_2 <1== gf r'_0 r'_1 r'_2. -Lemma monotone1_3_eq T0 (gf: rel1 T0 -> rel1 T0 -> rel1 T0 -> rel1 T0) : +Lemma monotone1_3_eq (gf: rel1 T0 -> rel1 T0 -> rel1 T0 -> rel1 T0) : monotone1_3 gf <-> _monotone1_3 gf. Proof. unfold monotone1_3, _monotone1_3, le1. split; eauto. Qed. -Lemma monotone1_3_map T0 (gf: rel1 T0 -> rel1 T0 -> rel1 T0 -> rel1 T0) +Lemma monotone1_3_map (gf: rel1 T0 -> rel1 T0 -> rel1 T0 -> rel1 T0) (MON: _monotone1_3 gf) : _monotone_3 (fun R0 R1 R2 => curry1 (gf (uncurry1 R0) (uncurry1 R1) (uncurry1 R2))). Proof. repeat_intros 9. apply curry_map1. apply MON; apply uncurry_map1; auto. Qed. -Variable T0 : Type. Variable gf_0 gf_1 gf_2 : rel1 T0 -> rel1 T0 -> rel1 T0 -> rel1 T0. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -739,10 +663,72 @@ Qed. End Arg1_3. -Hint Unfold monotone1_3. +End PACO1. + +Global Opaque paco1. + +Hint Unfold upaco1. +Hint Resolve paco1_fold. +Hint Unfold monotone1. + +Arguments paco1_acc [ T0 ]. +Arguments paco1_mon [ T0 ]. +Arguments paco1_mult_strong [ T0 ]. +Arguments paco1_mult [ T0 ]. +Arguments paco1_fold [ T0 ]. +Arguments paco1_unfold [ T0 ]. + +Instance paco1_inst T0 (gf : rel1 T0->_) r x0 : paco_class (paco1 gf r x0) := +{ pacoacc := paco1_acc gf; + pacomult := paco1_mult gf; + pacofold := paco1_fold gf; + pacounfold := paco1_unfold gf }. + +Global Opaque paco1_2_0. +Global Opaque paco1_2_1. + +Hint Unfold upaco1_2_0. +Hint Unfold upaco1_2_1. +Hint Resolve paco1_2_0_fold. +Hint Resolve paco1_2_1_fold. +Hint Unfold monotone1_2. + +Arguments paco1_2_0_acc [ T0 ]. +Arguments paco1_2_1_acc [ T0 ]. +Arguments paco1_2_0_mon [ T0 ]. +Arguments paco1_2_1_mon [ T0 ]. +Arguments paco1_2_0_mult_strong [ T0 ]. +Arguments paco1_2_1_mult_strong [ T0 ]. +Arguments paco1_2_0_mult [ T0 ]. +Arguments paco1_2_1_mult [ T0 ]. +Arguments paco1_2_0_fold [ T0 ]. +Arguments paco1_2_1_fold [ T0 ]. +Arguments paco1_2_0_unfold [ T0 ]. +Arguments paco1_2_1_unfold [ T0 ]. + +Instance paco1_2_0_inst T0 (gf_0 gf_1 : rel1 T0->_) r_0 r_1 x0 : paco_class (paco1_2_0 gf_0 gf_1 r_0 r_1 x0) := +{ pacoacc := paco1_2_0_acc gf_0 gf_1; + pacomult := paco1_2_0_mult gf_0 gf_1; + pacofold := paco1_2_0_fold gf_0 gf_1; + pacounfold := paco1_2_0_unfold gf_0 gf_1 }. + +Instance paco1_2_1_inst T0 (gf_0 gf_1 : rel1 T0->_) r_0 r_1 x0 : paco_class (paco1_2_1 gf_0 gf_1 r_0 r_1 x0) := +{ pacoacc := paco1_2_1_acc gf_0 gf_1; + pacomult := paco1_2_1_mult gf_0 gf_1; + pacofold := paco1_2_1_fold gf_0 gf_1; + pacounfold := paco1_2_1_unfold gf_0 gf_1 }. + +Global Opaque paco1_3_0. +Global Opaque paco1_3_1. +Global Opaque paco1_3_2. + +Hint Unfold upaco1_3_0. +Hint Unfold upaco1_3_1. +Hint Unfold upaco1_3_2. Hint Resolve paco1_3_0_fold. Hint Resolve paco1_3_1_fold. Hint Resolve paco1_3_2_fold. +Hint Unfold monotone1_3. Arguments paco1_3_0_acc [ T0 ]. Arguments paco1_3_1_acc [ T0 ]. @@ -763,24 +749,6 @@ Arguments paco1_3_0_unfold [ T0 ]. Arguments paco1_3_1_unfold [ T0 ]. Arguments paco1_3_2_unfold [ T0 ]. -Global Opaque paco1_3_0. -Global Opaque paco1_3_0_acc. -Global Opaque paco1_3_0_mult. -Global Opaque paco1_3_0_fold. -Global Opaque paco1_3_0_unfold. - -Global Opaque paco1_3_1. -Global Opaque paco1_3_1_acc. -Global Opaque paco1_3_1_mult. -Global Opaque paco1_3_1_fold. -Global Opaque paco1_3_1_unfold. - -Global Opaque paco1_3_2. -Global Opaque paco1_3_2_acc. -Global Opaque paco1_3_2_mult. -Global Opaque paco1_3_2_fold. -Global Opaque paco1_3_2_unfold. - Instance paco1_3_0_inst T0 (gf_0 gf_1 gf_2 : rel1 T0->_) r_0 r_1 r_2 x0 : paco_class (paco1_3_0 gf_0 gf_1 gf_2 r_0 r_1 r_2 x0) := { pacoacc := paco1_3_0_acc gf_0 gf_1 gf_2; pacomult := paco1_3_0_mult gf_0 gf_1 gf_2; diff --git a/src/paco10.v b/src/paco10.v index b717d48..defd83f 100644 --- a/src/paco10.v +++ b/src/paco10.v @@ -2,7 +2,7 @@ Require Export paconotation pacotacuser. Require Import paconotation_internal pacotac pacon. Set Implicit Arguments. -Section SIGT. +Section PACO10. Variable T0 : Type. Variable T1 : forall (x0: @T0), Type. @@ -84,22 +84,10 @@ Proof. apply curry_map_rev10. eapply le1_trans; [|eauto]. apply uncurry_bij1_10. Qed. -End SIGT. - (** ** Predicates of Arity 10 *) Section Arg10_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. Variable gf : rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9. Arguments gf : clear implicits. @@ -108,21 +96,11 @@ Definition paco10( r: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) : rel10 T0 T1 T2 T3 T Definition upaco10( r: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) := paco10 r \10/ r. End Arg10_def. -Arguments paco10 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments upaco10 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10 : clear implicits. +Arguments upaco10 : clear implicits. Hint Unfold upaco10. Section Arg10_2_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. Variable gf_0 gf_1 : rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -136,24 +114,14 @@ Definition paco10_2_1( r_0 r_1: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) : rel10 T0 Definition upaco10_2_0( r_0 r_1: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) := paco10_2_0 r_0 r_1 \10/ r_0. Definition upaco10_2_1( r_0 r_1: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) := paco10_2_1 r_0 r_1 \10/ r_1. End Arg10_2_def. -Arguments paco10_2_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments upaco10_2_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_2_0 : clear implicits. +Arguments upaco10_2_0 : clear implicits. Hint Unfold upaco10_2_0. -Arguments paco10_2_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments upaco10_2_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_2_1 : clear implicits. +Arguments upaco10_2_1 : clear implicits. Hint Unfold upaco10_2_1. Section Arg10_3_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. Variable gf_0 gf_1 gf_2 : rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -172,52 +140,37 @@ Definition upaco10_3_0( r_0 r_1 r_2: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) := pac Definition upaco10_3_1( r_0 r_1 r_2: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) := paco10_3_1 r_0 r_1 r_2 \10/ r_1. Definition upaco10_3_2( r_0 r_1 r_2: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) := paco10_3_2 r_0 r_1 r_2 \10/ r_2. End Arg10_3_def. -Arguments paco10_3_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments upaco10_3_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_3_0 : clear implicits. +Arguments upaco10_3_0 : clear implicits. Hint Unfold upaco10_3_0. -Arguments paco10_3_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments upaco10_3_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_3_1 : clear implicits. +Arguments upaco10_3_1 : clear implicits. Hint Unfold upaco10_3_1. -Arguments paco10_3_2 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments upaco10_3_2 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_3_2 : clear implicits. +Arguments upaco10_3_2 : clear implicits. Hint Unfold upaco10_3_2. -(* Less than or equal - internal use only *) -Notation "p <_paco_10= q" := - (forall _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 _paco_x9 (PR: p _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 _paco_x9 : Prop), q _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 _paco_x9 : Prop) - (at level 50, no associativity). - (** 1 Mutual Coinduction *) Section Arg10_1. -Definition monotone10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) := +Definition monotone10 (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 r r' (IN: gf r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (LE: r <10= r'), gf r' x0 x1 x2 x3 x4 x5 x6 x7 x8 x9. -Definition _monotone10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) := +Definition _monotone10 (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) := forall r r'(LE: r <10= r'), gf r <10== gf r'. -Lemma monotone10_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) : +Lemma monotone10_eq (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) : monotone10 gf <-> _monotone10 gf. Proof. unfold monotone10, _monotone10, le10. split; eauto. Qed. -Lemma monotone10_map T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) +Lemma monotone10_map (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) (MON: _monotone10 gf) : _monotone (fun R0 => curry10 (gf (uncurry10 R0))). Proof. repeat_intros 3. apply curry_map10. apply MON; apply uncurry_map10; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. Variable gf : rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9. Arguments gf : clear implicits. @@ -298,59 +251,27 @@ Qed. End Arg10_1. -Hint Unfold monotone10. -Hint Resolve paco10_fold. - -Arguments paco10_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments paco10_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments paco10_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments paco10_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments paco10_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments paco10_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. - -Global Opaque paco10. -Global Opaque paco10_acc. -Global Opaque paco10_mult. -Global Opaque paco10_fold. -Global Opaque paco10_unfold. - -Instance paco10_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 (gf : rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9->_) r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 : paco_class (paco10 gf r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) := -{ pacoacc := paco10_acc gf; - pacomult := paco10_mult gf; - pacofold := paco10_fold gf; - pacounfold := paco10_unfold gf }. - (** 2 Mutual Coinduction *) Section Arg10_2. -Definition monotone10_2 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) := +Definition monotone10_2 (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 r_0 r_1 r'_0 r'_1 (IN: gf r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (LE_0: r_0 <10= r'_0)(LE_1: r_1 <10= r'_1), gf r'_0 r'_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9. -Definition _monotone10_2 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) := +Definition _monotone10_2 (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) := forall r_0 r_1 r'_0 r'_1(LE_0: r_0 <10= r'_0)(LE_1: r_1 <10= r'_1), gf r_0 r_1 <10== gf r'_0 r'_1. -Lemma monotone10_2_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) : +Lemma monotone10_2_eq (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) : monotone10_2 gf <-> _monotone10_2 gf. Proof. unfold monotone10_2, _monotone10_2, le10. split; eauto. Qed. -Lemma monotone10_2_map T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) +Lemma monotone10_2_map (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) (MON: _monotone10_2 gf) : _monotone_2 (fun R0 R1 => curry10 (gf (uncurry10 R0) (uncurry10 R1))). Proof. repeat_intros 6. apply curry_map10. apply MON; apply uncurry_map10; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. Variable gf_0 gf_1 : rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -507,78 +428,27 @@ Qed. End Arg10_2. -Hint Unfold monotone10_2. -Hint Resolve paco10_2_0_fold. -Hint Resolve paco10_2_1_fold. - -Arguments paco10_2_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments paco10_2_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments paco10_2_0_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments paco10_2_1_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments paco10_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments paco10_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments paco10_2_0_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments paco10_2_1_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments paco10_2_0_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments paco10_2_1_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments paco10_2_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Arguments paco10_2_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. - -Global Opaque paco10_2_0. -Global Opaque paco10_2_0_acc. -Global Opaque paco10_2_0_mult. -Global Opaque paco10_2_0_fold. -Global Opaque paco10_2_0_unfold. - -Global Opaque paco10_2_1. -Global Opaque paco10_2_1_acc. -Global Opaque paco10_2_1_mult. -Global Opaque paco10_2_1_fold. -Global Opaque paco10_2_1_unfold. - -Instance paco10_2_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 (gf_0 gf_1 : rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 : paco_class (paco10_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) := -{ pacoacc := paco10_2_0_acc gf_0 gf_1; - pacomult := paco10_2_0_mult gf_0 gf_1; - pacofold := paco10_2_0_fold gf_0 gf_1; - pacounfold := paco10_2_0_unfold gf_0 gf_1 }. - -Instance paco10_2_1_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 (gf_0 gf_1 : rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 : paco_class (paco10_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) := -{ pacoacc := paco10_2_1_acc gf_0 gf_1; - pacomult := paco10_2_1_mult gf_0 gf_1; - pacofold := paco10_2_1_fold gf_0 gf_1; - pacounfold := paco10_2_1_unfold gf_0 gf_1 }. - (** 3 Mutual Coinduction *) Section Arg10_3. -Definition monotone10_3 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) := +Definition monotone10_3 (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 r_0 r_1 r_2 r'_0 r'_1 r'_2 (IN: gf r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (LE_0: r_0 <10= r'_0)(LE_1: r_1 <10= r'_1)(LE_2: r_2 <10= r'_2), gf r'_0 r'_1 r'_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9. -Definition _monotone10_3 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) := +Definition _monotone10_3 (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) := forall r_0 r_1 r_2 r'_0 r'_1 r'_2(LE_0: r_0 <10= r'_0)(LE_1: r_1 <10= r'_1)(LE_2: r_2 <10= r'_2), gf r_0 r_1 r_2 <10== gf r'_0 r'_1 r'_2. -Lemma monotone10_3_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) : +Lemma monotone10_3_eq (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) : monotone10_3 gf <-> _monotone10_3 gf. Proof. unfold monotone10_3, _monotone10_3, le10. split; eauto. Qed. -Lemma monotone10_3_map T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) +Lemma monotone10_3_map (gf: rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) (MON: _monotone10_3 gf) : _monotone_3 (fun R0 R1 R2 => curry10 (gf (uncurry10 R0) (uncurry10 R1) (uncurry10 R2))). Proof. repeat_intros 9. apply curry_map10. apply MON; apply uncurry_map10; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. Variable gf_0 gf_1 gf_2 : rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 -> rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -811,10 +681,72 @@ Qed. End Arg10_3. -Hint Unfold monotone10_3. +End PACO10. + +Global Opaque paco10. + +Hint Unfold upaco10. +Hint Resolve paco10_fold. +Hint Unfold monotone10. + +Arguments paco10_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. + +Instance paco10_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 (gf : rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9->_) r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 : paco_class (paco10 gf r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) := +{ pacoacc := paco10_acc gf; + pacomult := paco10_mult gf; + pacofold := paco10_fold gf; + pacounfold := paco10_unfold gf }. + +Global Opaque paco10_2_0. +Global Opaque paco10_2_1. + +Hint Unfold upaco10_2_0. +Hint Unfold upaco10_2_1. +Hint Resolve paco10_2_0_fold. +Hint Resolve paco10_2_1_fold. +Hint Unfold monotone10_2. + +Arguments paco10_2_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_2_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_2_0_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_2_1_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_2_0_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_2_1_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_2_0_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_2_1_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_2_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. +Arguments paco10_2_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. + +Instance paco10_2_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 (gf_0 gf_1 : rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 : paco_class (paco10_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) := +{ pacoacc := paco10_2_0_acc gf_0 gf_1; + pacomult := paco10_2_0_mult gf_0 gf_1; + pacofold := paco10_2_0_fold gf_0 gf_1; + pacounfold := paco10_2_0_unfold gf_0 gf_1 }. + +Instance paco10_2_1_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 (gf_0 gf_1 : rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 : paco_class (paco10_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) := +{ pacoacc := paco10_2_1_acc gf_0 gf_1; + pacomult := paco10_2_1_mult gf_0 gf_1; + pacofold := paco10_2_1_fold gf_0 gf_1; + pacounfold := paco10_2_1_unfold gf_0 gf_1 }. + +Global Opaque paco10_3_0. +Global Opaque paco10_3_1. +Global Opaque paco10_3_2. + +Hint Unfold upaco10_3_0. +Hint Unfold upaco10_3_1. +Hint Unfold upaco10_3_2. Hint Resolve paco10_3_0_fold. Hint Resolve paco10_3_1_fold. Hint Resolve paco10_3_2_fold. +Hint Unfold monotone10_3. Arguments paco10_3_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. Arguments paco10_3_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. @@ -835,24 +767,6 @@ Arguments paco10_3_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. Arguments paco10_3_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. Arguments paco10_3_2_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 ]. -Global Opaque paco10_3_0. -Global Opaque paco10_3_0_acc. -Global Opaque paco10_3_0_mult. -Global Opaque paco10_3_0_fold. -Global Opaque paco10_3_0_unfold. - -Global Opaque paco10_3_1. -Global Opaque paco10_3_1_acc. -Global Opaque paco10_3_1_mult. -Global Opaque paco10_3_1_fold. -Global Opaque paco10_3_1_unfold. - -Global Opaque paco10_3_2. -Global Opaque paco10_3_2_acc. -Global Opaque paco10_3_2_mult. -Global Opaque paco10_3_2_fold. -Global Opaque paco10_3_2_unfold. - Instance paco10_3_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 (gf_0 gf_1 gf_2 : rel10 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9->_) r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 : paco_class (paco10_3_0 gf_0 gf_1 gf_2 r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) := { pacoacc := paco10_3_0_acc gf_0 gf_1 gf_2; pacomult := paco10_3_0_mult gf_0 gf_1 gf_2; diff --git a/src/paco11.v b/src/paco11.v index a57fa95..f7fad54 100644 --- a/src/paco11.v +++ b/src/paco11.v @@ -2,7 +2,7 @@ Require Export paconotation pacotacuser. Require Import paconotation_internal pacotac pacon. Set Implicit Arguments. -Section SIGT. +Section PACO11. Variable T0 : Type. Variable T1 : forall (x0: @T0), Type. @@ -86,23 +86,10 @@ Proof. apply curry_map_rev11. eapply le1_trans; [|eauto]. apply uncurry_bij1_11. Qed. -End SIGT. - (** ** Predicates of Arity 11 *) Section Arg11_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. Variable gf : rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10. Arguments gf : clear implicits. @@ -111,22 +98,11 @@ Definition paco11( r: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) : rel11 T0 T1 T2 Definition upaco11( r: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) := paco11 r \11/ r. End Arg11_def. -Arguments paco11 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments upaco11 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11 : clear implicits. +Arguments upaco11 : clear implicits. Hint Unfold upaco11. Section Arg11_2_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. Variable gf_0 gf_1 : rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -140,25 +116,14 @@ Definition paco11_2_1( r_0 r_1: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) : rel11 Definition upaco11_2_0( r_0 r_1: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) := paco11_2_0 r_0 r_1 \11/ r_0. Definition upaco11_2_1( r_0 r_1: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) := paco11_2_1 r_0 r_1 \11/ r_1. End Arg11_2_def. -Arguments paco11_2_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments upaco11_2_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_2_0 : clear implicits. +Arguments upaco11_2_0 : clear implicits. Hint Unfold upaco11_2_0. -Arguments paco11_2_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments upaco11_2_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_2_1 : clear implicits. +Arguments upaco11_2_1 : clear implicits. Hint Unfold upaco11_2_1. Section Arg11_3_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. Variable gf_0 gf_1 gf_2 : rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -177,53 +142,37 @@ Definition upaco11_3_0( r_0 r_1 r_2: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) := Definition upaco11_3_1( r_0 r_1 r_2: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) := paco11_3_1 r_0 r_1 r_2 \11/ r_1. Definition upaco11_3_2( r_0 r_1 r_2: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) := paco11_3_2 r_0 r_1 r_2 \11/ r_2. End Arg11_3_def. -Arguments paco11_3_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments upaco11_3_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_3_0 : clear implicits. +Arguments upaco11_3_0 : clear implicits. Hint Unfold upaco11_3_0. -Arguments paco11_3_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments upaco11_3_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_3_1 : clear implicits. +Arguments upaco11_3_1 : clear implicits. Hint Unfold upaco11_3_1. -Arguments paco11_3_2 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments upaco11_3_2 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_3_2 : clear implicits. +Arguments upaco11_3_2 : clear implicits. Hint Unfold upaco11_3_2. -(* Less than or equal - internal use only *) -Notation "p <_paco_11= q" := - (forall _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 _paco_x9 _paco_x10 (PR: p _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 _paco_x9 _paco_x10 : Prop), q _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 _paco_x9 _paco_x10 : Prop) - (at level 50, no associativity). - (** 1 Mutual Coinduction *) Section Arg11_1. -Definition monotone11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) := +Definition monotone11 (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 r r' (IN: gf r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (LE: r <11= r'), gf r' x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10. -Definition _monotone11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) := +Definition _monotone11 (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) := forall r r'(LE: r <11= r'), gf r <11== gf r'. -Lemma monotone11_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) : +Lemma monotone11_eq (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) : monotone11 gf <-> _monotone11 gf. Proof. unfold monotone11, _monotone11, le11. split; eauto. Qed. -Lemma monotone11_map T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) +Lemma monotone11_map (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) (MON: _monotone11 gf) : _monotone (fun R0 => curry11 (gf (uncurry11 R0))). Proof. repeat_intros 3. apply curry_map11. apply MON; apply uncurry_map11; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. Variable gf : rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10. Arguments gf : clear implicits. @@ -304,60 +253,27 @@ Qed. End Arg11_1. -Hint Unfold monotone11. -Hint Resolve paco11_fold. - -Arguments paco11_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments paco11_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments paco11_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments paco11_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments paco11_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments paco11_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. - -Global Opaque paco11. -Global Opaque paco11_acc. -Global Opaque paco11_mult. -Global Opaque paco11_fold. -Global Opaque paco11_unfold. - -Instance paco11_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 (gf : rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10->_) r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 : paco_class (paco11 gf r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) := -{ pacoacc := paco11_acc gf; - pacomult := paco11_mult gf; - pacofold := paco11_fold gf; - pacounfold := paco11_unfold gf }. - (** 2 Mutual Coinduction *) Section Arg11_2. -Definition monotone11_2 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) := +Definition monotone11_2 (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 r_0 r_1 r'_0 r'_1 (IN: gf r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (LE_0: r_0 <11= r'_0)(LE_1: r_1 <11= r'_1), gf r'_0 r'_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10. -Definition _monotone11_2 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) := +Definition _monotone11_2 (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) := forall r_0 r_1 r'_0 r'_1(LE_0: r_0 <11= r'_0)(LE_1: r_1 <11= r'_1), gf r_0 r_1 <11== gf r'_0 r'_1. -Lemma monotone11_2_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) : +Lemma monotone11_2_eq (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) : monotone11_2 gf <-> _monotone11_2 gf. Proof. unfold monotone11_2, _monotone11_2, le11. split; eauto. Qed. -Lemma monotone11_2_map T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) +Lemma monotone11_2_map (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) (MON: _monotone11_2 gf) : _monotone_2 (fun R0 R1 => curry11 (gf (uncurry11 R0) (uncurry11 R1))). Proof. repeat_intros 6. apply curry_map11. apply MON; apply uncurry_map11; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. Variable gf_0 gf_1 : rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -514,79 +430,27 @@ Qed. End Arg11_2. -Hint Unfold monotone11_2. -Hint Resolve paco11_2_0_fold. -Hint Resolve paco11_2_1_fold. - -Arguments paco11_2_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments paco11_2_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments paco11_2_0_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments paco11_2_1_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments paco11_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments paco11_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments paco11_2_0_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments paco11_2_1_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments paco11_2_0_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments paco11_2_1_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments paco11_2_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Arguments paco11_2_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. - -Global Opaque paco11_2_0. -Global Opaque paco11_2_0_acc. -Global Opaque paco11_2_0_mult. -Global Opaque paco11_2_0_fold. -Global Opaque paco11_2_0_unfold. - -Global Opaque paco11_2_1. -Global Opaque paco11_2_1_acc. -Global Opaque paco11_2_1_mult. -Global Opaque paco11_2_1_fold. -Global Opaque paco11_2_1_unfold. - -Instance paco11_2_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 (gf_0 gf_1 : rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 : paco_class (paco11_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) := -{ pacoacc := paco11_2_0_acc gf_0 gf_1; - pacomult := paco11_2_0_mult gf_0 gf_1; - pacofold := paco11_2_0_fold gf_0 gf_1; - pacounfold := paco11_2_0_unfold gf_0 gf_1 }. - -Instance paco11_2_1_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 (gf_0 gf_1 : rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 : paco_class (paco11_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) := -{ pacoacc := paco11_2_1_acc gf_0 gf_1; - pacomult := paco11_2_1_mult gf_0 gf_1; - pacofold := paco11_2_1_fold gf_0 gf_1; - pacounfold := paco11_2_1_unfold gf_0 gf_1 }. - (** 3 Mutual Coinduction *) Section Arg11_3. -Definition monotone11_3 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) := +Definition monotone11_3 (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 r_0 r_1 r_2 r'_0 r'_1 r'_2 (IN: gf r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (LE_0: r_0 <11= r'_0)(LE_1: r_1 <11= r'_1)(LE_2: r_2 <11= r'_2), gf r'_0 r'_1 r'_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10. -Definition _monotone11_3 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) := +Definition _monotone11_3 (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) := forall r_0 r_1 r_2 r'_0 r'_1 r'_2(LE_0: r_0 <11= r'_0)(LE_1: r_1 <11= r'_1)(LE_2: r_2 <11= r'_2), gf r_0 r_1 r_2 <11== gf r'_0 r'_1 r'_2. -Lemma monotone11_3_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) : +Lemma monotone11_3_eq (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) : monotone11_3 gf <-> _monotone11_3 gf. Proof. unfold monotone11_3, _monotone11_3, le11. split; eauto. Qed. -Lemma monotone11_3_map T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) +Lemma monotone11_3_map (gf: rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) (MON: _monotone11_3 gf) : _monotone_3 (fun R0 R1 R2 => curry11 (gf (uncurry11 R0) (uncurry11 R1) (uncurry11 R2))). Proof. repeat_intros 9. apply curry_map11. apply MON; apply uncurry_map11; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. Variable gf_0 gf_1 gf_2 : rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 -> rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -819,10 +683,72 @@ Qed. End Arg11_3. -Hint Unfold monotone11_3. +End PACO11. + +Global Opaque paco11. + +Hint Unfold upaco11. +Hint Resolve paco11_fold. +Hint Unfold monotone11. + +Arguments paco11_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. + +Instance paco11_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 (gf : rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10->_) r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 : paco_class (paco11 gf r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) := +{ pacoacc := paco11_acc gf; + pacomult := paco11_mult gf; + pacofold := paco11_fold gf; + pacounfold := paco11_unfold gf }. + +Global Opaque paco11_2_0. +Global Opaque paco11_2_1. + +Hint Unfold upaco11_2_0. +Hint Unfold upaco11_2_1. +Hint Resolve paco11_2_0_fold. +Hint Resolve paco11_2_1_fold. +Hint Unfold monotone11_2. + +Arguments paco11_2_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_2_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_2_0_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_2_1_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_2_0_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_2_1_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_2_0_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_2_1_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_2_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. +Arguments paco11_2_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. + +Instance paco11_2_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 (gf_0 gf_1 : rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 : paco_class (paco11_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) := +{ pacoacc := paco11_2_0_acc gf_0 gf_1; + pacomult := paco11_2_0_mult gf_0 gf_1; + pacofold := paco11_2_0_fold gf_0 gf_1; + pacounfold := paco11_2_0_unfold gf_0 gf_1 }. + +Instance paco11_2_1_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 (gf_0 gf_1 : rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 : paco_class (paco11_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) := +{ pacoacc := paco11_2_1_acc gf_0 gf_1; + pacomult := paco11_2_1_mult gf_0 gf_1; + pacofold := paco11_2_1_fold gf_0 gf_1; + pacounfold := paco11_2_1_unfold gf_0 gf_1 }. + +Global Opaque paco11_3_0. +Global Opaque paco11_3_1. +Global Opaque paco11_3_2. + +Hint Unfold upaco11_3_0. +Hint Unfold upaco11_3_1. +Hint Unfold upaco11_3_2. Hint Resolve paco11_3_0_fold. Hint Resolve paco11_3_1_fold. Hint Resolve paco11_3_2_fold. +Hint Unfold monotone11_3. Arguments paco11_3_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. Arguments paco11_3_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. @@ -843,24 +769,6 @@ Arguments paco11_3_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. Arguments paco11_3_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. Arguments paco11_3_2_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ]. -Global Opaque paco11_3_0. -Global Opaque paco11_3_0_acc. -Global Opaque paco11_3_0_mult. -Global Opaque paco11_3_0_fold. -Global Opaque paco11_3_0_unfold. - -Global Opaque paco11_3_1. -Global Opaque paco11_3_1_acc. -Global Opaque paco11_3_1_mult. -Global Opaque paco11_3_1_fold. -Global Opaque paco11_3_1_unfold. - -Global Opaque paco11_3_2. -Global Opaque paco11_3_2_acc. -Global Opaque paco11_3_2_mult. -Global Opaque paco11_3_2_fold. -Global Opaque paco11_3_2_unfold. - Instance paco11_3_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 (gf_0 gf_1 gf_2 : rel11 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10->_) r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 : paco_class (paco11_3_0 gf_0 gf_1 gf_2 r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) := { pacoacc := paco11_3_0_acc gf_0 gf_1 gf_2; pacomult := paco11_3_0_mult gf_0 gf_1 gf_2; diff --git a/src/paco12.v b/src/paco12.v index 51610c8..5fcb7a3 100644 --- a/src/paco12.v +++ b/src/paco12.v @@ -2,7 +2,7 @@ Require Export paconotation pacotacuser. Require Import paconotation_internal pacotac pacon. Set Implicit Arguments. -Section SIGT. +Section PACO12. Variable T0 : Type. Variable T1 : forall (x0: @T0), Type. @@ -88,24 +88,10 @@ Proof. apply curry_map_rev12. eapply le1_trans; [|eauto]. apply uncurry_bij1_12. Qed. -End SIGT. - (** ** Predicates of Arity 12 *) Section Arg12_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. Variable gf : rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11. Arguments gf : clear implicits. @@ -114,23 +100,11 @@ Definition paco12( r: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) : rel12 T0 T1 Definition upaco12( r: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) := paco12 r \12/ r. End Arg12_def. -Arguments paco12 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments upaco12 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12 : clear implicits. +Arguments upaco12 : clear implicits. Hint Unfold upaco12. Section Arg12_2_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. Variable gf_0 gf_1 : rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -144,26 +118,14 @@ Definition paco12_2_1( r_0 r_1: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) : r Definition upaco12_2_0( r_0 r_1: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) := paco12_2_0 r_0 r_1 \12/ r_0. Definition upaco12_2_1( r_0 r_1: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) := paco12_2_1 r_0 r_1 \12/ r_1. End Arg12_2_def. -Arguments paco12_2_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments upaco12_2_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_2_0 : clear implicits. +Arguments upaco12_2_0 : clear implicits. Hint Unfold upaco12_2_0. -Arguments paco12_2_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments upaco12_2_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_2_1 : clear implicits. +Arguments upaco12_2_1 : clear implicits. Hint Unfold upaco12_2_1. Section Arg12_3_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. Variable gf_0 gf_1 gf_2 : rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -182,54 +144,37 @@ Definition upaco12_3_0( r_0 r_1 r_2: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 Definition upaco12_3_1( r_0 r_1 r_2: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) := paco12_3_1 r_0 r_1 r_2 \12/ r_1. Definition upaco12_3_2( r_0 r_1 r_2: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) := paco12_3_2 r_0 r_1 r_2 \12/ r_2. End Arg12_3_def. -Arguments paco12_3_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments upaco12_3_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_3_0 : clear implicits. +Arguments upaco12_3_0 : clear implicits. Hint Unfold upaco12_3_0. -Arguments paco12_3_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments upaco12_3_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_3_1 : clear implicits. +Arguments upaco12_3_1 : clear implicits. Hint Unfold upaco12_3_1. -Arguments paco12_3_2 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments upaco12_3_2 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_3_2 : clear implicits. +Arguments upaco12_3_2 : clear implicits. Hint Unfold upaco12_3_2. -(* Less than or equal - internal use only *) -Notation "p <_paco_12= q" := - (forall _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 _paco_x9 _paco_x10 _paco_x11 (PR: p _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 _paco_x9 _paco_x10 _paco_x11 : Prop), q _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 _paco_x9 _paco_x10 _paco_x11 : Prop) - (at level 50, no associativity). - (** 1 Mutual Coinduction *) Section Arg12_1. -Definition monotone12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) := +Definition monotone12 (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 r r' (IN: gf r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11) (LE: r <12= r'), gf r' x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11. -Definition _monotone12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) := +Definition _monotone12 (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) := forall r r'(LE: r <12= r'), gf r <12== gf r'. -Lemma monotone12_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) : +Lemma monotone12_eq (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) : monotone12 gf <-> _monotone12 gf. Proof. unfold monotone12, _monotone12, le12. split; eauto. Qed. -Lemma monotone12_map T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) +Lemma monotone12_map (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) (MON: _monotone12 gf) : _monotone (fun R0 => curry12 (gf (uncurry12 R0))). Proof. repeat_intros 3. apply curry_map12. apply MON; apply uncurry_map12; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. Variable gf : rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11. Arguments gf : clear implicits. @@ -310,61 +255,27 @@ Qed. End Arg12_1. -Hint Unfold monotone12. -Hint Resolve paco12_fold. - -Arguments paco12_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments paco12_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments paco12_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments paco12_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments paco12_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments paco12_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. - -Global Opaque paco12. -Global Opaque paco12_acc. -Global Opaque paco12_mult. -Global Opaque paco12_fold. -Global Opaque paco12_unfold. - -Instance paco12_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 (gf : rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11->_) r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 : paco_class (paco12 gf r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11) := -{ pacoacc := paco12_acc gf; - pacomult := paco12_mult gf; - pacofold := paco12_fold gf; - pacounfold := paco12_unfold gf }. - (** 2 Mutual Coinduction *) Section Arg12_2. -Definition monotone12_2 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) := +Definition monotone12_2 (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 r_0 r_1 r'_0 r'_1 (IN: gf r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11) (LE_0: r_0 <12= r'_0)(LE_1: r_1 <12= r'_1), gf r'_0 r'_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11. -Definition _monotone12_2 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) := +Definition _monotone12_2 (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) := forall r_0 r_1 r'_0 r'_1(LE_0: r_0 <12= r'_0)(LE_1: r_1 <12= r'_1), gf r_0 r_1 <12== gf r'_0 r'_1. -Lemma monotone12_2_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) : +Lemma monotone12_2_eq (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) : monotone12_2 gf <-> _monotone12_2 gf. Proof. unfold monotone12_2, _monotone12_2, le12. split; eauto. Qed. -Lemma monotone12_2_map T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) +Lemma monotone12_2_map (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) (MON: _monotone12_2 gf) : _monotone_2 (fun R0 R1 => curry12 (gf (uncurry12 R0) (uncurry12 R1))). Proof. repeat_intros 6. apply curry_map12. apply MON; apply uncurry_map12; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. Variable gf_0 gf_1 : rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -521,80 +432,27 @@ Qed. End Arg12_2. -Hint Unfold monotone12_2. -Hint Resolve paco12_2_0_fold. -Hint Resolve paco12_2_1_fold. - -Arguments paco12_2_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments paco12_2_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments paco12_2_0_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments paco12_2_1_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments paco12_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments paco12_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments paco12_2_0_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments paco12_2_1_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments paco12_2_0_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments paco12_2_1_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments paco12_2_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Arguments paco12_2_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. - -Global Opaque paco12_2_0. -Global Opaque paco12_2_0_acc. -Global Opaque paco12_2_0_mult. -Global Opaque paco12_2_0_fold. -Global Opaque paco12_2_0_unfold. - -Global Opaque paco12_2_1. -Global Opaque paco12_2_1_acc. -Global Opaque paco12_2_1_mult. -Global Opaque paco12_2_1_fold. -Global Opaque paco12_2_1_unfold. - -Instance paco12_2_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 (gf_0 gf_1 : rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 : paco_class (paco12_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11) := -{ pacoacc := paco12_2_0_acc gf_0 gf_1; - pacomult := paco12_2_0_mult gf_0 gf_1; - pacofold := paco12_2_0_fold gf_0 gf_1; - pacounfold := paco12_2_0_unfold gf_0 gf_1 }. - -Instance paco12_2_1_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 (gf_0 gf_1 : rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 : paco_class (paco12_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11) := -{ pacoacc := paco12_2_1_acc gf_0 gf_1; - pacomult := paco12_2_1_mult gf_0 gf_1; - pacofold := paco12_2_1_fold gf_0 gf_1; - pacounfold := paco12_2_1_unfold gf_0 gf_1 }. - (** 3 Mutual Coinduction *) Section Arg12_3. -Definition monotone12_3 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) := +Definition monotone12_3 (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 r_0 r_1 r_2 r'_0 r'_1 r'_2 (IN: gf r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11) (LE_0: r_0 <12= r'_0)(LE_1: r_1 <12= r'_1)(LE_2: r_2 <12= r'_2), gf r'_0 r'_1 r'_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11. -Definition _monotone12_3 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) := +Definition _monotone12_3 (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) := forall r_0 r_1 r_2 r'_0 r'_1 r'_2(LE_0: r_0 <12= r'_0)(LE_1: r_1 <12= r'_1)(LE_2: r_2 <12= r'_2), gf r_0 r_1 r_2 <12== gf r'_0 r'_1 r'_2. -Lemma monotone12_3_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) : +Lemma monotone12_3_eq (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) : monotone12_3 gf <-> _monotone12_3 gf. Proof. unfold monotone12_3, _monotone12_3, le12. split; eauto. Qed. -Lemma monotone12_3_map T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) +Lemma monotone12_3_map (gf: rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) (MON: _monotone12_3 gf) : _monotone_3 (fun R0 R1 R2 => curry12 (gf (uncurry12 R0) (uncurry12 R1) (uncurry12 R2))). Proof. repeat_intros 9. apply curry_map12. apply MON; apply uncurry_map12; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. Variable gf_0 gf_1 gf_2 : rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 -> rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -827,10 +685,72 @@ Qed. End Arg12_3. -Hint Unfold monotone12_3. +End PACO12. + +Global Opaque paco12. + +Hint Unfold upaco12. +Hint Resolve paco12_fold. +Hint Unfold monotone12. + +Arguments paco12_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. + +Instance paco12_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 (gf : rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11->_) r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 : paco_class (paco12 gf r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11) := +{ pacoacc := paco12_acc gf; + pacomult := paco12_mult gf; + pacofold := paco12_fold gf; + pacounfold := paco12_unfold gf }. + +Global Opaque paco12_2_0. +Global Opaque paco12_2_1. + +Hint Unfold upaco12_2_0. +Hint Unfold upaco12_2_1. +Hint Resolve paco12_2_0_fold. +Hint Resolve paco12_2_1_fold. +Hint Unfold monotone12_2. + +Arguments paco12_2_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_2_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_2_0_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_2_1_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_2_0_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_2_1_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_2_0_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_2_1_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_2_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. +Arguments paco12_2_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. + +Instance paco12_2_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 (gf_0 gf_1 : rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 : paco_class (paco12_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11) := +{ pacoacc := paco12_2_0_acc gf_0 gf_1; + pacomult := paco12_2_0_mult gf_0 gf_1; + pacofold := paco12_2_0_fold gf_0 gf_1; + pacounfold := paco12_2_0_unfold gf_0 gf_1 }. + +Instance paco12_2_1_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 (gf_0 gf_1 : rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 : paco_class (paco12_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11) := +{ pacoacc := paco12_2_1_acc gf_0 gf_1; + pacomult := paco12_2_1_mult gf_0 gf_1; + pacofold := paco12_2_1_fold gf_0 gf_1; + pacounfold := paco12_2_1_unfold gf_0 gf_1 }. + +Global Opaque paco12_3_0. +Global Opaque paco12_3_1. +Global Opaque paco12_3_2. + +Hint Unfold upaco12_3_0. +Hint Unfold upaco12_3_1. +Hint Unfold upaco12_3_2. Hint Resolve paco12_3_0_fold. Hint Resolve paco12_3_1_fold. Hint Resolve paco12_3_2_fold. +Hint Unfold monotone12_3. Arguments paco12_3_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. Arguments paco12_3_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. @@ -851,24 +771,6 @@ Arguments paco12_3_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. Arguments paco12_3_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. Arguments paco12_3_2_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 ]. -Global Opaque paco12_3_0. -Global Opaque paco12_3_0_acc. -Global Opaque paco12_3_0_mult. -Global Opaque paco12_3_0_fold. -Global Opaque paco12_3_0_unfold. - -Global Opaque paco12_3_1. -Global Opaque paco12_3_1_acc. -Global Opaque paco12_3_1_mult. -Global Opaque paco12_3_1_fold. -Global Opaque paco12_3_1_unfold. - -Global Opaque paco12_3_2. -Global Opaque paco12_3_2_acc. -Global Opaque paco12_3_2_mult. -Global Opaque paco12_3_2_fold. -Global Opaque paco12_3_2_unfold. - Instance paco12_3_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 (gf_0 gf_1 gf_2 : rel12 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11->_) r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 : paco_class (paco12_3_0 gf_0 gf_1 gf_2 r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11) := { pacoacc := paco12_3_0_acc gf_0 gf_1 gf_2; pacomult := paco12_3_0_mult gf_0 gf_1 gf_2; diff --git a/src/paco13.v b/src/paco13.v index 488dc02..0dc46ce 100644 --- a/src/paco13.v +++ b/src/paco13.v @@ -2,7 +2,7 @@ Require Export paconotation pacotacuser. Require Import paconotation_internal pacotac pacon. Set Implicit Arguments. -Section SIGT. +Section PACO13. Variable T0 : Type. Variable T1 : forall (x0: @T0), Type. @@ -90,25 +90,10 @@ Proof. apply curry_map_rev13. eapply le1_trans; [|eauto]. apply uncurry_bij1_13. Qed. -End SIGT. - (** ** Predicates of Arity 13 *) Section Arg13_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. -Variable T12 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10), Type. Variable gf : rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12. Arguments gf : clear implicits. @@ -117,24 +102,11 @@ Definition paco13( r: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) : rel13 T Definition upaco13( r: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) := paco13 r \13/ r. End Arg13_def. -Arguments paco13 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments upaco13 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13 : clear implicits. +Arguments upaco13 : clear implicits. Hint Unfold upaco13. Section Arg13_2_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. -Variable T12 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10), Type. Variable gf_0 gf_1 : rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -148,27 +120,14 @@ Definition paco13_2_1( r_0 r_1: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) Definition upaco13_2_0( r_0 r_1: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) := paco13_2_0 r_0 r_1 \13/ r_0. Definition upaco13_2_1( r_0 r_1: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) := paco13_2_1 r_0 r_1 \13/ r_1. End Arg13_2_def. -Arguments paco13_2_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments upaco13_2_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_2_0 : clear implicits. +Arguments upaco13_2_0 : clear implicits. Hint Unfold upaco13_2_0. -Arguments paco13_2_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments upaco13_2_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_2_1 : clear implicits. +Arguments upaco13_2_1 : clear implicits. Hint Unfold upaco13_2_1. Section Arg13_3_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. -Variable T12 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10), Type. Variable gf_0 gf_1 gf_2 : rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -187,55 +146,37 @@ Definition upaco13_3_0( r_0 r_1 r_2: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 Definition upaco13_3_1( r_0 r_1 r_2: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) := paco13_3_1 r_0 r_1 r_2 \13/ r_1. Definition upaco13_3_2( r_0 r_1 r_2: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) := paco13_3_2 r_0 r_1 r_2 \13/ r_2. End Arg13_3_def. -Arguments paco13_3_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments upaco13_3_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_3_0 : clear implicits. +Arguments upaco13_3_0 : clear implicits. Hint Unfold upaco13_3_0. -Arguments paco13_3_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments upaco13_3_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_3_1 : clear implicits. +Arguments upaco13_3_1 : clear implicits. Hint Unfold upaco13_3_1. -Arguments paco13_3_2 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments upaco13_3_2 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_3_2 : clear implicits. +Arguments upaco13_3_2 : clear implicits. Hint Unfold upaco13_3_2. -(* Less than or equal - internal use only *) -Notation "p <_paco_13= q" := - (forall _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 _paco_x9 _paco_x10 _paco_x11 _paco_x12 (PR: p _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 _paco_x9 _paco_x10 _paco_x11 _paco_x12 : Prop), q _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 _paco_x9 _paco_x10 _paco_x11 _paco_x12 : Prop) - (at level 50, no associativity). - (** 1 Mutual Coinduction *) Section Arg13_1. -Definition monotone13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) := +Definition monotone13 (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 r r' (IN: gf r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12) (LE: r <13= r'), gf r' x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12. -Definition _monotone13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) := +Definition _monotone13 (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) := forall r r'(LE: r <13= r'), gf r <13== gf r'. -Lemma monotone13_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) : +Lemma monotone13_eq (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) : monotone13 gf <-> _monotone13 gf. Proof. unfold monotone13, _monotone13, le13. split; eauto. Qed. -Lemma monotone13_map T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) +Lemma monotone13_map (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) (MON: _monotone13 gf) : _monotone (fun R0 => curry13 (gf (uncurry13 R0))). Proof. repeat_intros 3. apply curry_map13. apply MON; apply uncurry_map13; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. -Variable T12 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10), Type. Variable gf : rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12. Arguments gf : clear implicits. @@ -316,62 +257,27 @@ Qed. End Arg13_1. -Hint Unfold monotone13. -Hint Resolve paco13_fold. - -Arguments paco13_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments paco13_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments paco13_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments paco13_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments paco13_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments paco13_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. - -Global Opaque paco13. -Global Opaque paco13_acc. -Global Opaque paco13_mult. -Global Opaque paco13_fold. -Global Opaque paco13_unfold. - -Instance paco13_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 (gf : rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12->_) r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 : paco_class (paco13 gf r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12) := -{ pacoacc := paco13_acc gf; - pacomult := paco13_mult gf; - pacofold := paco13_fold gf; - pacounfold := paco13_unfold gf }. - (** 2 Mutual Coinduction *) Section Arg13_2. -Definition monotone13_2 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) := +Definition monotone13_2 (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 r_0 r_1 r'_0 r'_1 (IN: gf r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12) (LE_0: r_0 <13= r'_0)(LE_1: r_1 <13= r'_1), gf r'_0 r'_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12. -Definition _monotone13_2 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) := +Definition _monotone13_2 (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) := forall r_0 r_1 r'_0 r'_1(LE_0: r_0 <13= r'_0)(LE_1: r_1 <13= r'_1), gf r_0 r_1 <13== gf r'_0 r'_1. -Lemma monotone13_2_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) : +Lemma monotone13_2_eq (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) : monotone13_2 gf <-> _monotone13_2 gf. Proof. unfold monotone13_2, _monotone13_2, le13. split; eauto. Qed. -Lemma monotone13_2_map T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) +Lemma monotone13_2_map (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) (MON: _monotone13_2 gf) : _monotone_2 (fun R0 R1 => curry13 (gf (uncurry13 R0) (uncurry13 R1))). Proof. repeat_intros 6. apply curry_map13. apply MON; apply uncurry_map13; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. -Variable T12 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10), Type. Variable gf_0 gf_1 : rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -528,81 +434,27 @@ Qed. End Arg13_2. -Hint Unfold monotone13_2. -Hint Resolve paco13_2_0_fold. -Hint Resolve paco13_2_1_fold. - -Arguments paco13_2_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments paco13_2_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments paco13_2_0_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments paco13_2_1_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments paco13_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments paco13_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments paco13_2_0_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments paco13_2_1_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments paco13_2_0_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments paco13_2_1_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments paco13_2_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Arguments paco13_2_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. - -Global Opaque paco13_2_0. -Global Opaque paco13_2_0_acc. -Global Opaque paco13_2_0_mult. -Global Opaque paco13_2_0_fold. -Global Opaque paco13_2_0_unfold. - -Global Opaque paco13_2_1. -Global Opaque paco13_2_1_acc. -Global Opaque paco13_2_1_mult. -Global Opaque paco13_2_1_fold. -Global Opaque paco13_2_1_unfold. - -Instance paco13_2_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 (gf_0 gf_1 : rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 : paco_class (paco13_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12) := -{ pacoacc := paco13_2_0_acc gf_0 gf_1; - pacomult := paco13_2_0_mult gf_0 gf_1; - pacofold := paco13_2_0_fold gf_0 gf_1; - pacounfold := paco13_2_0_unfold gf_0 gf_1 }. - -Instance paco13_2_1_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 (gf_0 gf_1 : rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 : paco_class (paco13_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12) := -{ pacoacc := paco13_2_1_acc gf_0 gf_1; - pacomult := paco13_2_1_mult gf_0 gf_1; - pacofold := paco13_2_1_fold gf_0 gf_1; - pacounfold := paco13_2_1_unfold gf_0 gf_1 }. - (** 3 Mutual Coinduction *) Section Arg13_3. -Definition monotone13_3 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) := +Definition monotone13_3 (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 r_0 r_1 r_2 r'_0 r'_1 r'_2 (IN: gf r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12) (LE_0: r_0 <13= r'_0)(LE_1: r_1 <13= r'_1)(LE_2: r_2 <13= r'_2), gf r'_0 r'_1 r'_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12. -Definition _monotone13_3 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) := +Definition _monotone13_3 (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) := forall r_0 r_1 r_2 r'_0 r'_1 r'_2(LE_0: r_0 <13= r'_0)(LE_1: r_1 <13= r'_1)(LE_2: r_2 <13= r'_2), gf r_0 r_1 r_2 <13== gf r'_0 r'_1 r'_2. -Lemma monotone13_3_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) : +Lemma monotone13_3_eq (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) : monotone13_3 gf <-> _monotone13_3 gf. Proof. unfold monotone13_3, _monotone13_3, le13. split; eauto. Qed. -Lemma monotone13_3_map T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) +Lemma monotone13_3_map (gf: rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) (MON: _monotone13_3 gf) : _monotone_3 (fun R0 R1 R2 => curry13 (gf (uncurry13 R0) (uncurry13 R1) (uncurry13 R2))). Proof. repeat_intros 9. apply curry_map13. apply MON; apply uncurry_map13; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. -Variable T12 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10), Type. Variable gf_0 gf_1 gf_2 : rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 -> rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -835,10 +687,72 @@ Qed. End Arg13_3. -Hint Unfold monotone13_3. +End PACO13. + +Global Opaque paco13. + +Hint Unfold upaco13. +Hint Resolve paco13_fold. +Hint Unfold monotone13. + +Arguments paco13_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. + +Instance paco13_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 (gf : rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12->_) r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 : paco_class (paco13 gf r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12) := +{ pacoacc := paco13_acc gf; + pacomult := paco13_mult gf; + pacofold := paco13_fold gf; + pacounfold := paco13_unfold gf }. + +Global Opaque paco13_2_0. +Global Opaque paco13_2_1. + +Hint Unfold upaco13_2_0. +Hint Unfold upaco13_2_1. +Hint Resolve paco13_2_0_fold. +Hint Resolve paco13_2_1_fold. +Hint Unfold monotone13_2. + +Arguments paco13_2_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_2_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_2_0_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_2_1_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_2_0_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_2_1_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_2_0_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_2_1_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_2_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. +Arguments paco13_2_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. + +Instance paco13_2_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 (gf_0 gf_1 : rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 : paco_class (paco13_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12) := +{ pacoacc := paco13_2_0_acc gf_0 gf_1; + pacomult := paco13_2_0_mult gf_0 gf_1; + pacofold := paco13_2_0_fold gf_0 gf_1; + pacounfold := paco13_2_0_unfold gf_0 gf_1 }. + +Instance paco13_2_1_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 (gf_0 gf_1 : rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 : paco_class (paco13_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12) := +{ pacoacc := paco13_2_1_acc gf_0 gf_1; + pacomult := paco13_2_1_mult gf_0 gf_1; + pacofold := paco13_2_1_fold gf_0 gf_1; + pacounfold := paco13_2_1_unfold gf_0 gf_1 }. + +Global Opaque paco13_3_0. +Global Opaque paco13_3_1. +Global Opaque paco13_3_2. + +Hint Unfold upaco13_3_0. +Hint Unfold upaco13_3_1. +Hint Unfold upaco13_3_2. Hint Resolve paco13_3_0_fold. Hint Resolve paco13_3_1_fold. Hint Resolve paco13_3_2_fold. +Hint Unfold monotone13_3. Arguments paco13_3_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. Arguments paco13_3_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. @@ -859,24 +773,6 @@ Arguments paco13_3_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 Arguments paco13_3_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. Arguments paco13_3_2_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 ]. -Global Opaque paco13_3_0. -Global Opaque paco13_3_0_acc. -Global Opaque paco13_3_0_mult. -Global Opaque paco13_3_0_fold. -Global Opaque paco13_3_0_unfold. - -Global Opaque paco13_3_1. -Global Opaque paco13_3_1_acc. -Global Opaque paco13_3_1_mult. -Global Opaque paco13_3_1_fold. -Global Opaque paco13_3_1_unfold. - -Global Opaque paco13_3_2. -Global Opaque paco13_3_2_acc. -Global Opaque paco13_3_2_mult. -Global Opaque paco13_3_2_fold. -Global Opaque paco13_3_2_unfold. - Instance paco13_3_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 (gf_0 gf_1 gf_2 : rel13 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12->_) r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 : paco_class (paco13_3_0 gf_0 gf_1 gf_2 r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12) := { pacoacc := paco13_3_0_acc gf_0 gf_1 gf_2; pacomult := paco13_3_0_mult gf_0 gf_1 gf_2; diff --git a/src/paco14.v b/src/paco14.v index 6e4bc16..f03d402 100644 --- a/src/paco14.v +++ b/src/paco14.v @@ -2,7 +2,7 @@ Require Export paconotation pacotacuser. Require Import paconotation_internal pacotac pacon. Set Implicit Arguments. -Section SIGT. +Section PACO14. Variable T0 : Type. Variable T1 : forall (x0: @T0), Type. @@ -92,26 +92,10 @@ Proof. apply curry_map_rev14. eapply le1_trans; [|eauto]. apply uncurry_bij1_14. Qed. -End SIGT. - (** ** Predicates of Arity 14 *) Section Arg14_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. -Variable T12 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10), Type. -Variable T13 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (x12: @T12 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11), Type. Variable gf : rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13. Arguments gf : clear implicits. @@ -120,25 +104,11 @@ Definition paco14( r: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) : rel Definition upaco14( r: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) := paco14 r \14/ r. End Arg14_def. -Arguments paco14 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments upaco14 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14 : clear implicits. +Arguments upaco14 : clear implicits. Hint Unfold upaco14. Section Arg14_2_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. -Variable T12 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10), Type. -Variable T13 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (x12: @T12 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11), Type. Variable gf_0 gf_1 : rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -152,28 +122,14 @@ Definition paco14_2_1( r_0 r_1: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 Definition upaco14_2_0( r_0 r_1: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) := paco14_2_0 r_0 r_1 \14/ r_0. Definition upaco14_2_1( r_0 r_1: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) := paco14_2_1 r_0 r_1 \14/ r_1. End Arg14_2_def. -Arguments paco14_2_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments upaco14_2_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_2_0 : clear implicits. +Arguments upaco14_2_0 : clear implicits. Hint Unfold upaco14_2_0. -Arguments paco14_2_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments upaco14_2_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_2_1 : clear implicits. +Arguments upaco14_2_1 : clear implicits. Hint Unfold upaco14_2_1. Section Arg14_3_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. -Variable T12 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10), Type. -Variable T13 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (x12: @T12 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11), Type. Variable gf_0 gf_1 gf_2 : rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -192,56 +148,37 @@ Definition upaco14_3_0( r_0 r_1 r_2: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 Definition upaco14_3_1( r_0 r_1 r_2: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) := paco14_3_1 r_0 r_1 r_2 \14/ r_1. Definition upaco14_3_2( r_0 r_1 r_2: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) := paco14_3_2 r_0 r_1 r_2 \14/ r_2. End Arg14_3_def. -Arguments paco14_3_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments upaco14_3_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_3_0 : clear implicits. +Arguments upaco14_3_0 : clear implicits. Hint Unfold upaco14_3_0. -Arguments paco14_3_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments upaco14_3_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_3_1 : clear implicits. +Arguments upaco14_3_1 : clear implicits. Hint Unfold upaco14_3_1. -Arguments paco14_3_2 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments upaco14_3_2 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_3_2 : clear implicits. +Arguments upaco14_3_2 : clear implicits. Hint Unfold upaco14_3_2. -(* Less than or equal - internal use only *) -Notation "p <_paco_14= q" := - (forall _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 _paco_x9 _paco_x10 _paco_x11 _paco_x12 _paco_x13 (PR: p _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 _paco_x9 _paco_x10 _paco_x11 _paco_x12 _paco_x13 : Prop), q _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 _paco_x9 _paco_x10 _paco_x11 _paco_x12 _paco_x13 : Prop) - (at level 50, no associativity). - (** 1 Mutual Coinduction *) Section Arg14_1. -Definition monotone14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) := +Definition monotone14 (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 r r' (IN: gf r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13) (LE: r <14= r'), gf r' x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13. -Definition _monotone14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) := +Definition _monotone14 (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) := forall r r'(LE: r <14= r'), gf r <14== gf r'. -Lemma monotone14_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) : +Lemma monotone14_eq (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) : monotone14 gf <-> _monotone14 gf. Proof. unfold monotone14, _monotone14, le14. split; eauto. Qed. -Lemma monotone14_map T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) +Lemma monotone14_map (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) (MON: _monotone14 gf) : _monotone (fun R0 => curry14 (gf (uncurry14 R0))). Proof. repeat_intros 3. apply curry_map14. apply MON; apply uncurry_map14; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. -Variable T12 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10), Type. -Variable T13 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (x12: @T12 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11), Type. Variable gf : rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13. Arguments gf : clear implicits. @@ -322,63 +259,27 @@ Qed. End Arg14_1. -Hint Unfold monotone14. -Hint Resolve paco14_fold. - -Arguments paco14_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments paco14_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments paco14_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments paco14_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments paco14_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments paco14_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. - -Global Opaque paco14. -Global Opaque paco14_acc. -Global Opaque paco14_mult. -Global Opaque paco14_fold. -Global Opaque paco14_unfold. - -Instance paco14_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 (gf : rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13->_) r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 : paco_class (paco14 gf r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13) := -{ pacoacc := paco14_acc gf; - pacomult := paco14_mult gf; - pacofold := paco14_fold gf; - pacounfold := paco14_unfold gf }. - (** 2 Mutual Coinduction *) Section Arg14_2. -Definition monotone14_2 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) := +Definition monotone14_2 (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 r_0 r_1 r'_0 r'_1 (IN: gf r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13) (LE_0: r_0 <14= r'_0)(LE_1: r_1 <14= r'_1), gf r'_0 r'_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13. -Definition _monotone14_2 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) := +Definition _monotone14_2 (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) := forall r_0 r_1 r'_0 r'_1(LE_0: r_0 <14= r'_0)(LE_1: r_1 <14= r'_1), gf r_0 r_1 <14== gf r'_0 r'_1. -Lemma monotone14_2_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) : +Lemma monotone14_2_eq (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) : monotone14_2 gf <-> _monotone14_2 gf. Proof. unfold monotone14_2, _monotone14_2, le14. split; eauto. Qed. -Lemma monotone14_2_map T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) +Lemma monotone14_2_map (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) (MON: _monotone14_2 gf) : _monotone_2 (fun R0 R1 => curry14 (gf (uncurry14 R0) (uncurry14 R1))). Proof. repeat_intros 6. apply curry_map14. apply MON; apply uncurry_map14; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. -Variable T12 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10), Type. -Variable T13 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (x12: @T12 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11), Type. Variable gf_0 gf_1 : rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -535,82 +436,27 @@ Qed. End Arg14_2. -Hint Unfold monotone14_2. -Hint Resolve paco14_2_0_fold. -Hint Resolve paco14_2_1_fold. - -Arguments paco14_2_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments paco14_2_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments paco14_2_0_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments paco14_2_1_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments paco14_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments paco14_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments paco14_2_0_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments paco14_2_1_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments paco14_2_0_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments paco14_2_1_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments paco14_2_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Arguments paco14_2_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. - -Global Opaque paco14_2_0. -Global Opaque paco14_2_0_acc. -Global Opaque paco14_2_0_mult. -Global Opaque paco14_2_0_fold. -Global Opaque paco14_2_0_unfold. - -Global Opaque paco14_2_1. -Global Opaque paco14_2_1_acc. -Global Opaque paco14_2_1_mult. -Global Opaque paco14_2_1_fold. -Global Opaque paco14_2_1_unfold. - -Instance paco14_2_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 (gf_0 gf_1 : rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 : paco_class (paco14_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13) := -{ pacoacc := paco14_2_0_acc gf_0 gf_1; - pacomult := paco14_2_0_mult gf_0 gf_1; - pacofold := paco14_2_0_fold gf_0 gf_1; - pacounfold := paco14_2_0_unfold gf_0 gf_1 }. - -Instance paco14_2_1_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 (gf_0 gf_1 : rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 : paco_class (paco14_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13) := -{ pacoacc := paco14_2_1_acc gf_0 gf_1; - pacomult := paco14_2_1_mult gf_0 gf_1; - pacofold := paco14_2_1_fold gf_0 gf_1; - pacounfold := paco14_2_1_unfold gf_0 gf_1 }. - (** 3 Mutual Coinduction *) Section Arg14_3. -Definition monotone14_3 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) := +Definition monotone14_3 (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 r_0 r_1 r_2 r'_0 r'_1 r'_2 (IN: gf r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13) (LE_0: r_0 <14= r'_0)(LE_1: r_1 <14= r'_1)(LE_2: r_2 <14= r'_2), gf r'_0 r'_1 r'_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13. -Definition _monotone14_3 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) := +Definition _monotone14_3 (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) := forall r_0 r_1 r_2 r'_0 r'_1 r'_2(LE_0: r_0 <14= r'_0)(LE_1: r_1 <14= r'_1)(LE_2: r_2 <14= r'_2), gf r_0 r_1 r_2 <14== gf r'_0 r'_1 r'_2. -Lemma monotone14_3_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) : +Lemma monotone14_3_eq (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) : monotone14_3 gf <-> _monotone14_3 gf. Proof. unfold monotone14_3, _monotone14_3, le14. split; eauto. Qed. -Lemma monotone14_3_map T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) +Lemma monotone14_3_map (gf: rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) (MON: _monotone14_3 gf) : _monotone_3 (fun R0 R1 R2 => curry14 (gf (uncurry14 R0) (uncurry14 R1) (uncurry14 R2))). Proof. repeat_intros 9. apply curry_map14. apply MON; apply uncurry_map14; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. -Variable T12 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10), Type. -Variable T13 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (x12: @T12 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11), Type. Variable gf_0 gf_1 gf_2 : rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 -> rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -843,10 +689,72 @@ Qed. End Arg14_3. -Hint Unfold monotone14_3. +End PACO14. + +Global Opaque paco14. + +Hint Unfold upaco14. +Hint Resolve paco14_fold. +Hint Unfold monotone14. + +Arguments paco14_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. + +Instance paco14_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 (gf : rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13->_) r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 : paco_class (paco14 gf r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13) := +{ pacoacc := paco14_acc gf; + pacomult := paco14_mult gf; + pacofold := paco14_fold gf; + pacounfold := paco14_unfold gf }. + +Global Opaque paco14_2_0. +Global Opaque paco14_2_1. + +Hint Unfold upaco14_2_0. +Hint Unfold upaco14_2_1. +Hint Resolve paco14_2_0_fold. +Hint Resolve paco14_2_1_fold. +Hint Unfold monotone14_2. + +Arguments paco14_2_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_2_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_2_0_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_2_1_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_2_0_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_2_1_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_2_0_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_2_1_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_2_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. +Arguments paco14_2_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. + +Instance paco14_2_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 (gf_0 gf_1 : rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 : paco_class (paco14_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13) := +{ pacoacc := paco14_2_0_acc gf_0 gf_1; + pacomult := paco14_2_0_mult gf_0 gf_1; + pacofold := paco14_2_0_fold gf_0 gf_1; + pacounfold := paco14_2_0_unfold gf_0 gf_1 }. + +Instance paco14_2_1_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 (gf_0 gf_1 : rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 : paco_class (paco14_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13) := +{ pacoacc := paco14_2_1_acc gf_0 gf_1; + pacomult := paco14_2_1_mult gf_0 gf_1; + pacofold := paco14_2_1_fold gf_0 gf_1; + pacounfold := paco14_2_1_unfold gf_0 gf_1 }. + +Global Opaque paco14_3_0. +Global Opaque paco14_3_1. +Global Opaque paco14_3_2. + +Hint Unfold upaco14_3_0. +Hint Unfold upaco14_3_1. +Hint Unfold upaco14_3_2. Hint Resolve paco14_3_0_fold. Hint Resolve paco14_3_1_fold. Hint Resolve paco14_3_2_fold. +Hint Unfold monotone14_3. Arguments paco14_3_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. Arguments paco14_3_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. @@ -867,24 +775,6 @@ Arguments paco14_3_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 Arguments paco14_3_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. Arguments paco14_3_2_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 ]. -Global Opaque paco14_3_0. -Global Opaque paco14_3_0_acc. -Global Opaque paco14_3_0_mult. -Global Opaque paco14_3_0_fold. -Global Opaque paco14_3_0_unfold. - -Global Opaque paco14_3_1. -Global Opaque paco14_3_1_acc. -Global Opaque paco14_3_1_mult. -Global Opaque paco14_3_1_fold. -Global Opaque paco14_3_1_unfold. - -Global Opaque paco14_3_2. -Global Opaque paco14_3_2_acc. -Global Opaque paco14_3_2_mult. -Global Opaque paco14_3_2_fold. -Global Opaque paco14_3_2_unfold. - Instance paco14_3_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 (gf_0 gf_1 gf_2 : rel14 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13->_) r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 : paco_class (paco14_3_0 gf_0 gf_1 gf_2 r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13) := { pacoacc := paco14_3_0_acc gf_0 gf_1 gf_2; pacomult := paco14_3_0_mult gf_0 gf_1 gf_2; diff --git a/src/paco15.v b/src/paco15.v index a62219e..7311ae3 100644 --- a/src/paco15.v +++ b/src/paco15.v @@ -2,7 +2,7 @@ Require Export paconotation pacotacuser. Require Import paconotation_internal pacotac pacon. Set Implicit Arguments. -Section SIGT. +Section PACO15. Variable T0 : Type. Variable T1 : forall (x0: @T0), Type. @@ -94,27 +94,10 @@ Proof. apply curry_map_rev15. eapply le1_trans; [|eauto]. apply uncurry_bij1_15. Qed. -End SIGT. - (** ** Predicates of Arity 15 *) Section Arg15_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. -Variable T12 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10), Type. -Variable T13 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (x12: @T12 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11), Type. -Variable T14 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (x12: @T12 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11) (x13: @T13 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12), Type. Variable gf : rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14. Arguments gf : clear implicits. @@ -123,26 +106,11 @@ Definition paco15( r: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) : Definition upaco15( r: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) := paco15 r \15/ r. End Arg15_def. -Arguments paco15 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments upaco15 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15 : clear implicits. +Arguments upaco15 : clear implicits. Hint Unfold upaco15. Section Arg15_2_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. -Variable T12 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10), Type. -Variable T13 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (x12: @T12 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11), Type. -Variable T14 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (x12: @T12 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11) (x13: @T13 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12), Type. Variable gf_0 gf_1 : rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -156,29 +124,14 @@ Definition paco15_2_1( r_0 r_1: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 Definition upaco15_2_0( r_0 r_1: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) := paco15_2_0 r_0 r_1 \15/ r_0. Definition upaco15_2_1( r_0 r_1: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) := paco15_2_1 r_0 r_1 \15/ r_1. End Arg15_2_def. -Arguments paco15_2_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments upaco15_2_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_2_0 : clear implicits. +Arguments upaco15_2_0 : clear implicits. Hint Unfold upaco15_2_0. -Arguments paco15_2_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments upaco15_2_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_2_1 : clear implicits. +Arguments upaco15_2_1 : clear implicits. Hint Unfold upaco15_2_1. Section Arg15_3_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. -Variable T12 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10), Type. -Variable T13 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (x12: @T12 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11), Type. -Variable T14 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (x12: @T12 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11) (x13: @T13 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12), Type. Variable gf_0 gf_1 gf_2 : rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -197,57 +150,37 @@ Definition upaco15_3_0( r_0 r_1 r_2: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 Definition upaco15_3_1( r_0 r_1 r_2: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) := paco15_3_1 r_0 r_1 r_2 \15/ r_1. Definition upaco15_3_2( r_0 r_1 r_2: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) := paco15_3_2 r_0 r_1 r_2 \15/ r_2. End Arg15_3_def. -Arguments paco15_3_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments upaco15_3_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_3_0 : clear implicits. +Arguments upaco15_3_0 : clear implicits. Hint Unfold upaco15_3_0. -Arguments paco15_3_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments upaco15_3_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_3_1 : clear implicits. +Arguments upaco15_3_1 : clear implicits. Hint Unfold upaco15_3_1. -Arguments paco15_3_2 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments upaco15_3_2 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_3_2 : clear implicits. +Arguments upaco15_3_2 : clear implicits. Hint Unfold upaco15_3_2. -(* Less than or equal - internal use only *) -Notation "p <_paco_15= q" := - (forall _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 _paco_x9 _paco_x10 _paco_x11 _paco_x12 _paco_x13 _paco_x14 (PR: p _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 _paco_x9 _paco_x10 _paco_x11 _paco_x12 _paco_x13 _paco_x14 : Prop), q _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 _paco_x9 _paco_x10 _paco_x11 _paco_x12 _paco_x13 _paco_x14 : Prop) - (at level 50, no associativity). - (** 1 Mutual Coinduction *) Section Arg15_1. -Definition monotone15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) := +Definition monotone15 (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 r r' (IN: gf r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14) (LE: r <15= r'), gf r' x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14. -Definition _monotone15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) := +Definition _monotone15 (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) := forall r r'(LE: r <15= r'), gf r <15== gf r'. -Lemma monotone15_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) : +Lemma monotone15_eq (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) : monotone15 gf <-> _monotone15 gf. Proof. unfold monotone15, _monotone15, le15. split; eauto. Qed. -Lemma monotone15_map T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) +Lemma monotone15_map (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) (MON: _monotone15 gf) : _monotone (fun R0 => curry15 (gf (uncurry15 R0))). Proof. repeat_intros 3. apply curry_map15. apply MON; apply uncurry_map15; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. -Variable T12 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10), Type. -Variable T13 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (x12: @T12 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11), Type. -Variable T14 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (x12: @T12 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11) (x13: @T13 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12), Type. Variable gf : rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14. Arguments gf : clear implicits. @@ -328,64 +261,27 @@ Qed. End Arg15_1. -Hint Unfold monotone15. -Hint Resolve paco15_fold. - -Arguments paco15_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments paco15_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments paco15_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments paco15_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments paco15_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments paco15_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. - -Global Opaque paco15. -Global Opaque paco15_acc. -Global Opaque paco15_mult. -Global Opaque paco15_fold. -Global Opaque paco15_unfold. - -Instance paco15_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 (gf : rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14->_) r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 : paco_class (paco15 gf r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14) := -{ pacoacc := paco15_acc gf; - pacomult := paco15_mult gf; - pacofold := paco15_fold gf; - pacounfold := paco15_unfold gf }. - (** 2 Mutual Coinduction *) Section Arg15_2. -Definition monotone15_2 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) := +Definition monotone15_2 (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 r_0 r_1 r'_0 r'_1 (IN: gf r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14) (LE_0: r_0 <15= r'_0)(LE_1: r_1 <15= r'_1), gf r'_0 r'_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14. -Definition _monotone15_2 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) := +Definition _monotone15_2 (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) := forall r_0 r_1 r'_0 r'_1(LE_0: r_0 <15= r'_0)(LE_1: r_1 <15= r'_1), gf r_0 r_1 <15== gf r'_0 r'_1. -Lemma monotone15_2_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) : +Lemma monotone15_2_eq (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) : monotone15_2 gf <-> _monotone15_2 gf. Proof. unfold monotone15_2, _monotone15_2, le15. split; eauto. Qed. -Lemma monotone15_2_map T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) +Lemma monotone15_2_map (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) (MON: _monotone15_2 gf) : _monotone_2 (fun R0 R1 => curry15 (gf (uncurry15 R0) (uncurry15 R1))). Proof. repeat_intros 6. apply curry_map15. apply MON; apply uncurry_map15; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. -Variable T12 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10), Type. -Variable T13 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (x12: @T12 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11), Type. -Variable T14 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (x12: @T12 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11) (x13: @T13 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12), Type. Variable gf_0 gf_1 : rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -542,83 +438,27 @@ Qed. End Arg15_2. -Hint Unfold monotone15_2. -Hint Resolve paco15_2_0_fold. -Hint Resolve paco15_2_1_fold. - -Arguments paco15_2_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments paco15_2_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments paco15_2_0_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments paco15_2_1_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments paco15_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments paco15_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments paco15_2_0_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments paco15_2_1_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments paco15_2_0_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments paco15_2_1_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments paco15_2_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Arguments paco15_2_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. - -Global Opaque paco15_2_0. -Global Opaque paco15_2_0_acc. -Global Opaque paco15_2_0_mult. -Global Opaque paco15_2_0_fold. -Global Opaque paco15_2_0_unfold. - -Global Opaque paco15_2_1. -Global Opaque paco15_2_1_acc. -Global Opaque paco15_2_1_mult. -Global Opaque paco15_2_1_fold. -Global Opaque paco15_2_1_unfold. - -Instance paco15_2_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 (gf_0 gf_1 : rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 : paco_class (paco15_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14) := -{ pacoacc := paco15_2_0_acc gf_0 gf_1; - pacomult := paco15_2_0_mult gf_0 gf_1; - pacofold := paco15_2_0_fold gf_0 gf_1; - pacounfold := paco15_2_0_unfold gf_0 gf_1 }. - -Instance paco15_2_1_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 (gf_0 gf_1 : rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 : paco_class (paco15_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14) := -{ pacoacc := paco15_2_1_acc gf_0 gf_1; - pacomult := paco15_2_1_mult gf_0 gf_1; - pacofold := paco15_2_1_fold gf_0 gf_1; - pacounfold := paco15_2_1_unfold gf_0 gf_1 }. - (** 3 Mutual Coinduction *) Section Arg15_3. -Definition monotone15_3 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) := +Definition monotone15_3 (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 r_0 r_1 r_2 r'_0 r'_1 r'_2 (IN: gf r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14) (LE_0: r_0 <15= r'_0)(LE_1: r_1 <15= r'_1)(LE_2: r_2 <15= r'_2), gf r'_0 r'_1 r'_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14. -Definition _monotone15_3 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) := +Definition _monotone15_3 (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) := forall r_0 r_1 r_2 r'_0 r'_1 r'_2(LE_0: r_0 <15= r'_0)(LE_1: r_1 <15= r'_1)(LE_2: r_2 <15= r'_2), gf r_0 r_1 r_2 <15== gf r'_0 r'_1 r'_2. -Lemma monotone15_3_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) : +Lemma monotone15_3_eq (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) : monotone15_3 gf <-> _monotone15_3 gf. Proof. unfold monotone15_3, _monotone15_3, le15. split; eauto. Qed. -Lemma monotone15_3_map T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) +Lemma monotone15_3_map (gf: rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) (MON: _monotone15_3 gf) : _monotone_3 (fun R0 R1 R2 => curry15 (gf (uncurry15 R0) (uncurry15 R1) (uncurry15 R2))). Proof. repeat_intros 9. apply curry_map15. apply MON; apply uncurry_map15; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. -Variable T9 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7), Type. -Variable T10 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8), Type. -Variable T11 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9), Type. -Variable T12 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10), Type. -Variable T13 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (x12: @T12 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11), Type. -Variable T14 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6) (x8: @T8 x0 x1 x2 x3 x4 x5 x6 x7) (x9: @T9 x0 x1 x2 x3 x4 x5 x6 x7 x8) (x10: @T10 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (x11: @T11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10) (x12: @T12 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11) (x13: @T13 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12), Type. Variable gf_0 gf_1 gf_2 : rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 -> rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -851,10 +691,72 @@ Qed. End Arg15_3. -Hint Unfold monotone15_3. +End PACO15. + +Global Opaque paco15. + +Hint Unfold upaco15. +Hint Resolve paco15_fold. +Hint Unfold monotone15. + +Arguments paco15_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. + +Instance paco15_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 (gf : rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14->_) r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 : paco_class (paco15 gf r x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14) := +{ pacoacc := paco15_acc gf; + pacomult := paco15_mult gf; + pacofold := paco15_fold gf; + pacounfold := paco15_unfold gf }. + +Global Opaque paco15_2_0. +Global Opaque paco15_2_1. + +Hint Unfold upaco15_2_0. +Hint Unfold upaco15_2_1. +Hint Resolve paco15_2_0_fold. +Hint Resolve paco15_2_1_fold. +Hint Unfold monotone15_2. + +Arguments paco15_2_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_2_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_2_0_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_2_1_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_2_0_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_2_1_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_2_0_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_2_1_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_2_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. +Arguments paco15_2_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. + +Instance paco15_2_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 (gf_0 gf_1 : rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 : paco_class (paco15_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14) := +{ pacoacc := paco15_2_0_acc gf_0 gf_1; + pacomult := paco15_2_0_mult gf_0 gf_1; + pacofold := paco15_2_0_fold gf_0 gf_1; + pacounfold := paco15_2_0_unfold gf_0 gf_1 }. + +Instance paco15_2_1_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 (gf_0 gf_1 : rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 : paco_class (paco15_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14) := +{ pacoacc := paco15_2_1_acc gf_0 gf_1; + pacomult := paco15_2_1_mult gf_0 gf_1; + pacofold := paco15_2_1_fold gf_0 gf_1; + pacounfold := paco15_2_1_unfold gf_0 gf_1 }. + +Global Opaque paco15_3_0. +Global Opaque paco15_3_1. +Global Opaque paco15_3_2. + +Hint Unfold upaco15_3_0. +Hint Unfold upaco15_3_1. +Hint Unfold upaco15_3_2. Hint Resolve paco15_3_0_fold. Hint Resolve paco15_3_1_fold. Hint Resolve paco15_3_2_fold. +Hint Unfold monotone15_3. Arguments paco15_3_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. Arguments paco15_3_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. @@ -875,24 +777,6 @@ Arguments paco15_3_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 Arguments paco15_3_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. Arguments paco15_3_2_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 ]. -Global Opaque paco15_3_0. -Global Opaque paco15_3_0_acc. -Global Opaque paco15_3_0_mult. -Global Opaque paco15_3_0_fold. -Global Opaque paco15_3_0_unfold. - -Global Opaque paco15_3_1. -Global Opaque paco15_3_1_acc. -Global Opaque paco15_3_1_mult. -Global Opaque paco15_3_1_fold. -Global Opaque paco15_3_1_unfold. - -Global Opaque paco15_3_2. -Global Opaque paco15_3_2_acc. -Global Opaque paco15_3_2_mult. -Global Opaque paco15_3_2_fold. -Global Opaque paco15_3_2_unfold. - Instance paco15_3_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 (gf_0 gf_1 gf_2 : rel15 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14->_) r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 : paco_class (paco15_3_0 gf_0 gf_1 gf_2 r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14) := { pacoacc := paco15_3_0_acc gf_0 gf_1 gf_2; pacomult := paco15_3_0_mult gf_0 gf_1 gf_2; diff --git a/src/paco2.v b/src/paco2.v index 52e9b08..49cd449 100644 --- a/src/paco2.v +++ b/src/paco2.v @@ -2,7 +2,7 @@ Require Export paconotation pacotacuser. Require Import paconotation_internal pacotac pacon. Set Implicit Arguments. -Section SIGT. +Section PACO2. Variable T0 : Type. Variable T1 : forall (x0: @T0), Type. @@ -68,14 +68,10 @@ Proof. apply curry_map_rev2. eapply le1_trans; [|eauto]. apply uncurry_bij1_2. Qed. -End SIGT. - (** ** Predicates of Arity 2 *) Section Arg2_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. Variable gf : rel2 T0 T1 -> rel2 T0 T1. Arguments gf : clear implicits. @@ -84,13 +80,11 @@ Definition paco2( r: rel2 T0 T1) : rel2 T0 T1 := Definition upaco2( r: rel2 T0 T1) := paco2 r \2/ r. End Arg2_def. -Arguments paco2 [ T0 T1 ]. -Arguments upaco2 [ T0 T1 ]. +Arguments paco2 : clear implicits. +Arguments upaco2 : clear implicits. Hint Unfold upaco2. Section Arg2_2_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. Variable gf_0 gf_1 : rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -104,16 +98,14 @@ Definition paco2_2_1( r_0 r_1: rel2 T0 T1) : rel2 T0 T1 := Definition upaco2_2_0( r_0 r_1: rel2 T0 T1) := paco2_2_0 r_0 r_1 \2/ r_0. Definition upaco2_2_1( r_0 r_1: rel2 T0 T1) := paco2_2_1 r_0 r_1 \2/ r_1. End Arg2_2_def. -Arguments paco2_2_0 [ T0 T1 ]. -Arguments upaco2_2_0 [ T0 T1 ]. +Arguments paco2_2_0 : clear implicits. +Arguments upaco2_2_0 : clear implicits. Hint Unfold upaco2_2_0. -Arguments paco2_2_1 [ T0 T1 ]. -Arguments upaco2_2_1 [ T0 T1 ]. +Arguments paco2_2_1 : clear implicits. +Arguments upaco2_2_1 : clear implicits. Hint Unfold upaco2_2_1. Section Arg2_3_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. Variable gf_0 gf_1 gf_2 : rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -132,44 +124,37 @@ Definition upaco2_3_0( r_0 r_1 r_2: rel2 T0 T1) := paco2_3_0 r_0 r_1 r_2 \2/ r_0 Definition upaco2_3_1( r_0 r_1 r_2: rel2 T0 T1) := paco2_3_1 r_0 r_1 r_2 \2/ r_1. Definition upaco2_3_2( r_0 r_1 r_2: rel2 T0 T1) := paco2_3_2 r_0 r_1 r_2 \2/ r_2. End Arg2_3_def. -Arguments paco2_3_0 [ T0 T1 ]. -Arguments upaco2_3_0 [ T0 T1 ]. +Arguments paco2_3_0 : clear implicits. +Arguments upaco2_3_0 : clear implicits. Hint Unfold upaco2_3_0. -Arguments paco2_3_1 [ T0 T1 ]. -Arguments upaco2_3_1 [ T0 T1 ]. +Arguments paco2_3_1 : clear implicits. +Arguments upaco2_3_1 : clear implicits. Hint Unfold upaco2_3_1. -Arguments paco2_3_2 [ T0 T1 ]. -Arguments upaco2_3_2 [ T0 T1 ]. +Arguments paco2_3_2 : clear implicits. +Arguments upaco2_3_2 : clear implicits. Hint Unfold upaco2_3_2. -(* Less than or equal - internal use only *) -Notation "p <_paco_2= q" := - (forall _paco_x0 _paco_x1 (PR: p _paco_x0 _paco_x1 : Prop), q _paco_x0 _paco_x1 : Prop) - (at level 50, no associativity). - (** 1 Mutual Coinduction *) Section Arg2_1. -Definition monotone2 T0 T1 (gf: rel2 T0 T1 -> rel2 T0 T1) := +Definition monotone2 (gf: rel2 T0 T1 -> rel2 T0 T1) := forall x0 x1 r r' (IN: gf r x0 x1) (LE: r <2= r'), gf r' x0 x1. -Definition _monotone2 T0 T1 (gf: rel2 T0 T1 -> rel2 T0 T1) := +Definition _monotone2 (gf: rel2 T0 T1 -> rel2 T0 T1) := forall r r'(LE: r <2= r'), gf r <2== gf r'. -Lemma monotone2_eq T0 T1 (gf: rel2 T0 T1 -> rel2 T0 T1) : +Lemma monotone2_eq (gf: rel2 T0 T1 -> rel2 T0 T1) : monotone2 gf <-> _monotone2 gf. Proof. unfold monotone2, _monotone2, le2. split; eauto. Qed. -Lemma monotone2_map T0 T1 (gf: rel2 T0 T1 -> rel2 T0 T1) +Lemma monotone2_map (gf: rel2 T0 T1 -> rel2 T0 T1) (MON: _monotone2 gf) : _monotone (fun R0 => curry2 (gf (uncurry2 R0))). Proof. repeat_intros 3. apply curry_map2. apply MON; apply uncurry_map2; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. Variable gf : rel2 T0 T1 -> rel2 T0 T1. Arguments gf : clear implicits. @@ -250,51 +235,27 @@ Qed. End Arg2_1. -Hint Unfold monotone2. -Hint Resolve paco2_fold. - -Arguments paco2_acc [ T0 T1 ]. -Arguments paco2_mon [ T0 T1 ]. -Arguments paco2_mult_strong [ T0 T1 ]. -Arguments paco2_mult [ T0 T1 ]. -Arguments paco2_fold [ T0 T1 ]. -Arguments paco2_unfold [ T0 T1 ]. - -Global Opaque paco2. -Global Opaque paco2_acc. -Global Opaque paco2_mult. -Global Opaque paco2_fold. -Global Opaque paco2_unfold. - -Instance paco2_inst T0 T1 (gf : rel2 T0 T1->_) r x0 x1 : paco_class (paco2 gf r x0 x1) := -{ pacoacc := paco2_acc gf; - pacomult := paco2_mult gf; - pacofold := paco2_fold gf; - pacounfold := paco2_unfold gf }. - (** 2 Mutual Coinduction *) Section Arg2_2. -Definition monotone2_2 T0 T1 (gf: rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1) := +Definition monotone2_2 (gf: rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1) := forall x0 x1 r_0 r_1 r'_0 r'_1 (IN: gf r_0 r_1 x0 x1) (LE_0: r_0 <2= r'_0)(LE_1: r_1 <2= r'_1), gf r'_0 r'_1 x0 x1. -Definition _monotone2_2 T0 T1 (gf: rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1) := +Definition _monotone2_2 (gf: rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1) := forall r_0 r_1 r'_0 r'_1(LE_0: r_0 <2= r'_0)(LE_1: r_1 <2= r'_1), gf r_0 r_1 <2== gf r'_0 r'_1. -Lemma monotone2_2_eq T0 T1 (gf: rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1) : +Lemma monotone2_2_eq (gf: rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1) : monotone2_2 gf <-> _monotone2_2 gf. Proof. unfold monotone2_2, _monotone2_2, le2. split; eauto. Qed. -Lemma monotone2_2_map T0 T1 (gf: rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1) +Lemma monotone2_2_map (gf: rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1) (MON: _monotone2_2 gf) : _monotone_2 (fun R0 R1 => curry2 (gf (uncurry2 R0) (uncurry2 R1))). Proof. repeat_intros 6. apply curry_map2. apply MON; apply uncurry_map2; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. Variable gf_0 gf_1 : rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -451,70 +412,27 @@ Qed. End Arg2_2. -Hint Unfold monotone2_2. -Hint Resolve paco2_2_0_fold. -Hint Resolve paco2_2_1_fold. - -Arguments paco2_2_0_acc [ T0 T1 ]. -Arguments paco2_2_1_acc [ T0 T1 ]. -Arguments paco2_2_0_mon [ T0 T1 ]. -Arguments paco2_2_1_mon [ T0 T1 ]. -Arguments paco2_2_0_mult_strong [ T0 T1 ]. -Arguments paco2_2_1_mult_strong [ T0 T1 ]. -Arguments paco2_2_0_mult [ T0 T1 ]. -Arguments paco2_2_1_mult [ T0 T1 ]. -Arguments paco2_2_0_fold [ T0 T1 ]. -Arguments paco2_2_1_fold [ T0 T1 ]. -Arguments paco2_2_0_unfold [ T0 T1 ]. -Arguments paco2_2_1_unfold [ T0 T1 ]. - -Global Opaque paco2_2_0. -Global Opaque paco2_2_0_acc. -Global Opaque paco2_2_0_mult. -Global Opaque paco2_2_0_fold. -Global Opaque paco2_2_0_unfold. - -Global Opaque paco2_2_1. -Global Opaque paco2_2_1_acc. -Global Opaque paco2_2_1_mult. -Global Opaque paco2_2_1_fold. -Global Opaque paco2_2_1_unfold. - -Instance paco2_2_0_inst T0 T1 (gf_0 gf_1 : rel2 T0 T1->_) r_0 r_1 x0 x1 : paco_class (paco2_2_0 gf_0 gf_1 r_0 r_1 x0 x1) := -{ pacoacc := paco2_2_0_acc gf_0 gf_1; - pacomult := paco2_2_0_mult gf_0 gf_1; - pacofold := paco2_2_0_fold gf_0 gf_1; - pacounfold := paco2_2_0_unfold gf_0 gf_1 }. - -Instance paco2_2_1_inst T0 T1 (gf_0 gf_1 : rel2 T0 T1->_) r_0 r_1 x0 x1 : paco_class (paco2_2_1 gf_0 gf_1 r_0 r_1 x0 x1) := -{ pacoacc := paco2_2_1_acc gf_0 gf_1; - pacomult := paco2_2_1_mult gf_0 gf_1; - pacofold := paco2_2_1_fold gf_0 gf_1; - pacounfold := paco2_2_1_unfold gf_0 gf_1 }. - (** 3 Mutual Coinduction *) Section Arg2_3. -Definition monotone2_3 T0 T1 (gf: rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1) := +Definition monotone2_3 (gf: rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1) := forall x0 x1 r_0 r_1 r_2 r'_0 r'_1 r'_2 (IN: gf r_0 r_1 r_2 x0 x1) (LE_0: r_0 <2= r'_0)(LE_1: r_1 <2= r'_1)(LE_2: r_2 <2= r'_2), gf r'_0 r'_1 r'_2 x0 x1. -Definition _monotone2_3 T0 T1 (gf: rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1) := +Definition _monotone2_3 (gf: rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1) := forall r_0 r_1 r_2 r'_0 r'_1 r'_2(LE_0: r_0 <2= r'_0)(LE_1: r_1 <2= r'_1)(LE_2: r_2 <2= r'_2), gf r_0 r_1 r_2 <2== gf r'_0 r'_1 r'_2. -Lemma monotone2_3_eq T0 T1 (gf: rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1) : +Lemma monotone2_3_eq (gf: rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1) : monotone2_3 gf <-> _monotone2_3 gf. Proof. unfold monotone2_3, _monotone2_3, le2. split; eauto. Qed. -Lemma monotone2_3_map T0 T1 (gf: rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1) +Lemma monotone2_3_map (gf: rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1) (MON: _monotone2_3 gf) : _monotone_3 (fun R0 R1 R2 => curry2 (gf (uncurry2 R0) (uncurry2 R1) (uncurry2 R2))). Proof. repeat_intros 9. apply curry_map2. apply MON; apply uncurry_map2; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. Variable gf_0 gf_1 gf_2 : rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1 -> rel2 T0 T1. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -747,10 +665,72 @@ Qed. End Arg2_3. -Hint Unfold monotone2_3. +End PACO2. + +Global Opaque paco2. + +Hint Unfold upaco2. +Hint Resolve paco2_fold. +Hint Unfold monotone2. + +Arguments paco2_acc [ T0 T1 ]. +Arguments paco2_mon [ T0 T1 ]. +Arguments paco2_mult_strong [ T0 T1 ]. +Arguments paco2_mult [ T0 T1 ]. +Arguments paco2_fold [ T0 T1 ]. +Arguments paco2_unfold [ T0 T1 ]. + +Instance paco2_inst T0 T1 (gf : rel2 T0 T1->_) r x0 x1 : paco_class (paco2 gf r x0 x1) := +{ pacoacc := paco2_acc gf; + pacomult := paco2_mult gf; + pacofold := paco2_fold gf; + pacounfold := paco2_unfold gf }. + +Global Opaque paco2_2_0. +Global Opaque paco2_2_1. + +Hint Unfold upaco2_2_0. +Hint Unfold upaco2_2_1. +Hint Resolve paco2_2_0_fold. +Hint Resolve paco2_2_1_fold. +Hint Unfold monotone2_2. + +Arguments paco2_2_0_acc [ T0 T1 ]. +Arguments paco2_2_1_acc [ T0 T1 ]. +Arguments paco2_2_0_mon [ T0 T1 ]. +Arguments paco2_2_1_mon [ T0 T1 ]. +Arguments paco2_2_0_mult_strong [ T0 T1 ]. +Arguments paco2_2_1_mult_strong [ T0 T1 ]. +Arguments paco2_2_0_mult [ T0 T1 ]. +Arguments paco2_2_1_mult [ T0 T1 ]. +Arguments paco2_2_0_fold [ T0 T1 ]. +Arguments paco2_2_1_fold [ T0 T1 ]. +Arguments paco2_2_0_unfold [ T0 T1 ]. +Arguments paco2_2_1_unfold [ T0 T1 ]. + +Instance paco2_2_0_inst T0 T1 (gf_0 gf_1 : rel2 T0 T1->_) r_0 r_1 x0 x1 : paco_class (paco2_2_0 gf_0 gf_1 r_0 r_1 x0 x1) := +{ pacoacc := paco2_2_0_acc gf_0 gf_1; + pacomult := paco2_2_0_mult gf_0 gf_1; + pacofold := paco2_2_0_fold gf_0 gf_1; + pacounfold := paco2_2_0_unfold gf_0 gf_1 }. + +Instance paco2_2_1_inst T0 T1 (gf_0 gf_1 : rel2 T0 T1->_) r_0 r_1 x0 x1 : paco_class (paco2_2_1 gf_0 gf_1 r_0 r_1 x0 x1) := +{ pacoacc := paco2_2_1_acc gf_0 gf_1; + pacomult := paco2_2_1_mult gf_0 gf_1; + pacofold := paco2_2_1_fold gf_0 gf_1; + pacounfold := paco2_2_1_unfold gf_0 gf_1 }. + +Global Opaque paco2_3_0. +Global Opaque paco2_3_1. +Global Opaque paco2_3_2. + +Hint Unfold upaco2_3_0. +Hint Unfold upaco2_3_1. +Hint Unfold upaco2_3_2. Hint Resolve paco2_3_0_fold. Hint Resolve paco2_3_1_fold. Hint Resolve paco2_3_2_fold. +Hint Unfold monotone2_3. Arguments paco2_3_0_acc [ T0 T1 ]. Arguments paco2_3_1_acc [ T0 T1 ]. @@ -771,24 +751,6 @@ Arguments paco2_3_0_unfold [ T0 T1 ]. Arguments paco2_3_1_unfold [ T0 T1 ]. Arguments paco2_3_2_unfold [ T0 T1 ]. -Global Opaque paco2_3_0. -Global Opaque paco2_3_0_acc. -Global Opaque paco2_3_0_mult. -Global Opaque paco2_3_0_fold. -Global Opaque paco2_3_0_unfold. - -Global Opaque paco2_3_1. -Global Opaque paco2_3_1_acc. -Global Opaque paco2_3_1_mult. -Global Opaque paco2_3_1_fold. -Global Opaque paco2_3_1_unfold. - -Global Opaque paco2_3_2. -Global Opaque paco2_3_2_acc. -Global Opaque paco2_3_2_mult. -Global Opaque paco2_3_2_fold. -Global Opaque paco2_3_2_unfold. - Instance paco2_3_0_inst T0 T1 (gf_0 gf_1 gf_2 : rel2 T0 T1->_) r_0 r_1 r_2 x0 x1 : paco_class (paco2_3_0 gf_0 gf_1 gf_2 r_0 r_1 r_2 x0 x1) := { pacoacc := paco2_3_0_acc gf_0 gf_1 gf_2; pacomult := paco2_3_0_mult gf_0 gf_1 gf_2; diff --git a/src/paco3.v b/src/paco3.v index a2e16b9..0b411a9 100644 --- a/src/paco3.v +++ b/src/paco3.v @@ -2,7 +2,7 @@ Require Export paconotation pacotacuser. Require Import paconotation_internal pacotac pacon. Set Implicit Arguments. -Section SIGT. +Section PACO3. Variable T0 : Type. Variable T1 : forall (x0: @T0), Type. @@ -70,15 +70,10 @@ Proof. apply curry_map_rev3. eapply le1_trans; [|eauto]. apply uncurry_bij1_3. Qed. -End SIGT. - (** ** Predicates of Arity 3 *) Section Arg3_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. Variable gf : rel3 T0 T1 T2 -> rel3 T0 T1 T2. Arguments gf : clear implicits. @@ -87,14 +82,11 @@ Definition paco3( r: rel3 T0 T1 T2) : rel3 T0 T1 T2 := Definition upaco3( r: rel3 T0 T1 T2) := paco3 r \3/ r. End Arg3_def. -Arguments paco3 [ T0 T1 T2 ]. -Arguments upaco3 [ T0 T1 T2 ]. +Arguments paco3 : clear implicits. +Arguments upaco3 : clear implicits. Hint Unfold upaco3. Section Arg3_2_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. Variable gf_0 gf_1 : rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -108,17 +100,14 @@ Definition paco3_2_1( r_0 r_1: rel3 T0 T1 T2) : rel3 T0 T1 T2 := Definition upaco3_2_0( r_0 r_1: rel3 T0 T1 T2) := paco3_2_0 r_0 r_1 \3/ r_0. Definition upaco3_2_1( r_0 r_1: rel3 T0 T1 T2) := paco3_2_1 r_0 r_1 \3/ r_1. End Arg3_2_def. -Arguments paco3_2_0 [ T0 T1 T2 ]. -Arguments upaco3_2_0 [ T0 T1 T2 ]. +Arguments paco3_2_0 : clear implicits. +Arguments upaco3_2_0 : clear implicits. Hint Unfold upaco3_2_0. -Arguments paco3_2_1 [ T0 T1 T2 ]. -Arguments upaco3_2_1 [ T0 T1 T2 ]. +Arguments paco3_2_1 : clear implicits. +Arguments upaco3_2_1 : clear implicits. Hint Unfold upaco3_2_1. Section Arg3_3_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. Variable gf_0 gf_1 gf_2 : rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -137,45 +126,37 @@ Definition upaco3_3_0( r_0 r_1 r_2: rel3 T0 T1 T2) := paco3_3_0 r_0 r_1 r_2 \3/ Definition upaco3_3_1( r_0 r_1 r_2: rel3 T0 T1 T2) := paco3_3_1 r_0 r_1 r_2 \3/ r_1. Definition upaco3_3_2( r_0 r_1 r_2: rel3 T0 T1 T2) := paco3_3_2 r_0 r_1 r_2 \3/ r_2. End Arg3_3_def. -Arguments paco3_3_0 [ T0 T1 T2 ]. -Arguments upaco3_3_0 [ T0 T1 T2 ]. +Arguments paco3_3_0 : clear implicits. +Arguments upaco3_3_0 : clear implicits. Hint Unfold upaco3_3_0. -Arguments paco3_3_1 [ T0 T1 T2 ]. -Arguments upaco3_3_1 [ T0 T1 T2 ]. +Arguments paco3_3_1 : clear implicits. +Arguments upaco3_3_1 : clear implicits. Hint Unfold upaco3_3_1. -Arguments paco3_3_2 [ T0 T1 T2 ]. -Arguments upaco3_3_2 [ T0 T1 T2 ]. +Arguments paco3_3_2 : clear implicits. +Arguments upaco3_3_2 : clear implicits. Hint Unfold upaco3_3_2. -(* Less than or equal - internal use only *) -Notation "p <_paco_3= q" := - (forall _paco_x0 _paco_x1 _paco_x2 (PR: p _paco_x0 _paco_x1 _paco_x2 : Prop), q _paco_x0 _paco_x1 _paco_x2 : Prop) - (at level 50, no associativity). - (** 1 Mutual Coinduction *) Section Arg3_1. -Definition monotone3 T0 T1 T2 (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2) := +Definition monotone3 (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2) := forall x0 x1 x2 r r' (IN: gf r x0 x1 x2) (LE: r <3= r'), gf r' x0 x1 x2. -Definition _monotone3 T0 T1 T2 (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2) := +Definition _monotone3 (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2) := forall r r'(LE: r <3= r'), gf r <3== gf r'. -Lemma monotone3_eq T0 T1 T2 (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2) : +Lemma monotone3_eq (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2) : monotone3 gf <-> _monotone3 gf. Proof. unfold monotone3, _monotone3, le3. split; eauto. Qed. -Lemma monotone3_map T0 T1 T2 (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2) +Lemma monotone3_map (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2) (MON: _monotone3 gf) : _monotone (fun R0 => curry3 (gf (uncurry3 R0))). Proof. repeat_intros 3. apply curry_map3. apply MON; apply uncurry_map3; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. Variable gf : rel3 T0 T1 T2 -> rel3 T0 T1 T2. Arguments gf : clear implicits. @@ -256,52 +237,27 @@ Qed. End Arg3_1. -Hint Unfold monotone3. -Hint Resolve paco3_fold. - -Arguments paco3_acc [ T0 T1 T2 ]. -Arguments paco3_mon [ T0 T1 T2 ]. -Arguments paco3_mult_strong [ T0 T1 T2 ]. -Arguments paco3_mult [ T0 T1 T2 ]. -Arguments paco3_fold [ T0 T1 T2 ]. -Arguments paco3_unfold [ T0 T1 T2 ]. - -Global Opaque paco3. -Global Opaque paco3_acc. -Global Opaque paco3_mult. -Global Opaque paco3_fold. -Global Opaque paco3_unfold. - -Instance paco3_inst T0 T1 T2 (gf : rel3 T0 T1 T2->_) r x0 x1 x2 : paco_class (paco3 gf r x0 x1 x2) := -{ pacoacc := paco3_acc gf; - pacomult := paco3_mult gf; - pacofold := paco3_fold gf; - pacounfold := paco3_unfold gf }. - (** 2 Mutual Coinduction *) Section Arg3_2. -Definition monotone3_2 T0 T1 T2 (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2) := +Definition monotone3_2 (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2) := forall x0 x1 x2 r_0 r_1 r'_0 r'_1 (IN: gf r_0 r_1 x0 x1 x2) (LE_0: r_0 <3= r'_0)(LE_1: r_1 <3= r'_1), gf r'_0 r'_1 x0 x1 x2. -Definition _monotone3_2 T0 T1 T2 (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2) := +Definition _monotone3_2 (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2) := forall r_0 r_1 r'_0 r'_1(LE_0: r_0 <3= r'_0)(LE_1: r_1 <3= r'_1), gf r_0 r_1 <3== gf r'_0 r'_1. -Lemma monotone3_2_eq T0 T1 T2 (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2) : +Lemma monotone3_2_eq (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2) : monotone3_2 gf <-> _monotone3_2 gf. Proof. unfold monotone3_2, _monotone3_2, le3. split; eauto. Qed. -Lemma monotone3_2_map T0 T1 T2 (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2) +Lemma monotone3_2_map (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2) (MON: _monotone3_2 gf) : _monotone_2 (fun R0 R1 => curry3 (gf (uncurry3 R0) (uncurry3 R1))). Proof. repeat_intros 6. apply curry_map3. apply MON; apply uncurry_map3; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. Variable gf_0 gf_1 : rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -458,71 +414,27 @@ Qed. End Arg3_2. -Hint Unfold monotone3_2. -Hint Resolve paco3_2_0_fold. -Hint Resolve paco3_2_1_fold. - -Arguments paco3_2_0_acc [ T0 T1 T2 ]. -Arguments paco3_2_1_acc [ T0 T1 T2 ]. -Arguments paco3_2_0_mon [ T0 T1 T2 ]. -Arguments paco3_2_1_mon [ T0 T1 T2 ]. -Arguments paco3_2_0_mult_strong [ T0 T1 T2 ]. -Arguments paco3_2_1_mult_strong [ T0 T1 T2 ]. -Arguments paco3_2_0_mult [ T0 T1 T2 ]. -Arguments paco3_2_1_mult [ T0 T1 T2 ]. -Arguments paco3_2_0_fold [ T0 T1 T2 ]. -Arguments paco3_2_1_fold [ T0 T1 T2 ]. -Arguments paco3_2_0_unfold [ T0 T1 T2 ]. -Arguments paco3_2_1_unfold [ T0 T1 T2 ]. - -Global Opaque paco3_2_0. -Global Opaque paco3_2_0_acc. -Global Opaque paco3_2_0_mult. -Global Opaque paco3_2_0_fold. -Global Opaque paco3_2_0_unfold. - -Global Opaque paco3_2_1. -Global Opaque paco3_2_1_acc. -Global Opaque paco3_2_1_mult. -Global Opaque paco3_2_1_fold. -Global Opaque paco3_2_1_unfold. - -Instance paco3_2_0_inst T0 T1 T2 (gf_0 gf_1 : rel3 T0 T1 T2->_) r_0 r_1 x0 x1 x2 : paco_class (paco3_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2) := -{ pacoacc := paco3_2_0_acc gf_0 gf_1; - pacomult := paco3_2_0_mult gf_0 gf_1; - pacofold := paco3_2_0_fold gf_0 gf_1; - pacounfold := paco3_2_0_unfold gf_0 gf_1 }. - -Instance paco3_2_1_inst T0 T1 T2 (gf_0 gf_1 : rel3 T0 T1 T2->_) r_0 r_1 x0 x1 x2 : paco_class (paco3_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2) := -{ pacoacc := paco3_2_1_acc gf_0 gf_1; - pacomult := paco3_2_1_mult gf_0 gf_1; - pacofold := paco3_2_1_fold gf_0 gf_1; - pacounfold := paco3_2_1_unfold gf_0 gf_1 }. - (** 3 Mutual Coinduction *) Section Arg3_3. -Definition monotone3_3 T0 T1 T2 (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2) := +Definition monotone3_3 (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2) := forall x0 x1 x2 r_0 r_1 r_2 r'_0 r'_1 r'_2 (IN: gf r_0 r_1 r_2 x0 x1 x2) (LE_0: r_0 <3= r'_0)(LE_1: r_1 <3= r'_1)(LE_2: r_2 <3= r'_2), gf r'_0 r'_1 r'_2 x0 x1 x2. -Definition _monotone3_3 T0 T1 T2 (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2) := +Definition _monotone3_3 (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2) := forall r_0 r_1 r_2 r'_0 r'_1 r'_2(LE_0: r_0 <3= r'_0)(LE_1: r_1 <3= r'_1)(LE_2: r_2 <3= r'_2), gf r_0 r_1 r_2 <3== gf r'_0 r'_1 r'_2. -Lemma monotone3_3_eq T0 T1 T2 (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2) : +Lemma monotone3_3_eq (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2) : monotone3_3 gf <-> _monotone3_3 gf. Proof. unfold monotone3_3, _monotone3_3, le3. split; eauto. Qed. -Lemma monotone3_3_map T0 T1 T2 (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2) +Lemma monotone3_3_map (gf: rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2) (MON: _monotone3_3 gf) : _monotone_3 (fun R0 R1 R2 => curry3 (gf (uncurry3 R0) (uncurry3 R1) (uncurry3 R2))). Proof. repeat_intros 9. apply curry_map3. apply MON; apply uncurry_map3; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. Variable gf_0 gf_1 gf_2 : rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2 -> rel3 T0 T1 T2. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -755,10 +667,72 @@ Qed. End Arg3_3. -Hint Unfold monotone3_3. +End PACO3. + +Global Opaque paco3. + +Hint Unfold upaco3. +Hint Resolve paco3_fold. +Hint Unfold monotone3. + +Arguments paco3_acc [ T0 T1 T2 ]. +Arguments paco3_mon [ T0 T1 T2 ]. +Arguments paco3_mult_strong [ T0 T1 T2 ]. +Arguments paco3_mult [ T0 T1 T2 ]. +Arguments paco3_fold [ T0 T1 T2 ]. +Arguments paco3_unfold [ T0 T1 T2 ]. + +Instance paco3_inst T0 T1 T2 (gf : rel3 T0 T1 T2->_) r x0 x1 x2 : paco_class (paco3 gf r x0 x1 x2) := +{ pacoacc := paco3_acc gf; + pacomult := paco3_mult gf; + pacofold := paco3_fold gf; + pacounfold := paco3_unfold gf }. + +Global Opaque paco3_2_0. +Global Opaque paco3_2_1. + +Hint Unfold upaco3_2_0. +Hint Unfold upaco3_2_1. +Hint Resolve paco3_2_0_fold. +Hint Resolve paco3_2_1_fold. +Hint Unfold monotone3_2. + +Arguments paco3_2_0_acc [ T0 T1 T2 ]. +Arguments paco3_2_1_acc [ T0 T1 T2 ]. +Arguments paco3_2_0_mon [ T0 T1 T2 ]. +Arguments paco3_2_1_mon [ T0 T1 T2 ]. +Arguments paco3_2_0_mult_strong [ T0 T1 T2 ]. +Arguments paco3_2_1_mult_strong [ T0 T1 T2 ]. +Arguments paco3_2_0_mult [ T0 T1 T2 ]. +Arguments paco3_2_1_mult [ T0 T1 T2 ]. +Arguments paco3_2_0_fold [ T0 T1 T2 ]. +Arguments paco3_2_1_fold [ T0 T1 T2 ]. +Arguments paco3_2_0_unfold [ T0 T1 T2 ]. +Arguments paco3_2_1_unfold [ T0 T1 T2 ]. + +Instance paco3_2_0_inst T0 T1 T2 (gf_0 gf_1 : rel3 T0 T1 T2->_) r_0 r_1 x0 x1 x2 : paco_class (paco3_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2) := +{ pacoacc := paco3_2_0_acc gf_0 gf_1; + pacomult := paco3_2_0_mult gf_0 gf_1; + pacofold := paco3_2_0_fold gf_0 gf_1; + pacounfold := paco3_2_0_unfold gf_0 gf_1 }. + +Instance paco3_2_1_inst T0 T1 T2 (gf_0 gf_1 : rel3 T0 T1 T2->_) r_0 r_1 x0 x1 x2 : paco_class (paco3_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2) := +{ pacoacc := paco3_2_1_acc gf_0 gf_1; + pacomult := paco3_2_1_mult gf_0 gf_1; + pacofold := paco3_2_1_fold gf_0 gf_1; + pacounfold := paco3_2_1_unfold gf_0 gf_1 }. + +Global Opaque paco3_3_0. +Global Opaque paco3_3_1. +Global Opaque paco3_3_2. + +Hint Unfold upaco3_3_0. +Hint Unfold upaco3_3_1. +Hint Unfold upaco3_3_2. Hint Resolve paco3_3_0_fold. Hint Resolve paco3_3_1_fold. Hint Resolve paco3_3_2_fold. +Hint Unfold monotone3_3. Arguments paco3_3_0_acc [ T0 T1 T2 ]. Arguments paco3_3_1_acc [ T0 T1 T2 ]. @@ -779,24 +753,6 @@ Arguments paco3_3_0_unfold [ T0 T1 T2 ]. Arguments paco3_3_1_unfold [ T0 T1 T2 ]. Arguments paco3_3_2_unfold [ T0 T1 T2 ]. -Global Opaque paco3_3_0. -Global Opaque paco3_3_0_acc. -Global Opaque paco3_3_0_mult. -Global Opaque paco3_3_0_fold. -Global Opaque paco3_3_0_unfold. - -Global Opaque paco3_3_1. -Global Opaque paco3_3_1_acc. -Global Opaque paco3_3_1_mult. -Global Opaque paco3_3_1_fold. -Global Opaque paco3_3_1_unfold. - -Global Opaque paco3_3_2. -Global Opaque paco3_3_2_acc. -Global Opaque paco3_3_2_mult. -Global Opaque paco3_3_2_fold. -Global Opaque paco3_3_2_unfold. - Instance paco3_3_0_inst T0 T1 T2 (gf_0 gf_1 gf_2 : rel3 T0 T1 T2->_) r_0 r_1 r_2 x0 x1 x2 : paco_class (paco3_3_0 gf_0 gf_1 gf_2 r_0 r_1 r_2 x0 x1 x2) := { pacoacc := paco3_3_0_acc gf_0 gf_1 gf_2; pacomult := paco3_3_0_mult gf_0 gf_1 gf_2; diff --git a/src/paco4.v b/src/paco4.v index 15cc252..5939613 100644 --- a/src/paco4.v +++ b/src/paco4.v @@ -2,7 +2,7 @@ Require Export paconotation pacotacuser. Require Import paconotation_internal pacotac pacon. Set Implicit Arguments. -Section SIGT. +Section PACO4. Variable T0 : Type. Variable T1 : forall (x0: @T0), Type. @@ -72,16 +72,10 @@ Proof. apply curry_map_rev4. eapply le1_trans; [|eauto]. apply uncurry_bij1_4. Qed. -End SIGT. - (** ** Predicates of Arity 4 *) Section Arg4_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. Variable gf : rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3. Arguments gf : clear implicits. @@ -90,15 +84,11 @@ Definition paco4( r: rel4 T0 T1 T2 T3) : rel4 T0 T1 T2 T3 := Definition upaco4( r: rel4 T0 T1 T2 T3) := paco4 r \4/ r. End Arg4_def. -Arguments paco4 [ T0 T1 T2 T3 ]. -Arguments upaco4 [ T0 T1 T2 T3 ]. +Arguments paco4 : clear implicits. +Arguments upaco4 : clear implicits. Hint Unfold upaco4. Section Arg4_2_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. Variable gf_0 gf_1 : rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -112,18 +102,14 @@ Definition paco4_2_1( r_0 r_1: rel4 T0 T1 T2 T3) : rel4 T0 T1 T2 T3 := Definition upaco4_2_0( r_0 r_1: rel4 T0 T1 T2 T3) := paco4_2_0 r_0 r_1 \4/ r_0. Definition upaco4_2_1( r_0 r_1: rel4 T0 T1 T2 T3) := paco4_2_1 r_0 r_1 \4/ r_1. End Arg4_2_def. -Arguments paco4_2_0 [ T0 T1 T2 T3 ]. -Arguments upaco4_2_0 [ T0 T1 T2 T3 ]. +Arguments paco4_2_0 : clear implicits. +Arguments upaco4_2_0 : clear implicits. Hint Unfold upaco4_2_0. -Arguments paco4_2_1 [ T0 T1 T2 T3 ]. -Arguments upaco4_2_1 [ T0 T1 T2 T3 ]. +Arguments paco4_2_1 : clear implicits. +Arguments upaco4_2_1 : clear implicits. Hint Unfold upaco4_2_1. Section Arg4_3_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. Variable gf_0 gf_1 gf_2 : rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -142,46 +128,37 @@ Definition upaco4_3_0( r_0 r_1 r_2: rel4 T0 T1 T2 T3) := paco4_3_0 r_0 r_1 r_2 \ Definition upaco4_3_1( r_0 r_1 r_2: rel4 T0 T1 T2 T3) := paco4_3_1 r_0 r_1 r_2 \4/ r_1. Definition upaco4_3_2( r_0 r_1 r_2: rel4 T0 T1 T2 T3) := paco4_3_2 r_0 r_1 r_2 \4/ r_2. End Arg4_3_def. -Arguments paco4_3_0 [ T0 T1 T2 T3 ]. -Arguments upaco4_3_0 [ T0 T1 T2 T3 ]. +Arguments paco4_3_0 : clear implicits. +Arguments upaco4_3_0 : clear implicits. Hint Unfold upaco4_3_0. -Arguments paco4_3_1 [ T0 T1 T2 T3 ]. -Arguments upaco4_3_1 [ T0 T1 T2 T3 ]. +Arguments paco4_3_1 : clear implicits. +Arguments upaco4_3_1 : clear implicits. Hint Unfold upaco4_3_1. -Arguments paco4_3_2 [ T0 T1 T2 T3 ]. -Arguments upaco4_3_2 [ T0 T1 T2 T3 ]. +Arguments paco4_3_2 : clear implicits. +Arguments upaco4_3_2 : clear implicits. Hint Unfold upaco4_3_2. -(* Less than or equal - internal use only *) -Notation "p <_paco_4= q" := - (forall _paco_x0 _paco_x1 _paco_x2 _paco_x3 (PR: p _paco_x0 _paco_x1 _paco_x2 _paco_x3 : Prop), q _paco_x0 _paco_x1 _paco_x2 _paco_x3 : Prop) - (at level 50, no associativity). - (** 1 Mutual Coinduction *) Section Arg4_1. -Definition monotone4 T0 T1 T2 T3 (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) := +Definition monotone4 (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) := forall x0 x1 x2 x3 r r' (IN: gf r x0 x1 x2 x3) (LE: r <4= r'), gf r' x0 x1 x2 x3. -Definition _monotone4 T0 T1 T2 T3 (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) := +Definition _monotone4 (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) := forall r r'(LE: r <4= r'), gf r <4== gf r'. -Lemma monotone4_eq T0 T1 T2 T3 (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) : +Lemma monotone4_eq (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) : monotone4 gf <-> _monotone4 gf. Proof. unfold monotone4, _monotone4, le4. split; eauto. Qed. -Lemma monotone4_map T0 T1 T2 T3 (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) +Lemma monotone4_map (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) (MON: _monotone4 gf) : _monotone (fun R0 => curry4 (gf (uncurry4 R0))). Proof. repeat_intros 3. apply curry_map4. apply MON; apply uncurry_map4; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. Variable gf : rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3. Arguments gf : clear implicits. @@ -262,53 +239,27 @@ Qed. End Arg4_1. -Hint Unfold monotone4. -Hint Resolve paco4_fold. - -Arguments paco4_acc [ T0 T1 T2 T3 ]. -Arguments paco4_mon [ T0 T1 T2 T3 ]. -Arguments paco4_mult_strong [ T0 T1 T2 T3 ]. -Arguments paco4_mult [ T0 T1 T2 T3 ]. -Arguments paco4_fold [ T0 T1 T2 T3 ]. -Arguments paco4_unfold [ T0 T1 T2 T3 ]. - -Global Opaque paco4. -Global Opaque paco4_acc. -Global Opaque paco4_mult. -Global Opaque paco4_fold. -Global Opaque paco4_unfold. - -Instance paco4_inst T0 T1 T2 T3 (gf : rel4 T0 T1 T2 T3->_) r x0 x1 x2 x3 : paco_class (paco4 gf r x0 x1 x2 x3) := -{ pacoacc := paco4_acc gf; - pacomult := paco4_mult gf; - pacofold := paco4_fold gf; - pacounfold := paco4_unfold gf }. - (** 2 Mutual Coinduction *) Section Arg4_2. -Definition monotone4_2 T0 T1 T2 T3 (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) := +Definition monotone4_2 (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) := forall x0 x1 x2 x3 r_0 r_1 r'_0 r'_1 (IN: gf r_0 r_1 x0 x1 x2 x3) (LE_0: r_0 <4= r'_0)(LE_1: r_1 <4= r'_1), gf r'_0 r'_1 x0 x1 x2 x3. -Definition _monotone4_2 T0 T1 T2 T3 (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) := +Definition _monotone4_2 (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) := forall r_0 r_1 r'_0 r'_1(LE_0: r_0 <4= r'_0)(LE_1: r_1 <4= r'_1), gf r_0 r_1 <4== gf r'_0 r'_1. -Lemma monotone4_2_eq T0 T1 T2 T3 (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) : +Lemma monotone4_2_eq (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) : monotone4_2 gf <-> _monotone4_2 gf. Proof. unfold monotone4_2, _monotone4_2, le4. split; eauto. Qed. -Lemma monotone4_2_map T0 T1 T2 T3 (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) +Lemma monotone4_2_map (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) (MON: _monotone4_2 gf) : _monotone_2 (fun R0 R1 => curry4 (gf (uncurry4 R0) (uncurry4 R1))). Proof. repeat_intros 6. apply curry_map4. apply MON; apply uncurry_map4; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. Variable gf_0 gf_1 : rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -465,72 +416,27 @@ Qed. End Arg4_2. -Hint Unfold monotone4_2. -Hint Resolve paco4_2_0_fold. -Hint Resolve paco4_2_1_fold. - -Arguments paco4_2_0_acc [ T0 T1 T2 T3 ]. -Arguments paco4_2_1_acc [ T0 T1 T2 T3 ]. -Arguments paco4_2_0_mon [ T0 T1 T2 T3 ]. -Arguments paco4_2_1_mon [ T0 T1 T2 T3 ]. -Arguments paco4_2_0_mult_strong [ T0 T1 T2 T3 ]. -Arguments paco4_2_1_mult_strong [ T0 T1 T2 T3 ]. -Arguments paco4_2_0_mult [ T0 T1 T2 T3 ]. -Arguments paco4_2_1_mult [ T0 T1 T2 T3 ]. -Arguments paco4_2_0_fold [ T0 T1 T2 T3 ]. -Arguments paco4_2_1_fold [ T0 T1 T2 T3 ]. -Arguments paco4_2_0_unfold [ T0 T1 T2 T3 ]. -Arguments paco4_2_1_unfold [ T0 T1 T2 T3 ]. - -Global Opaque paco4_2_0. -Global Opaque paco4_2_0_acc. -Global Opaque paco4_2_0_mult. -Global Opaque paco4_2_0_fold. -Global Opaque paco4_2_0_unfold. - -Global Opaque paco4_2_1. -Global Opaque paco4_2_1_acc. -Global Opaque paco4_2_1_mult. -Global Opaque paco4_2_1_fold. -Global Opaque paco4_2_1_unfold. - -Instance paco4_2_0_inst T0 T1 T2 T3 (gf_0 gf_1 : rel4 T0 T1 T2 T3->_) r_0 r_1 x0 x1 x2 x3 : paco_class (paco4_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3) := -{ pacoacc := paco4_2_0_acc gf_0 gf_1; - pacomult := paco4_2_0_mult gf_0 gf_1; - pacofold := paco4_2_0_fold gf_0 gf_1; - pacounfold := paco4_2_0_unfold gf_0 gf_1 }. - -Instance paco4_2_1_inst T0 T1 T2 T3 (gf_0 gf_1 : rel4 T0 T1 T2 T3->_) r_0 r_1 x0 x1 x2 x3 : paco_class (paco4_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3) := -{ pacoacc := paco4_2_1_acc gf_0 gf_1; - pacomult := paco4_2_1_mult gf_0 gf_1; - pacofold := paco4_2_1_fold gf_0 gf_1; - pacounfold := paco4_2_1_unfold gf_0 gf_1 }. - (** 3 Mutual Coinduction *) Section Arg4_3. -Definition monotone4_3 T0 T1 T2 T3 (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) := +Definition monotone4_3 (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) := forall x0 x1 x2 x3 r_0 r_1 r_2 r'_0 r'_1 r'_2 (IN: gf r_0 r_1 r_2 x0 x1 x2 x3) (LE_0: r_0 <4= r'_0)(LE_1: r_1 <4= r'_1)(LE_2: r_2 <4= r'_2), gf r'_0 r'_1 r'_2 x0 x1 x2 x3. -Definition _monotone4_3 T0 T1 T2 T3 (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) := +Definition _monotone4_3 (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) := forall r_0 r_1 r_2 r'_0 r'_1 r'_2(LE_0: r_0 <4= r'_0)(LE_1: r_1 <4= r'_1)(LE_2: r_2 <4= r'_2), gf r_0 r_1 r_2 <4== gf r'_0 r'_1 r'_2. -Lemma monotone4_3_eq T0 T1 T2 T3 (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) : +Lemma monotone4_3_eq (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) : monotone4_3 gf <-> _monotone4_3 gf. Proof. unfold monotone4_3, _monotone4_3, le4. split; eauto. Qed. -Lemma monotone4_3_map T0 T1 T2 T3 (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) +Lemma monotone4_3_map (gf: rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3) (MON: _monotone4_3 gf) : _monotone_3 (fun R0 R1 R2 => curry4 (gf (uncurry4 R0) (uncurry4 R1) (uncurry4 R2))). Proof. repeat_intros 9. apply curry_map4. apply MON; apply uncurry_map4; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. Variable gf_0 gf_1 gf_2 : rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3 -> rel4 T0 T1 T2 T3. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -763,10 +669,72 @@ Qed. End Arg4_3. -Hint Unfold monotone4_3. +End PACO4. + +Global Opaque paco4. + +Hint Unfold upaco4. +Hint Resolve paco4_fold. +Hint Unfold monotone4. + +Arguments paco4_acc [ T0 T1 T2 T3 ]. +Arguments paco4_mon [ T0 T1 T2 T3 ]. +Arguments paco4_mult_strong [ T0 T1 T2 T3 ]. +Arguments paco4_mult [ T0 T1 T2 T3 ]. +Arguments paco4_fold [ T0 T1 T2 T3 ]. +Arguments paco4_unfold [ T0 T1 T2 T3 ]. + +Instance paco4_inst T0 T1 T2 T3 (gf : rel4 T0 T1 T2 T3->_) r x0 x1 x2 x3 : paco_class (paco4 gf r x0 x1 x2 x3) := +{ pacoacc := paco4_acc gf; + pacomult := paco4_mult gf; + pacofold := paco4_fold gf; + pacounfold := paco4_unfold gf }. + +Global Opaque paco4_2_0. +Global Opaque paco4_2_1. + +Hint Unfold upaco4_2_0. +Hint Unfold upaco4_2_1. +Hint Resolve paco4_2_0_fold. +Hint Resolve paco4_2_1_fold. +Hint Unfold monotone4_2. + +Arguments paco4_2_0_acc [ T0 T1 T2 T3 ]. +Arguments paco4_2_1_acc [ T0 T1 T2 T3 ]. +Arguments paco4_2_0_mon [ T0 T1 T2 T3 ]. +Arguments paco4_2_1_mon [ T0 T1 T2 T3 ]. +Arguments paco4_2_0_mult_strong [ T0 T1 T2 T3 ]. +Arguments paco4_2_1_mult_strong [ T0 T1 T2 T3 ]. +Arguments paco4_2_0_mult [ T0 T1 T2 T3 ]. +Arguments paco4_2_1_mult [ T0 T1 T2 T3 ]. +Arguments paco4_2_0_fold [ T0 T1 T2 T3 ]. +Arguments paco4_2_1_fold [ T0 T1 T2 T3 ]. +Arguments paco4_2_0_unfold [ T0 T1 T2 T3 ]. +Arguments paco4_2_1_unfold [ T0 T1 T2 T3 ]. + +Instance paco4_2_0_inst T0 T1 T2 T3 (gf_0 gf_1 : rel4 T0 T1 T2 T3->_) r_0 r_1 x0 x1 x2 x3 : paco_class (paco4_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3) := +{ pacoacc := paco4_2_0_acc gf_0 gf_1; + pacomult := paco4_2_0_mult gf_0 gf_1; + pacofold := paco4_2_0_fold gf_0 gf_1; + pacounfold := paco4_2_0_unfold gf_0 gf_1 }. + +Instance paco4_2_1_inst T0 T1 T2 T3 (gf_0 gf_1 : rel4 T0 T1 T2 T3->_) r_0 r_1 x0 x1 x2 x3 : paco_class (paco4_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3) := +{ pacoacc := paco4_2_1_acc gf_0 gf_1; + pacomult := paco4_2_1_mult gf_0 gf_1; + pacofold := paco4_2_1_fold gf_0 gf_1; + pacounfold := paco4_2_1_unfold gf_0 gf_1 }. + +Global Opaque paco4_3_0. +Global Opaque paco4_3_1. +Global Opaque paco4_3_2. + +Hint Unfold upaco4_3_0. +Hint Unfold upaco4_3_1. +Hint Unfold upaco4_3_2. Hint Resolve paco4_3_0_fold. Hint Resolve paco4_3_1_fold. Hint Resolve paco4_3_2_fold. +Hint Unfold monotone4_3. Arguments paco4_3_0_acc [ T0 T1 T2 T3 ]. Arguments paco4_3_1_acc [ T0 T1 T2 T3 ]. @@ -787,24 +755,6 @@ Arguments paco4_3_0_unfold [ T0 T1 T2 T3 ]. Arguments paco4_3_1_unfold [ T0 T1 T2 T3 ]. Arguments paco4_3_2_unfold [ T0 T1 T2 T3 ]. -Global Opaque paco4_3_0. -Global Opaque paco4_3_0_acc. -Global Opaque paco4_3_0_mult. -Global Opaque paco4_3_0_fold. -Global Opaque paco4_3_0_unfold. - -Global Opaque paco4_3_1. -Global Opaque paco4_3_1_acc. -Global Opaque paco4_3_1_mult. -Global Opaque paco4_3_1_fold. -Global Opaque paco4_3_1_unfold. - -Global Opaque paco4_3_2. -Global Opaque paco4_3_2_acc. -Global Opaque paco4_3_2_mult. -Global Opaque paco4_3_2_fold. -Global Opaque paco4_3_2_unfold. - Instance paco4_3_0_inst T0 T1 T2 T3 (gf_0 gf_1 gf_2 : rel4 T0 T1 T2 T3->_) r_0 r_1 r_2 x0 x1 x2 x3 : paco_class (paco4_3_0 gf_0 gf_1 gf_2 r_0 r_1 r_2 x0 x1 x2 x3) := { pacoacc := paco4_3_0_acc gf_0 gf_1 gf_2; pacomult := paco4_3_0_mult gf_0 gf_1 gf_2; diff --git a/src/paco5.v b/src/paco5.v index 6a9050a..c8cf65f 100644 --- a/src/paco5.v +++ b/src/paco5.v @@ -2,7 +2,7 @@ Require Export paconotation pacotacuser. Require Import paconotation_internal pacotac pacon. Set Implicit Arguments. -Section SIGT. +Section PACO5. Variable T0 : Type. Variable T1 : forall (x0: @T0), Type. @@ -74,17 +74,10 @@ Proof. apply curry_map_rev5. eapply le1_trans; [|eauto]. apply uncurry_bij1_5. Qed. -End SIGT. - (** ** Predicates of Arity 5 *) Section Arg5_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. Variable gf : rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4. Arguments gf : clear implicits. @@ -93,16 +86,11 @@ Definition paco5( r: rel5 T0 T1 T2 T3 T4) : rel5 T0 T1 T2 T3 T4 := Definition upaco5( r: rel5 T0 T1 T2 T3 T4) := paco5 r \5/ r. End Arg5_def. -Arguments paco5 [ T0 T1 T2 T3 T4 ]. -Arguments upaco5 [ T0 T1 T2 T3 T4 ]. +Arguments paco5 : clear implicits. +Arguments upaco5 : clear implicits. Hint Unfold upaco5. Section Arg5_2_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. Variable gf_0 gf_1 : rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -116,19 +104,14 @@ Definition paco5_2_1( r_0 r_1: rel5 T0 T1 T2 T3 T4) : rel5 T0 T1 T2 T3 T4 := Definition upaco5_2_0( r_0 r_1: rel5 T0 T1 T2 T3 T4) := paco5_2_0 r_0 r_1 \5/ r_0. Definition upaco5_2_1( r_0 r_1: rel5 T0 T1 T2 T3 T4) := paco5_2_1 r_0 r_1 \5/ r_1. End Arg5_2_def. -Arguments paco5_2_0 [ T0 T1 T2 T3 T4 ]. -Arguments upaco5_2_0 [ T0 T1 T2 T3 T4 ]. +Arguments paco5_2_0 : clear implicits. +Arguments upaco5_2_0 : clear implicits. Hint Unfold upaco5_2_0. -Arguments paco5_2_1 [ T0 T1 T2 T3 T4 ]. -Arguments upaco5_2_1 [ T0 T1 T2 T3 T4 ]. +Arguments paco5_2_1 : clear implicits. +Arguments upaco5_2_1 : clear implicits. Hint Unfold upaco5_2_1. Section Arg5_3_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. Variable gf_0 gf_1 gf_2 : rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -147,47 +130,37 @@ Definition upaco5_3_0( r_0 r_1 r_2: rel5 T0 T1 T2 T3 T4) := paco5_3_0 r_0 r_1 r_ Definition upaco5_3_1( r_0 r_1 r_2: rel5 T0 T1 T2 T3 T4) := paco5_3_1 r_0 r_1 r_2 \5/ r_1. Definition upaco5_3_2( r_0 r_1 r_2: rel5 T0 T1 T2 T3 T4) := paco5_3_2 r_0 r_1 r_2 \5/ r_2. End Arg5_3_def. -Arguments paco5_3_0 [ T0 T1 T2 T3 T4 ]. -Arguments upaco5_3_0 [ T0 T1 T2 T3 T4 ]. +Arguments paco5_3_0 : clear implicits. +Arguments upaco5_3_0 : clear implicits. Hint Unfold upaco5_3_0. -Arguments paco5_3_1 [ T0 T1 T2 T3 T4 ]. -Arguments upaco5_3_1 [ T0 T1 T2 T3 T4 ]. +Arguments paco5_3_1 : clear implicits. +Arguments upaco5_3_1 : clear implicits. Hint Unfold upaco5_3_1. -Arguments paco5_3_2 [ T0 T1 T2 T3 T4 ]. -Arguments upaco5_3_2 [ T0 T1 T2 T3 T4 ]. +Arguments paco5_3_2 : clear implicits. +Arguments upaco5_3_2 : clear implicits. Hint Unfold upaco5_3_2. -(* Less than or equal - internal use only *) -Notation "p <_paco_5= q" := - (forall _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 (PR: p _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 : Prop), q _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 : Prop) - (at level 50, no associativity). - (** 1 Mutual Coinduction *) Section Arg5_1. -Definition monotone5 T0 T1 T2 T3 T4 (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) := +Definition monotone5 (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) := forall x0 x1 x2 x3 x4 r r' (IN: gf r x0 x1 x2 x3 x4) (LE: r <5= r'), gf r' x0 x1 x2 x3 x4. -Definition _monotone5 T0 T1 T2 T3 T4 (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) := +Definition _monotone5 (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) := forall r r'(LE: r <5= r'), gf r <5== gf r'. -Lemma monotone5_eq T0 T1 T2 T3 T4 (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) : +Lemma monotone5_eq (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) : monotone5 gf <-> _monotone5 gf. Proof. unfold monotone5, _monotone5, le5. split; eauto. Qed. -Lemma monotone5_map T0 T1 T2 T3 T4 (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) +Lemma monotone5_map (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) (MON: _monotone5 gf) : _monotone (fun R0 => curry5 (gf (uncurry5 R0))). Proof. repeat_intros 3. apply curry_map5. apply MON; apply uncurry_map5; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. Variable gf : rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4. Arguments gf : clear implicits. @@ -268,54 +241,27 @@ Qed. End Arg5_1. -Hint Unfold monotone5. -Hint Resolve paco5_fold. - -Arguments paco5_acc [ T0 T1 T2 T3 T4 ]. -Arguments paco5_mon [ T0 T1 T2 T3 T4 ]. -Arguments paco5_mult_strong [ T0 T1 T2 T3 T4 ]. -Arguments paco5_mult [ T0 T1 T2 T3 T4 ]. -Arguments paco5_fold [ T0 T1 T2 T3 T4 ]. -Arguments paco5_unfold [ T0 T1 T2 T3 T4 ]. - -Global Opaque paco5. -Global Opaque paco5_acc. -Global Opaque paco5_mult. -Global Opaque paco5_fold. -Global Opaque paco5_unfold. - -Instance paco5_inst T0 T1 T2 T3 T4 (gf : rel5 T0 T1 T2 T3 T4->_) r x0 x1 x2 x3 x4 : paco_class (paco5 gf r x0 x1 x2 x3 x4) := -{ pacoacc := paco5_acc gf; - pacomult := paco5_mult gf; - pacofold := paco5_fold gf; - pacounfold := paco5_unfold gf }. - (** 2 Mutual Coinduction *) Section Arg5_2. -Definition monotone5_2 T0 T1 T2 T3 T4 (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) := +Definition monotone5_2 (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) := forall x0 x1 x2 x3 x4 r_0 r_1 r'_0 r'_1 (IN: gf r_0 r_1 x0 x1 x2 x3 x4) (LE_0: r_0 <5= r'_0)(LE_1: r_1 <5= r'_1), gf r'_0 r'_1 x0 x1 x2 x3 x4. -Definition _monotone5_2 T0 T1 T2 T3 T4 (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) := +Definition _monotone5_2 (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) := forall r_0 r_1 r'_0 r'_1(LE_0: r_0 <5= r'_0)(LE_1: r_1 <5= r'_1), gf r_0 r_1 <5== gf r'_0 r'_1. -Lemma monotone5_2_eq T0 T1 T2 T3 T4 (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) : +Lemma monotone5_2_eq (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) : monotone5_2 gf <-> _monotone5_2 gf. Proof. unfold monotone5_2, _monotone5_2, le5. split; eauto. Qed. -Lemma monotone5_2_map T0 T1 T2 T3 T4 (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) +Lemma monotone5_2_map (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) (MON: _monotone5_2 gf) : _monotone_2 (fun R0 R1 => curry5 (gf (uncurry5 R0) (uncurry5 R1))). Proof. repeat_intros 6. apply curry_map5. apply MON; apply uncurry_map5; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. Variable gf_0 gf_1 : rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -472,73 +418,27 @@ Qed. End Arg5_2. -Hint Unfold monotone5_2. -Hint Resolve paco5_2_0_fold. -Hint Resolve paco5_2_1_fold. - -Arguments paco5_2_0_acc [ T0 T1 T2 T3 T4 ]. -Arguments paco5_2_1_acc [ T0 T1 T2 T3 T4 ]. -Arguments paco5_2_0_mon [ T0 T1 T2 T3 T4 ]. -Arguments paco5_2_1_mon [ T0 T1 T2 T3 T4 ]. -Arguments paco5_2_0_mult_strong [ T0 T1 T2 T3 T4 ]. -Arguments paco5_2_1_mult_strong [ T0 T1 T2 T3 T4 ]. -Arguments paco5_2_0_mult [ T0 T1 T2 T3 T4 ]. -Arguments paco5_2_1_mult [ T0 T1 T2 T3 T4 ]. -Arguments paco5_2_0_fold [ T0 T1 T2 T3 T4 ]. -Arguments paco5_2_1_fold [ T0 T1 T2 T3 T4 ]. -Arguments paco5_2_0_unfold [ T0 T1 T2 T3 T4 ]. -Arguments paco5_2_1_unfold [ T0 T1 T2 T3 T4 ]. - -Global Opaque paco5_2_0. -Global Opaque paco5_2_0_acc. -Global Opaque paco5_2_0_mult. -Global Opaque paco5_2_0_fold. -Global Opaque paco5_2_0_unfold. - -Global Opaque paco5_2_1. -Global Opaque paco5_2_1_acc. -Global Opaque paco5_2_1_mult. -Global Opaque paco5_2_1_fold. -Global Opaque paco5_2_1_unfold. - -Instance paco5_2_0_inst T0 T1 T2 T3 T4 (gf_0 gf_1 : rel5 T0 T1 T2 T3 T4->_) r_0 r_1 x0 x1 x2 x3 x4 : paco_class (paco5_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4) := -{ pacoacc := paco5_2_0_acc gf_0 gf_1; - pacomult := paco5_2_0_mult gf_0 gf_1; - pacofold := paco5_2_0_fold gf_0 gf_1; - pacounfold := paco5_2_0_unfold gf_0 gf_1 }. - -Instance paco5_2_1_inst T0 T1 T2 T3 T4 (gf_0 gf_1 : rel5 T0 T1 T2 T3 T4->_) r_0 r_1 x0 x1 x2 x3 x4 : paco_class (paco5_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4) := -{ pacoacc := paco5_2_1_acc gf_0 gf_1; - pacomult := paco5_2_1_mult gf_0 gf_1; - pacofold := paco5_2_1_fold gf_0 gf_1; - pacounfold := paco5_2_1_unfold gf_0 gf_1 }. - (** 3 Mutual Coinduction *) Section Arg5_3. -Definition monotone5_3 T0 T1 T2 T3 T4 (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) := +Definition monotone5_3 (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) := forall x0 x1 x2 x3 x4 r_0 r_1 r_2 r'_0 r'_1 r'_2 (IN: gf r_0 r_1 r_2 x0 x1 x2 x3 x4) (LE_0: r_0 <5= r'_0)(LE_1: r_1 <5= r'_1)(LE_2: r_2 <5= r'_2), gf r'_0 r'_1 r'_2 x0 x1 x2 x3 x4. -Definition _monotone5_3 T0 T1 T2 T3 T4 (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) := +Definition _monotone5_3 (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) := forall r_0 r_1 r_2 r'_0 r'_1 r'_2(LE_0: r_0 <5= r'_0)(LE_1: r_1 <5= r'_1)(LE_2: r_2 <5= r'_2), gf r_0 r_1 r_2 <5== gf r'_0 r'_1 r'_2. -Lemma monotone5_3_eq T0 T1 T2 T3 T4 (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) : +Lemma monotone5_3_eq (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) : monotone5_3 gf <-> _monotone5_3 gf. Proof. unfold monotone5_3, _monotone5_3, le5. split; eauto. Qed. -Lemma monotone5_3_map T0 T1 T2 T3 T4 (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) +Lemma monotone5_3_map (gf: rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4) (MON: _monotone5_3 gf) : _monotone_3 (fun R0 R1 R2 => curry5 (gf (uncurry5 R0) (uncurry5 R1) (uncurry5 R2))). Proof. repeat_intros 9. apply curry_map5. apply MON; apply uncurry_map5; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. Variable gf_0 gf_1 gf_2 : rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4 -> rel5 T0 T1 T2 T3 T4. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -771,10 +671,72 @@ Qed. End Arg5_3. -Hint Unfold monotone5_3. +End PACO5. + +Global Opaque paco5. + +Hint Unfold upaco5. +Hint Resolve paco5_fold. +Hint Unfold monotone5. + +Arguments paco5_acc [ T0 T1 T2 T3 T4 ]. +Arguments paco5_mon [ T0 T1 T2 T3 T4 ]. +Arguments paco5_mult_strong [ T0 T1 T2 T3 T4 ]. +Arguments paco5_mult [ T0 T1 T2 T3 T4 ]. +Arguments paco5_fold [ T0 T1 T2 T3 T4 ]. +Arguments paco5_unfold [ T0 T1 T2 T3 T4 ]. + +Instance paco5_inst T0 T1 T2 T3 T4 (gf : rel5 T0 T1 T2 T3 T4->_) r x0 x1 x2 x3 x4 : paco_class (paco5 gf r x0 x1 x2 x3 x4) := +{ pacoacc := paco5_acc gf; + pacomult := paco5_mult gf; + pacofold := paco5_fold gf; + pacounfold := paco5_unfold gf }. + +Global Opaque paco5_2_0. +Global Opaque paco5_2_1. + +Hint Unfold upaco5_2_0. +Hint Unfold upaco5_2_1. +Hint Resolve paco5_2_0_fold. +Hint Resolve paco5_2_1_fold. +Hint Unfold monotone5_2. + +Arguments paco5_2_0_acc [ T0 T1 T2 T3 T4 ]. +Arguments paco5_2_1_acc [ T0 T1 T2 T3 T4 ]. +Arguments paco5_2_0_mon [ T0 T1 T2 T3 T4 ]. +Arguments paco5_2_1_mon [ T0 T1 T2 T3 T4 ]. +Arguments paco5_2_0_mult_strong [ T0 T1 T2 T3 T4 ]. +Arguments paco5_2_1_mult_strong [ T0 T1 T2 T3 T4 ]. +Arguments paco5_2_0_mult [ T0 T1 T2 T3 T4 ]. +Arguments paco5_2_1_mult [ T0 T1 T2 T3 T4 ]. +Arguments paco5_2_0_fold [ T0 T1 T2 T3 T4 ]. +Arguments paco5_2_1_fold [ T0 T1 T2 T3 T4 ]. +Arguments paco5_2_0_unfold [ T0 T1 T2 T3 T4 ]. +Arguments paco5_2_1_unfold [ T0 T1 T2 T3 T4 ]. + +Instance paco5_2_0_inst T0 T1 T2 T3 T4 (gf_0 gf_1 : rel5 T0 T1 T2 T3 T4->_) r_0 r_1 x0 x1 x2 x3 x4 : paco_class (paco5_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4) := +{ pacoacc := paco5_2_0_acc gf_0 gf_1; + pacomult := paco5_2_0_mult gf_0 gf_1; + pacofold := paco5_2_0_fold gf_0 gf_1; + pacounfold := paco5_2_0_unfold gf_0 gf_1 }. + +Instance paco5_2_1_inst T0 T1 T2 T3 T4 (gf_0 gf_1 : rel5 T0 T1 T2 T3 T4->_) r_0 r_1 x0 x1 x2 x3 x4 : paco_class (paco5_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4) := +{ pacoacc := paco5_2_1_acc gf_0 gf_1; + pacomult := paco5_2_1_mult gf_0 gf_1; + pacofold := paco5_2_1_fold gf_0 gf_1; + pacounfold := paco5_2_1_unfold gf_0 gf_1 }. + +Global Opaque paco5_3_0. +Global Opaque paco5_3_1. +Global Opaque paco5_3_2. + +Hint Unfold upaco5_3_0. +Hint Unfold upaco5_3_1. +Hint Unfold upaco5_3_2. Hint Resolve paco5_3_0_fold. Hint Resolve paco5_3_1_fold. Hint Resolve paco5_3_2_fold. +Hint Unfold monotone5_3. Arguments paco5_3_0_acc [ T0 T1 T2 T3 T4 ]. Arguments paco5_3_1_acc [ T0 T1 T2 T3 T4 ]. @@ -795,24 +757,6 @@ Arguments paco5_3_0_unfold [ T0 T1 T2 T3 T4 ]. Arguments paco5_3_1_unfold [ T0 T1 T2 T3 T4 ]. Arguments paco5_3_2_unfold [ T0 T1 T2 T3 T4 ]. -Global Opaque paco5_3_0. -Global Opaque paco5_3_0_acc. -Global Opaque paco5_3_0_mult. -Global Opaque paco5_3_0_fold. -Global Opaque paco5_3_0_unfold. - -Global Opaque paco5_3_1. -Global Opaque paco5_3_1_acc. -Global Opaque paco5_3_1_mult. -Global Opaque paco5_3_1_fold. -Global Opaque paco5_3_1_unfold. - -Global Opaque paco5_3_2. -Global Opaque paco5_3_2_acc. -Global Opaque paco5_3_2_mult. -Global Opaque paco5_3_2_fold. -Global Opaque paco5_3_2_unfold. - Instance paco5_3_0_inst T0 T1 T2 T3 T4 (gf_0 gf_1 gf_2 : rel5 T0 T1 T2 T3 T4->_) r_0 r_1 r_2 x0 x1 x2 x3 x4 : paco_class (paco5_3_0 gf_0 gf_1 gf_2 r_0 r_1 r_2 x0 x1 x2 x3 x4) := { pacoacc := paco5_3_0_acc gf_0 gf_1 gf_2; pacomult := paco5_3_0_mult gf_0 gf_1 gf_2; diff --git a/src/paco6.v b/src/paco6.v index 9571f2d..1968db1 100644 --- a/src/paco6.v +++ b/src/paco6.v @@ -2,7 +2,7 @@ Require Export paconotation pacotacuser. Require Import paconotation_internal pacotac pacon. Set Implicit Arguments. -Section SIGT. +Section PACO6. Variable T0 : Type. Variable T1 : forall (x0: @T0), Type. @@ -76,18 +76,10 @@ Proof. apply curry_map_rev6. eapply le1_trans; [|eauto]. apply uncurry_bij1_6. Qed. -End SIGT. - (** ** Predicates of Arity 6 *) Section Arg6_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. Variable gf : rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5. Arguments gf : clear implicits. @@ -96,17 +88,11 @@ Definition paco6( r: rel6 T0 T1 T2 T3 T4 T5) : rel6 T0 T1 T2 T3 T4 T5 := Definition upaco6( r: rel6 T0 T1 T2 T3 T4 T5) := paco6 r \6/ r. End Arg6_def. -Arguments paco6 [ T0 T1 T2 T3 T4 T5 ]. -Arguments upaco6 [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6 : clear implicits. +Arguments upaco6 : clear implicits. Hint Unfold upaco6. Section Arg6_2_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. Variable gf_0 gf_1 : rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -120,20 +106,14 @@ Definition paco6_2_1( r_0 r_1: rel6 T0 T1 T2 T3 T4 T5) : rel6 T0 T1 T2 T3 T4 T5 Definition upaco6_2_0( r_0 r_1: rel6 T0 T1 T2 T3 T4 T5) := paco6_2_0 r_0 r_1 \6/ r_0. Definition upaco6_2_1( r_0 r_1: rel6 T0 T1 T2 T3 T4 T5) := paco6_2_1 r_0 r_1 \6/ r_1. End Arg6_2_def. -Arguments paco6_2_0 [ T0 T1 T2 T3 T4 T5 ]. -Arguments upaco6_2_0 [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_2_0 : clear implicits. +Arguments upaco6_2_0 : clear implicits. Hint Unfold upaco6_2_0. -Arguments paco6_2_1 [ T0 T1 T2 T3 T4 T5 ]. -Arguments upaco6_2_1 [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_2_1 : clear implicits. +Arguments upaco6_2_1 : clear implicits. Hint Unfold upaco6_2_1. Section Arg6_3_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. Variable gf_0 gf_1 gf_2 : rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -152,48 +132,37 @@ Definition upaco6_3_0( r_0 r_1 r_2: rel6 T0 T1 T2 T3 T4 T5) := paco6_3_0 r_0 r_1 Definition upaco6_3_1( r_0 r_1 r_2: rel6 T0 T1 T2 T3 T4 T5) := paco6_3_1 r_0 r_1 r_2 \6/ r_1. Definition upaco6_3_2( r_0 r_1 r_2: rel6 T0 T1 T2 T3 T4 T5) := paco6_3_2 r_0 r_1 r_2 \6/ r_2. End Arg6_3_def. -Arguments paco6_3_0 [ T0 T1 T2 T3 T4 T5 ]. -Arguments upaco6_3_0 [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_3_0 : clear implicits. +Arguments upaco6_3_0 : clear implicits. Hint Unfold upaco6_3_0. -Arguments paco6_3_1 [ T0 T1 T2 T3 T4 T5 ]. -Arguments upaco6_3_1 [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_3_1 : clear implicits. +Arguments upaco6_3_1 : clear implicits. Hint Unfold upaco6_3_1. -Arguments paco6_3_2 [ T0 T1 T2 T3 T4 T5 ]. -Arguments upaco6_3_2 [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_3_2 : clear implicits. +Arguments upaco6_3_2 : clear implicits. Hint Unfold upaco6_3_2. -(* Less than or equal - internal use only *) -Notation "p <_paco_6= q" := - (forall _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 (PR: p _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 : Prop), q _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 : Prop) - (at level 50, no associativity). - (** 1 Mutual Coinduction *) Section Arg6_1. -Definition monotone6 T0 T1 T2 T3 T4 T5 (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) := +Definition monotone6 (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) := forall x0 x1 x2 x3 x4 x5 r r' (IN: gf r x0 x1 x2 x3 x4 x5) (LE: r <6= r'), gf r' x0 x1 x2 x3 x4 x5. -Definition _monotone6 T0 T1 T2 T3 T4 T5 (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) := +Definition _monotone6 (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) := forall r r'(LE: r <6= r'), gf r <6== gf r'. -Lemma monotone6_eq T0 T1 T2 T3 T4 T5 (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) : +Lemma monotone6_eq (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) : monotone6 gf <-> _monotone6 gf. Proof. unfold monotone6, _monotone6, le6. split; eauto. Qed. -Lemma monotone6_map T0 T1 T2 T3 T4 T5 (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) +Lemma monotone6_map (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) (MON: _monotone6 gf) : _monotone (fun R0 => curry6 (gf (uncurry6 R0))). Proof. repeat_intros 3. apply curry_map6. apply MON; apply uncurry_map6; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. Variable gf : rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5. Arguments gf : clear implicits. @@ -274,55 +243,27 @@ Qed. End Arg6_1. -Hint Unfold monotone6. -Hint Resolve paco6_fold. - -Arguments paco6_acc [ T0 T1 T2 T3 T4 T5 ]. -Arguments paco6_mon [ T0 T1 T2 T3 T4 T5 ]. -Arguments paco6_mult_strong [ T0 T1 T2 T3 T4 T5 ]. -Arguments paco6_mult [ T0 T1 T2 T3 T4 T5 ]. -Arguments paco6_fold [ T0 T1 T2 T3 T4 T5 ]. -Arguments paco6_unfold [ T0 T1 T2 T3 T4 T5 ]. - -Global Opaque paco6. -Global Opaque paco6_acc. -Global Opaque paco6_mult. -Global Opaque paco6_fold. -Global Opaque paco6_unfold. - -Instance paco6_inst T0 T1 T2 T3 T4 T5 (gf : rel6 T0 T1 T2 T3 T4 T5->_) r x0 x1 x2 x3 x4 x5 : paco_class (paco6 gf r x0 x1 x2 x3 x4 x5) := -{ pacoacc := paco6_acc gf; - pacomult := paco6_mult gf; - pacofold := paco6_fold gf; - pacounfold := paco6_unfold gf }. - (** 2 Mutual Coinduction *) Section Arg6_2. -Definition monotone6_2 T0 T1 T2 T3 T4 T5 (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) := +Definition monotone6_2 (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) := forall x0 x1 x2 x3 x4 x5 r_0 r_1 r'_0 r'_1 (IN: gf r_0 r_1 x0 x1 x2 x3 x4 x5) (LE_0: r_0 <6= r'_0)(LE_1: r_1 <6= r'_1), gf r'_0 r'_1 x0 x1 x2 x3 x4 x5. -Definition _monotone6_2 T0 T1 T2 T3 T4 T5 (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) := +Definition _monotone6_2 (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) := forall r_0 r_1 r'_0 r'_1(LE_0: r_0 <6= r'_0)(LE_1: r_1 <6= r'_1), gf r_0 r_1 <6== gf r'_0 r'_1. -Lemma monotone6_2_eq T0 T1 T2 T3 T4 T5 (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) : +Lemma monotone6_2_eq (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) : monotone6_2 gf <-> _monotone6_2 gf. Proof. unfold monotone6_2, _monotone6_2, le6. split; eauto. Qed. -Lemma monotone6_2_map T0 T1 T2 T3 T4 T5 (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) +Lemma monotone6_2_map (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) (MON: _monotone6_2 gf) : _monotone_2 (fun R0 R1 => curry6 (gf (uncurry6 R0) (uncurry6 R1))). Proof. repeat_intros 6. apply curry_map6. apply MON; apply uncurry_map6; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. Variable gf_0 gf_1 : rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -479,74 +420,27 @@ Qed. End Arg6_2. -Hint Unfold monotone6_2. -Hint Resolve paco6_2_0_fold. -Hint Resolve paco6_2_1_fold. - -Arguments paco6_2_0_acc [ T0 T1 T2 T3 T4 T5 ]. -Arguments paco6_2_1_acc [ T0 T1 T2 T3 T4 T5 ]. -Arguments paco6_2_0_mon [ T0 T1 T2 T3 T4 T5 ]. -Arguments paco6_2_1_mon [ T0 T1 T2 T3 T4 T5 ]. -Arguments paco6_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 ]. -Arguments paco6_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 ]. -Arguments paco6_2_0_mult [ T0 T1 T2 T3 T4 T5 ]. -Arguments paco6_2_1_mult [ T0 T1 T2 T3 T4 T5 ]. -Arguments paco6_2_0_fold [ T0 T1 T2 T3 T4 T5 ]. -Arguments paco6_2_1_fold [ T0 T1 T2 T3 T4 T5 ]. -Arguments paco6_2_0_unfold [ T0 T1 T2 T3 T4 T5 ]. -Arguments paco6_2_1_unfold [ T0 T1 T2 T3 T4 T5 ]. - -Global Opaque paco6_2_0. -Global Opaque paco6_2_0_acc. -Global Opaque paco6_2_0_mult. -Global Opaque paco6_2_0_fold. -Global Opaque paco6_2_0_unfold. - -Global Opaque paco6_2_1. -Global Opaque paco6_2_1_acc. -Global Opaque paco6_2_1_mult. -Global Opaque paco6_2_1_fold. -Global Opaque paco6_2_1_unfold. - -Instance paco6_2_0_inst T0 T1 T2 T3 T4 T5 (gf_0 gf_1 : rel6 T0 T1 T2 T3 T4 T5->_) r_0 r_1 x0 x1 x2 x3 x4 x5 : paco_class (paco6_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5) := -{ pacoacc := paco6_2_0_acc gf_0 gf_1; - pacomult := paco6_2_0_mult gf_0 gf_1; - pacofold := paco6_2_0_fold gf_0 gf_1; - pacounfold := paco6_2_0_unfold gf_0 gf_1 }. - -Instance paco6_2_1_inst T0 T1 T2 T3 T4 T5 (gf_0 gf_1 : rel6 T0 T1 T2 T3 T4 T5->_) r_0 r_1 x0 x1 x2 x3 x4 x5 : paco_class (paco6_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5) := -{ pacoacc := paco6_2_1_acc gf_0 gf_1; - pacomult := paco6_2_1_mult gf_0 gf_1; - pacofold := paco6_2_1_fold gf_0 gf_1; - pacounfold := paco6_2_1_unfold gf_0 gf_1 }. - (** 3 Mutual Coinduction *) Section Arg6_3. -Definition monotone6_3 T0 T1 T2 T3 T4 T5 (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) := +Definition monotone6_3 (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) := forall x0 x1 x2 x3 x4 x5 r_0 r_1 r_2 r'_0 r'_1 r'_2 (IN: gf r_0 r_1 r_2 x0 x1 x2 x3 x4 x5) (LE_0: r_0 <6= r'_0)(LE_1: r_1 <6= r'_1)(LE_2: r_2 <6= r'_2), gf r'_0 r'_1 r'_2 x0 x1 x2 x3 x4 x5. -Definition _monotone6_3 T0 T1 T2 T3 T4 T5 (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) := +Definition _monotone6_3 (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) := forall r_0 r_1 r_2 r'_0 r'_1 r'_2(LE_0: r_0 <6= r'_0)(LE_1: r_1 <6= r'_1)(LE_2: r_2 <6= r'_2), gf r_0 r_1 r_2 <6== gf r'_0 r'_1 r'_2. -Lemma monotone6_3_eq T0 T1 T2 T3 T4 T5 (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) : +Lemma monotone6_3_eq (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) : monotone6_3 gf <-> _monotone6_3 gf. Proof. unfold monotone6_3, _monotone6_3, le6. split; eauto. Qed. -Lemma monotone6_3_map T0 T1 T2 T3 T4 T5 (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) +Lemma monotone6_3_map (gf: rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5) (MON: _monotone6_3 gf) : _monotone_3 (fun R0 R1 R2 => curry6 (gf (uncurry6 R0) (uncurry6 R1) (uncurry6 R2))). Proof. repeat_intros 9. apply curry_map6. apply MON; apply uncurry_map6; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. Variable gf_0 gf_1 gf_2 : rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5 -> rel6 T0 T1 T2 T3 T4 T5. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -779,10 +673,72 @@ Qed. End Arg6_3. -Hint Unfold monotone6_3. +End PACO6. + +Global Opaque paco6. + +Hint Unfold upaco6. +Hint Resolve paco6_fold. +Hint Unfold monotone6. + +Arguments paco6_acc [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_mon [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_mult_strong [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_mult [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_fold [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_unfold [ T0 T1 T2 T3 T4 T5 ]. + +Instance paco6_inst T0 T1 T2 T3 T4 T5 (gf : rel6 T0 T1 T2 T3 T4 T5->_) r x0 x1 x2 x3 x4 x5 : paco_class (paco6 gf r x0 x1 x2 x3 x4 x5) := +{ pacoacc := paco6_acc gf; + pacomult := paco6_mult gf; + pacofold := paco6_fold gf; + pacounfold := paco6_unfold gf }. + +Global Opaque paco6_2_0. +Global Opaque paco6_2_1. + +Hint Unfold upaco6_2_0. +Hint Unfold upaco6_2_1. +Hint Resolve paco6_2_0_fold. +Hint Resolve paco6_2_1_fold. +Hint Unfold monotone6_2. + +Arguments paco6_2_0_acc [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_2_1_acc [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_2_0_mon [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_2_1_mon [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_2_0_mult [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_2_1_mult [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_2_0_fold [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_2_1_fold [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_2_0_unfold [ T0 T1 T2 T3 T4 T5 ]. +Arguments paco6_2_1_unfold [ T0 T1 T2 T3 T4 T5 ]. + +Instance paco6_2_0_inst T0 T1 T2 T3 T4 T5 (gf_0 gf_1 : rel6 T0 T1 T2 T3 T4 T5->_) r_0 r_1 x0 x1 x2 x3 x4 x5 : paco_class (paco6_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5) := +{ pacoacc := paco6_2_0_acc gf_0 gf_1; + pacomult := paco6_2_0_mult gf_0 gf_1; + pacofold := paco6_2_0_fold gf_0 gf_1; + pacounfold := paco6_2_0_unfold gf_0 gf_1 }. + +Instance paco6_2_1_inst T0 T1 T2 T3 T4 T5 (gf_0 gf_1 : rel6 T0 T1 T2 T3 T4 T5->_) r_0 r_1 x0 x1 x2 x3 x4 x5 : paco_class (paco6_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5) := +{ pacoacc := paco6_2_1_acc gf_0 gf_1; + pacomult := paco6_2_1_mult gf_0 gf_1; + pacofold := paco6_2_1_fold gf_0 gf_1; + pacounfold := paco6_2_1_unfold gf_0 gf_1 }. + +Global Opaque paco6_3_0. +Global Opaque paco6_3_1. +Global Opaque paco6_3_2. + +Hint Unfold upaco6_3_0. +Hint Unfold upaco6_3_1. +Hint Unfold upaco6_3_2. Hint Resolve paco6_3_0_fold. Hint Resolve paco6_3_1_fold. Hint Resolve paco6_3_2_fold. +Hint Unfold monotone6_3. Arguments paco6_3_0_acc [ T0 T1 T2 T3 T4 T5 ]. Arguments paco6_3_1_acc [ T0 T1 T2 T3 T4 T5 ]. @@ -803,24 +759,6 @@ Arguments paco6_3_0_unfold [ T0 T1 T2 T3 T4 T5 ]. Arguments paco6_3_1_unfold [ T0 T1 T2 T3 T4 T5 ]. Arguments paco6_3_2_unfold [ T0 T1 T2 T3 T4 T5 ]. -Global Opaque paco6_3_0. -Global Opaque paco6_3_0_acc. -Global Opaque paco6_3_0_mult. -Global Opaque paco6_3_0_fold. -Global Opaque paco6_3_0_unfold. - -Global Opaque paco6_3_1. -Global Opaque paco6_3_1_acc. -Global Opaque paco6_3_1_mult. -Global Opaque paco6_3_1_fold. -Global Opaque paco6_3_1_unfold. - -Global Opaque paco6_3_2. -Global Opaque paco6_3_2_acc. -Global Opaque paco6_3_2_mult. -Global Opaque paco6_3_2_fold. -Global Opaque paco6_3_2_unfold. - Instance paco6_3_0_inst T0 T1 T2 T3 T4 T5 (gf_0 gf_1 gf_2 : rel6 T0 T1 T2 T3 T4 T5->_) r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 : paco_class (paco6_3_0 gf_0 gf_1 gf_2 r_0 r_1 r_2 x0 x1 x2 x3 x4 x5) := { pacoacc := paco6_3_0_acc gf_0 gf_1 gf_2; pacomult := paco6_3_0_mult gf_0 gf_1 gf_2; diff --git a/src/paco7.v b/src/paco7.v index 4fe30ea..4f8d140 100644 --- a/src/paco7.v +++ b/src/paco7.v @@ -2,7 +2,7 @@ Require Export paconotation pacotacuser. Require Import paconotation_internal pacotac pacon. Set Implicit Arguments. -Section SIGT. +Section PACO7. Variable T0 : Type. Variable T1 : forall (x0: @T0), Type. @@ -78,19 +78,10 @@ Proof. apply curry_map_rev7. eapply le1_trans; [|eauto]. apply uncurry_bij1_7. Qed. -End SIGT. - (** ** Predicates of Arity 7 *) Section Arg7_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. Variable gf : rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6. Arguments gf : clear implicits. @@ -99,18 +90,11 @@ Definition paco7( r: rel7 T0 T1 T2 T3 T4 T5 T6) : rel7 T0 T1 T2 T3 T4 T5 T6 := Definition upaco7( r: rel7 T0 T1 T2 T3 T4 T5 T6) := paco7 r \7/ r. End Arg7_def. -Arguments paco7 [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments upaco7 [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7 : clear implicits. +Arguments upaco7 : clear implicits. Hint Unfold upaco7. Section Arg7_2_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. Variable gf_0 gf_1 : rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -124,21 +108,14 @@ Definition paco7_2_1( r_0 r_1: rel7 T0 T1 T2 T3 T4 T5 T6) : rel7 T0 T1 T2 T3 T4 Definition upaco7_2_0( r_0 r_1: rel7 T0 T1 T2 T3 T4 T5 T6) := paco7_2_0 r_0 r_1 \7/ r_0. Definition upaco7_2_1( r_0 r_1: rel7 T0 T1 T2 T3 T4 T5 T6) := paco7_2_1 r_0 r_1 \7/ r_1. End Arg7_2_def. -Arguments paco7_2_0 [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments upaco7_2_0 [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_2_0 : clear implicits. +Arguments upaco7_2_0 : clear implicits. Hint Unfold upaco7_2_0. -Arguments paco7_2_1 [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments upaco7_2_1 [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_2_1 : clear implicits. +Arguments upaco7_2_1 : clear implicits. Hint Unfold upaco7_2_1. Section Arg7_3_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. Variable gf_0 gf_1 gf_2 : rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -157,49 +134,37 @@ Definition upaco7_3_0( r_0 r_1 r_2: rel7 T0 T1 T2 T3 T4 T5 T6) := paco7_3_0 r_0 Definition upaco7_3_1( r_0 r_1 r_2: rel7 T0 T1 T2 T3 T4 T5 T6) := paco7_3_1 r_0 r_1 r_2 \7/ r_1. Definition upaco7_3_2( r_0 r_1 r_2: rel7 T0 T1 T2 T3 T4 T5 T6) := paco7_3_2 r_0 r_1 r_2 \7/ r_2. End Arg7_3_def. -Arguments paco7_3_0 [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments upaco7_3_0 [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_3_0 : clear implicits. +Arguments upaco7_3_0 : clear implicits. Hint Unfold upaco7_3_0. -Arguments paco7_3_1 [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments upaco7_3_1 [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_3_1 : clear implicits. +Arguments upaco7_3_1 : clear implicits. Hint Unfold upaco7_3_1. -Arguments paco7_3_2 [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments upaco7_3_2 [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_3_2 : clear implicits. +Arguments upaco7_3_2 : clear implicits. Hint Unfold upaco7_3_2. -(* Less than or equal - internal use only *) -Notation "p <_paco_7= q" := - (forall _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 (PR: p _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 : Prop), q _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 : Prop) - (at level 50, no associativity). - (** 1 Mutual Coinduction *) Section Arg7_1. -Definition monotone7 T0 T1 T2 T3 T4 T5 T6 (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) := +Definition monotone7 (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) := forall x0 x1 x2 x3 x4 x5 x6 r r' (IN: gf r x0 x1 x2 x3 x4 x5 x6) (LE: r <7= r'), gf r' x0 x1 x2 x3 x4 x5 x6. -Definition _monotone7 T0 T1 T2 T3 T4 T5 T6 (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) := +Definition _monotone7 (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) := forall r r'(LE: r <7= r'), gf r <7== gf r'. -Lemma monotone7_eq T0 T1 T2 T3 T4 T5 T6 (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) : +Lemma monotone7_eq (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) : monotone7 gf <-> _monotone7 gf. Proof. unfold monotone7, _monotone7, le7. split; eauto. Qed. -Lemma monotone7_map T0 T1 T2 T3 T4 T5 T6 (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) +Lemma monotone7_map (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) (MON: _monotone7 gf) : _monotone (fun R0 => curry7 (gf (uncurry7 R0))). Proof. repeat_intros 3. apply curry_map7. apply MON; apply uncurry_map7; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. Variable gf : rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6. Arguments gf : clear implicits. @@ -280,56 +245,27 @@ Qed. End Arg7_1. -Hint Unfold monotone7. -Hint Resolve paco7_fold. - -Arguments paco7_acc [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments paco7_mon [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments paco7_mult_strong [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments paco7_mult [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments paco7_fold [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments paco7_unfold [ T0 T1 T2 T3 T4 T5 T6 ]. - -Global Opaque paco7. -Global Opaque paco7_acc. -Global Opaque paco7_mult. -Global Opaque paco7_fold. -Global Opaque paco7_unfold. - -Instance paco7_inst T0 T1 T2 T3 T4 T5 T6 (gf : rel7 T0 T1 T2 T3 T4 T5 T6->_) r x0 x1 x2 x3 x4 x5 x6 : paco_class (paco7 gf r x0 x1 x2 x3 x4 x5 x6) := -{ pacoacc := paco7_acc gf; - pacomult := paco7_mult gf; - pacofold := paco7_fold gf; - pacounfold := paco7_unfold gf }. - (** 2 Mutual Coinduction *) Section Arg7_2. -Definition monotone7_2 T0 T1 T2 T3 T4 T5 T6 (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) := +Definition monotone7_2 (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) := forall x0 x1 x2 x3 x4 x5 x6 r_0 r_1 r'_0 r'_1 (IN: gf r_0 r_1 x0 x1 x2 x3 x4 x5 x6) (LE_0: r_0 <7= r'_0)(LE_1: r_1 <7= r'_1), gf r'_0 r'_1 x0 x1 x2 x3 x4 x5 x6. -Definition _monotone7_2 T0 T1 T2 T3 T4 T5 T6 (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) := +Definition _monotone7_2 (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) := forall r_0 r_1 r'_0 r'_1(LE_0: r_0 <7= r'_0)(LE_1: r_1 <7= r'_1), gf r_0 r_1 <7== gf r'_0 r'_1. -Lemma monotone7_2_eq T0 T1 T2 T3 T4 T5 T6 (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) : +Lemma monotone7_2_eq (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) : monotone7_2 gf <-> _monotone7_2 gf. Proof. unfold monotone7_2, _monotone7_2, le7. split; eauto. Qed. -Lemma monotone7_2_map T0 T1 T2 T3 T4 T5 T6 (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) +Lemma monotone7_2_map (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) (MON: _monotone7_2 gf) : _monotone_2 (fun R0 R1 => curry7 (gf (uncurry7 R0) (uncurry7 R1))). Proof. repeat_intros 6. apply curry_map7. apply MON; apply uncurry_map7; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. Variable gf_0 gf_1 : rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -486,75 +422,27 @@ Qed. End Arg7_2. -Hint Unfold monotone7_2. -Hint Resolve paco7_2_0_fold. -Hint Resolve paco7_2_1_fold. - -Arguments paco7_2_0_acc [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments paco7_2_1_acc [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments paco7_2_0_mon [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments paco7_2_1_mon [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments paco7_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments paco7_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments paco7_2_0_mult [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments paco7_2_1_mult [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments paco7_2_0_fold [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments paco7_2_1_fold [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments paco7_2_0_unfold [ T0 T1 T2 T3 T4 T5 T6 ]. -Arguments paco7_2_1_unfold [ T0 T1 T2 T3 T4 T5 T6 ]. - -Global Opaque paco7_2_0. -Global Opaque paco7_2_0_acc. -Global Opaque paco7_2_0_mult. -Global Opaque paco7_2_0_fold. -Global Opaque paco7_2_0_unfold. - -Global Opaque paco7_2_1. -Global Opaque paco7_2_1_acc. -Global Opaque paco7_2_1_mult. -Global Opaque paco7_2_1_fold. -Global Opaque paco7_2_1_unfold. - -Instance paco7_2_0_inst T0 T1 T2 T3 T4 T5 T6 (gf_0 gf_1 : rel7 T0 T1 T2 T3 T4 T5 T6->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 : paco_class (paco7_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6) := -{ pacoacc := paco7_2_0_acc gf_0 gf_1; - pacomult := paco7_2_0_mult gf_0 gf_1; - pacofold := paco7_2_0_fold gf_0 gf_1; - pacounfold := paco7_2_0_unfold gf_0 gf_1 }. - -Instance paco7_2_1_inst T0 T1 T2 T3 T4 T5 T6 (gf_0 gf_1 : rel7 T0 T1 T2 T3 T4 T5 T6->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 : paco_class (paco7_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6) := -{ pacoacc := paco7_2_1_acc gf_0 gf_1; - pacomult := paco7_2_1_mult gf_0 gf_1; - pacofold := paco7_2_1_fold gf_0 gf_1; - pacounfold := paco7_2_1_unfold gf_0 gf_1 }. - (** 3 Mutual Coinduction *) Section Arg7_3. -Definition monotone7_3 T0 T1 T2 T3 T4 T5 T6 (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) := +Definition monotone7_3 (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) := forall x0 x1 x2 x3 x4 x5 x6 r_0 r_1 r_2 r'_0 r'_1 r'_2 (IN: gf r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6) (LE_0: r_0 <7= r'_0)(LE_1: r_1 <7= r'_1)(LE_2: r_2 <7= r'_2), gf r'_0 r'_1 r'_2 x0 x1 x2 x3 x4 x5 x6. -Definition _monotone7_3 T0 T1 T2 T3 T4 T5 T6 (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) := +Definition _monotone7_3 (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) := forall r_0 r_1 r_2 r'_0 r'_1 r'_2(LE_0: r_0 <7= r'_0)(LE_1: r_1 <7= r'_1)(LE_2: r_2 <7= r'_2), gf r_0 r_1 r_2 <7== gf r'_0 r'_1 r'_2. -Lemma monotone7_3_eq T0 T1 T2 T3 T4 T5 T6 (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) : +Lemma monotone7_3_eq (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) : monotone7_3 gf <-> _monotone7_3 gf. Proof. unfold monotone7_3, _monotone7_3, le7. split; eauto. Qed. -Lemma monotone7_3_map T0 T1 T2 T3 T4 T5 T6 (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) +Lemma monotone7_3_map (gf: rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6) (MON: _monotone7_3 gf) : _monotone_3 (fun R0 R1 R2 => curry7 (gf (uncurry7 R0) (uncurry7 R1) (uncurry7 R2))). Proof. repeat_intros 9. apply curry_map7. apply MON; apply uncurry_map7; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. Variable gf_0 gf_1 gf_2 : rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6 -> rel7 T0 T1 T2 T3 T4 T5 T6. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -787,10 +675,72 @@ Qed. End Arg7_3. -Hint Unfold monotone7_3. +End PACO7. + +Global Opaque paco7. + +Hint Unfold upaco7. +Hint Resolve paco7_fold. +Hint Unfold monotone7. + +Arguments paco7_acc [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_mon [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_mult_strong [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_mult [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_fold [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_unfold [ T0 T1 T2 T3 T4 T5 T6 ]. + +Instance paco7_inst T0 T1 T2 T3 T4 T5 T6 (gf : rel7 T0 T1 T2 T3 T4 T5 T6->_) r x0 x1 x2 x3 x4 x5 x6 : paco_class (paco7 gf r x0 x1 x2 x3 x4 x5 x6) := +{ pacoacc := paco7_acc gf; + pacomult := paco7_mult gf; + pacofold := paco7_fold gf; + pacounfold := paco7_unfold gf }. + +Global Opaque paco7_2_0. +Global Opaque paco7_2_1. + +Hint Unfold upaco7_2_0. +Hint Unfold upaco7_2_1. +Hint Resolve paco7_2_0_fold. +Hint Resolve paco7_2_1_fold. +Hint Unfold monotone7_2. + +Arguments paco7_2_0_acc [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_2_1_acc [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_2_0_mon [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_2_1_mon [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_2_0_mult [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_2_1_mult [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_2_0_fold [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_2_1_fold [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_2_0_unfold [ T0 T1 T2 T3 T4 T5 T6 ]. +Arguments paco7_2_1_unfold [ T0 T1 T2 T3 T4 T5 T6 ]. + +Instance paco7_2_0_inst T0 T1 T2 T3 T4 T5 T6 (gf_0 gf_1 : rel7 T0 T1 T2 T3 T4 T5 T6->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 : paco_class (paco7_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6) := +{ pacoacc := paco7_2_0_acc gf_0 gf_1; + pacomult := paco7_2_0_mult gf_0 gf_1; + pacofold := paco7_2_0_fold gf_0 gf_1; + pacounfold := paco7_2_0_unfold gf_0 gf_1 }. + +Instance paco7_2_1_inst T0 T1 T2 T3 T4 T5 T6 (gf_0 gf_1 : rel7 T0 T1 T2 T3 T4 T5 T6->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 : paco_class (paco7_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6) := +{ pacoacc := paco7_2_1_acc gf_0 gf_1; + pacomult := paco7_2_1_mult gf_0 gf_1; + pacofold := paco7_2_1_fold gf_0 gf_1; + pacounfold := paco7_2_1_unfold gf_0 gf_1 }. + +Global Opaque paco7_3_0. +Global Opaque paco7_3_1. +Global Opaque paco7_3_2. + +Hint Unfold upaco7_3_0. +Hint Unfold upaco7_3_1. +Hint Unfold upaco7_3_2. Hint Resolve paco7_3_0_fold. Hint Resolve paco7_3_1_fold. Hint Resolve paco7_3_2_fold. +Hint Unfold monotone7_3. Arguments paco7_3_0_acc [ T0 T1 T2 T3 T4 T5 T6 ]. Arguments paco7_3_1_acc [ T0 T1 T2 T3 T4 T5 T6 ]. @@ -811,24 +761,6 @@ Arguments paco7_3_0_unfold [ T0 T1 T2 T3 T4 T5 T6 ]. Arguments paco7_3_1_unfold [ T0 T1 T2 T3 T4 T5 T6 ]. Arguments paco7_3_2_unfold [ T0 T1 T2 T3 T4 T5 T6 ]. -Global Opaque paco7_3_0. -Global Opaque paco7_3_0_acc. -Global Opaque paco7_3_0_mult. -Global Opaque paco7_3_0_fold. -Global Opaque paco7_3_0_unfold. - -Global Opaque paco7_3_1. -Global Opaque paco7_3_1_acc. -Global Opaque paco7_3_1_mult. -Global Opaque paco7_3_1_fold. -Global Opaque paco7_3_1_unfold. - -Global Opaque paco7_3_2. -Global Opaque paco7_3_2_acc. -Global Opaque paco7_3_2_mult. -Global Opaque paco7_3_2_fold. -Global Opaque paco7_3_2_unfold. - Instance paco7_3_0_inst T0 T1 T2 T3 T4 T5 T6 (gf_0 gf_1 gf_2 : rel7 T0 T1 T2 T3 T4 T5 T6->_) r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 : paco_class (paco7_3_0 gf_0 gf_1 gf_2 r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6) := { pacoacc := paco7_3_0_acc gf_0 gf_1 gf_2; pacomult := paco7_3_0_mult gf_0 gf_1 gf_2; diff --git a/src/paco8.v b/src/paco8.v index d9564e7..da21969 100644 --- a/src/paco8.v +++ b/src/paco8.v @@ -2,7 +2,7 @@ Require Export paconotation pacotacuser. Require Import paconotation_internal pacotac pacon. Set Implicit Arguments. -Section SIGT. +Section PACO8. Variable T0 : Type. Variable T1 : forall (x0: @T0), Type. @@ -80,20 +80,10 @@ Proof. apply curry_map_rev8. eapply le1_trans; [|eauto]. apply uncurry_bij1_8. Qed. -End SIGT. - (** ** Predicates of Arity 8 *) Section Arg8_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. Variable gf : rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7. Arguments gf : clear implicits. @@ -102,19 +92,11 @@ Definition paco8( r: rel8 T0 T1 T2 T3 T4 T5 T6 T7) : rel8 T0 T1 T2 T3 T4 T5 T6 T Definition upaco8( r: rel8 T0 T1 T2 T3 T4 T5 T6 T7) := paco8 r \8/ r. End Arg8_def. -Arguments paco8 [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments upaco8 [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8 : clear implicits. +Arguments upaco8 : clear implicits. Hint Unfold upaco8. Section Arg8_2_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. Variable gf_0 gf_1 : rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -128,22 +110,14 @@ Definition paco8_2_1( r_0 r_1: rel8 T0 T1 T2 T3 T4 T5 T6 T7) : rel8 T0 T1 T2 T3 Definition upaco8_2_0( r_0 r_1: rel8 T0 T1 T2 T3 T4 T5 T6 T7) := paco8_2_0 r_0 r_1 \8/ r_0. Definition upaco8_2_1( r_0 r_1: rel8 T0 T1 T2 T3 T4 T5 T6 T7) := paco8_2_1 r_0 r_1 \8/ r_1. End Arg8_2_def. -Arguments paco8_2_0 [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments upaco8_2_0 [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_2_0 : clear implicits. +Arguments upaco8_2_0 : clear implicits. Hint Unfold upaco8_2_0. -Arguments paco8_2_1 [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments upaco8_2_1 [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_2_1 : clear implicits. +Arguments upaco8_2_1 : clear implicits. Hint Unfold upaco8_2_1. Section Arg8_3_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. Variable gf_0 gf_1 gf_2 : rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -162,50 +136,37 @@ Definition upaco8_3_0( r_0 r_1 r_2: rel8 T0 T1 T2 T3 T4 T5 T6 T7) := paco8_3_0 r Definition upaco8_3_1( r_0 r_1 r_2: rel8 T0 T1 T2 T3 T4 T5 T6 T7) := paco8_3_1 r_0 r_1 r_2 \8/ r_1. Definition upaco8_3_2( r_0 r_1 r_2: rel8 T0 T1 T2 T3 T4 T5 T6 T7) := paco8_3_2 r_0 r_1 r_2 \8/ r_2. End Arg8_3_def. -Arguments paco8_3_0 [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments upaco8_3_0 [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_3_0 : clear implicits. +Arguments upaco8_3_0 : clear implicits. Hint Unfold upaco8_3_0. -Arguments paco8_3_1 [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments upaco8_3_1 [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_3_1 : clear implicits. +Arguments upaco8_3_1 : clear implicits. Hint Unfold upaco8_3_1. -Arguments paco8_3_2 [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments upaco8_3_2 [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_3_2 : clear implicits. +Arguments upaco8_3_2 : clear implicits. Hint Unfold upaco8_3_2. -(* Less than or equal - internal use only *) -Notation "p <_paco_8= q" := - (forall _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 (PR: p _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 : Prop), q _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 : Prop) - (at level 50, no associativity). - (** 1 Mutual Coinduction *) Section Arg8_1. -Definition monotone8 T0 T1 T2 T3 T4 T5 T6 T7 (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) := +Definition monotone8 (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) := forall x0 x1 x2 x3 x4 x5 x6 x7 r r' (IN: gf r x0 x1 x2 x3 x4 x5 x6 x7) (LE: r <8= r'), gf r' x0 x1 x2 x3 x4 x5 x6 x7. -Definition _monotone8 T0 T1 T2 T3 T4 T5 T6 T7 (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) := +Definition _monotone8 (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) := forall r r'(LE: r <8= r'), gf r <8== gf r'. -Lemma monotone8_eq T0 T1 T2 T3 T4 T5 T6 T7 (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) : +Lemma monotone8_eq (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) : monotone8 gf <-> _monotone8 gf. Proof. unfold monotone8, _monotone8, le8. split; eauto. Qed. -Lemma monotone8_map T0 T1 T2 T3 T4 T5 T6 T7 (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) +Lemma monotone8_map (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) (MON: _monotone8 gf) : _monotone (fun R0 => curry8 (gf (uncurry8 R0))). Proof. repeat_intros 3. apply curry_map8. apply MON; apply uncurry_map8; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. Variable gf : rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7. Arguments gf : clear implicits. @@ -286,57 +247,27 @@ Qed. End Arg8_1. -Hint Unfold monotone8. -Hint Resolve paco8_fold. - -Arguments paco8_acc [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments paco8_mon [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments paco8_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments paco8_mult [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments paco8_fold [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments paco8_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 ]. - -Global Opaque paco8. -Global Opaque paco8_acc. -Global Opaque paco8_mult. -Global Opaque paco8_fold. -Global Opaque paco8_unfold. - -Instance paco8_inst T0 T1 T2 T3 T4 T5 T6 T7 (gf : rel8 T0 T1 T2 T3 T4 T5 T6 T7->_) r x0 x1 x2 x3 x4 x5 x6 x7 : paco_class (paco8 gf r x0 x1 x2 x3 x4 x5 x6 x7) := -{ pacoacc := paco8_acc gf; - pacomult := paco8_mult gf; - pacofold := paco8_fold gf; - pacounfold := paco8_unfold gf }. - (** 2 Mutual Coinduction *) Section Arg8_2. -Definition monotone8_2 T0 T1 T2 T3 T4 T5 T6 T7 (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) := +Definition monotone8_2 (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) := forall x0 x1 x2 x3 x4 x5 x6 x7 r_0 r_1 r'_0 r'_1 (IN: gf r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7) (LE_0: r_0 <8= r'_0)(LE_1: r_1 <8= r'_1), gf r'_0 r'_1 x0 x1 x2 x3 x4 x5 x6 x7. -Definition _monotone8_2 T0 T1 T2 T3 T4 T5 T6 T7 (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) := +Definition _monotone8_2 (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) := forall r_0 r_1 r'_0 r'_1(LE_0: r_0 <8= r'_0)(LE_1: r_1 <8= r'_1), gf r_0 r_1 <8== gf r'_0 r'_1. -Lemma monotone8_2_eq T0 T1 T2 T3 T4 T5 T6 T7 (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) : +Lemma monotone8_2_eq (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) : monotone8_2 gf <-> _monotone8_2 gf. Proof. unfold monotone8_2, _monotone8_2, le8. split; eauto. Qed. -Lemma monotone8_2_map T0 T1 T2 T3 T4 T5 T6 T7 (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) +Lemma monotone8_2_map (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) (MON: _monotone8_2 gf) : _monotone_2 (fun R0 R1 => curry8 (gf (uncurry8 R0) (uncurry8 R1))). Proof. repeat_intros 6. apply curry_map8. apply MON; apply uncurry_map8; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. Variable gf_0 gf_1 : rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -493,76 +424,27 @@ Qed. End Arg8_2. -Hint Unfold monotone8_2. -Hint Resolve paco8_2_0_fold. -Hint Resolve paco8_2_1_fold. - -Arguments paco8_2_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments paco8_2_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments paco8_2_0_mon [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments paco8_2_1_mon [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments paco8_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments paco8_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments paco8_2_0_mult [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments paco8_2_1_mult [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments paco8_2_0_fold [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments paco8_2_1_fold [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments paco8_2_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Arguments paco8_2_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 ]. - -Global Opaque paco8_2_0. -Global Opaque paco8_2_0_acc. -Global Opaque paco8_2_0_mult. -Global Opaque paco8_2_0_fold. -Global Opaque paco8_2_0_unfold. - -Global Opaque paco8_2_1. -Global Opaque paco8_2_1_acc. -Global Opaque paco8_2_1_mult. -Global Opaque paco8_2_1_fold. -Global Opaque paco8_2_1_unfold. - -Instance paco8_2_0_inst T0 T1 T2 T3 T4 T5 T6 T7 (gf_0 gf_1 : rel8 T0 T1 T2 T3 T4 T5 T6 T7->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 : paco_class (paco8_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7) := -{ pacoacc := paco8_2_0_acc gf_0 gf_1; - pacomult := paco8_2_0_mult gf_0 gf_1; - pacofold := paco8_2_0_fold gf_0 gf_1; - pacounfold := paco8_2_0_unfold gf_0 gf_1 }. - -Instance paco8_2_1_inst T0 T1 T2 T3 T4 T5 T6 T7 (gf_0 gf_1 : rel8 T0 T1 T2 T3 T4 T5 T6 T7->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 : paco_class (paco8_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7) := -{ pacoacc := paco8_2_1_acc gf_0 gf_1; - pacomult := paco8_2_1_mult gf_0 gf_1; - pacofold := paco8_2_1_fold gf_0 gf_1; - pacounfold := paco8_2_1_unfold gf_0 gf_1 }. - (** 3 Mutual Coinduction *) Section Arg8_3. -Definition monotone8_3 T0 T1 T2 T3 T4 T5 T6 T7 (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) := +Definition monotone8_3 (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) := forall x0 x1 x2 x3 x4 x5 x6 x7 r_0 r_1 r_2 r'_0 r'_1 r'_2 (IN: gf r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7) (LE_0: r_0 <8= r'_0)(LE_1: r_1 <8= r'_1)(LE_2: r_2 <8= r'_2), gf r'_0 r'_1 r'_2 x0 x1 x2 x3 x4 x5 x6 x7. -Definition _monotone8_3 T0 T1 T2 T3 T4 T5 T6 T7 (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) := +Definition _monotone8_3 (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) := forall r_0 r_1 r_2 r'_0 r'_1 r'_2(LE_0: r_0 <8= r'_0)(LE_1: r_1 <8= r'_1)(LE_2: r_2 <8= r'_2), gf r_0 r_1 r_2 <8== gf r'_0 r'_1 r'_2. -Lemma monotone8_3_eq T0 T1 T2 T3 T4 T5 T6 T7 (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) : +Lemma monotone8_3_eq (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) : monotone8_3 gf <-> _monotone8_3 gf. Proof. unfold monotone8_3, _monotone8_3, le8. split; eauto. Qed. -Lemma monotone8_3_map T0 T1 T2 T3 T4 T5 T6 T7 (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) +Lemma monotone8_3_map (gf: rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7) (MON: _monotone8_3 gf) : _monotone_3 (fun R0 R1 R2 => curry8 (gf (uncurry8 R0) (uncurry8 R1) (uncurry8 R2))). Proof. repeat_intros 9. apply curry_map8. apply MON; apply uncurry_map8; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. Variable gf_0 gf_1 gf_2 : rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7 -> rel8 T0 T1 T2 T3 T4 T5 T6 T7. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -795,10 +677,72 @@ Qed. End Arg8_3. -Hint Unfold monotone8_3. +End PACO8. + +Global Opaque paco8. + +Hint Unfold upaco8. +Hint Resolve paco8_fold. +Hint Unfold monotone8. + +Arguments paco8_acc [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_mon [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_mult [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_fold [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 ]. + +Instance paco8_inst T0 T1 T2 T3 T4 T5 T6 T7 (gf : rel8 T0 T1 T2 T3 T4 T5 T6 T7->_) r x0 x1 x2 x3 x4 x5 x6 x7 : paco_class (paco8 gf r x0 x1 x2 x3 x4 x5 x6 x7) := +{ pacoacc := paco8_acc gf; + pacomult := paco8_mult gf; + pacofold := paco8_fold gf; + pacounfold := paco8_unfold gf }. + +Global Opaque paco8_2_0. +Global Opaque paco8_2_1. + +Hint Unfold upaco8_2_0. +Hint Unfold upaco8_2_1. +Hint Resolve paco8_2_0_fold. +Hint Resolve paco8_2_1_fold. +Hint Unfold monotone8_2. + +Arguments paco8_2_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_2_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_2_0_mon [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_2_1_mon [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_2_0_mult [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_2_1_mult [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_2_0_fold [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_2_1_fold [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_2_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 ]. +Arguments paco8_2_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 ]. + +Instance paco8_2_0_inst T0 T1 T2 T3 T4 T5 T6 T7 (gf_0 gf_1 : rel8 T0 T1 T2 T3 T4 T5 T6 T7->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 : paco_class (paco8_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7) := +{ pacoacc := paco8_2_0_acc gf_0 gf_1; + pacomult := paco8_2_0_mult gf_0 gf_1; + pacofold := paco8_2_0_fold gf_0 gf_1; + pacounfold := paco8_2_0_unfold gf_0 gf_1 }. + +Instance paco8_2_1_inst T0 T1 T2 T3 T4 T5 T6 T7 (gf_0 gf_1 : rel8 T0 T1 T2 T3 T4 T5 T6 T7->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 : paco_class (paco8_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7) := +{ pacoacc := paco8_2_1_acc gf_0 gf_1; + pacomult := paco8_2_1_mult gf_0 gf_1; + pacofold := paco8_2_1_fold gf_0 gf_1; + pacounfold := paco8_2_1_unfold gf_0 gf_1 }. + +Global Opaque paco8_3_0. +Global Opaque paco8_3_1. +Global Opaque paco8_3_2. + +Hint Unfold upaco8_3_0. +Hint Unfold upaco8_3_1. +Hint Unfold upaco8_3_2. Hint Resolve paco8_3_0_fold. Hint Resolve paco8_3_1_fold. Hint Resolve paco8_3_2_fold. +Hint Unfold monotone8_3. Arguments paco8_3_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 ]. Arguments paco8_3_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 ]. @@ -819,24 +763,6 @@ Arguments paco8_3_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 ]. Arguments paco8_3_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 ]. Arguments paco8_3_2_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 ]. -Global Opaque paco8_3_0. -Global Opaque paco8_3_0_acc. -Global Opaque paco8_3_0_mult. -Global Opaque paco8_3_0_fold. -Global Opaque paco8_3_0_unfold. - -Global Opaque paco8_3_1. -Global Opaque paco8_3_1_acc. -Global Opaque paco8_3_1_mult. -Global Opaque paco8_3_1_fold. -Global Opaque paco8_3_1_unfold. - -Global Opaque paco8_3_2. -Global Opaque paco8_3_2_acc. -Global Opaque paco8_3_2_mult. -Global Opaque paco8_3_2_fold. -Global Opaque paco8_3_2_unfold. - Instance paco8_3_0_inst T0 T1 T2 T3 T4 T5 T6 T7 (gf_0 gf_1 gf_2 : rel8 T0 T1 T2 T3 T4 T5 T6 T7->_) r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 : paco_class (paco8_3_0 gf_0 gf_1 gf_2 r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7) := { pacoacc := paco8_3_0_acc gf_0 gf_1 gf_2; pacomult := paco8_3_0_mult gf_0 gf_1 gf_2; diff --git a/src/paco9.v b/src/paco9.v index 6618692..e743de6 100644 --- a/src/paco9.v +++ b/src/paco9.v @@ -2,7 +2,7 @@ Require Export paconotation pacotacuser. Require Import paconotation_internal pacotac pacon. Set Implicit Arguments. -Section SIGT. +Section PACO9. Variable T0 : Type. Variable T1 : forall (x0: @T0), Type. @@ -82,21 +82,10 @@ Proof. apply curry_map_rev9. eapply le1_trans; [|eauto]. apply uncurry_bij1_9. Qed. -End SIGT. - (** ** Predicates of Arity 9 *) Section Arg9_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. Variable gf : rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8. Arguments gf : clear implicits. @@ -105,20 +94,11 @@ Definition paco9( r: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) : rel9 T0 T1 T2 T3 T4 T5 T Definition upaco9( r: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) := paco9 r \9/ r. End Arg9_def. -Arguments paco9 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments upaco9 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9 : clear implicits. +Arguments upaco9 : clear implicits. Hint Unfold upaco9. Section Arg9_2_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. Variable gf_0 gf_1 : rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -132,23 +112,14 @@ Definition paco9_2_1( r_0 r_1: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) : rel9 T0 T1 T2 Definition upaco9_2_0( r_0 r_1: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) := paco9_2_0 r_0 r_1 \9/ r_0. Definition upaco9_2_1( r_0 r_1: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) := paco9_2_1 r_0 r_1 \9/ r_1. End Arg9_2_def. -Arguments paco9_2_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments upaco9_2_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_2_0 : clear implicits. +Arguments upaco9_2_0 : clear implicits. Hint Unfold upaco9_2_0. -Arguments paco9_2_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments upaco9_2_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_2_1 : clear implicits. +Arguments upaco9_2_1 : clear implicits. Hint Unfold upaco9_2_1. Section Arg9_3_def. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. Variable gf_0 gf_1 gf_2 : rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -167,51 +138,37 @@ Definition upaco9_3_0( r_0 r_1 r_2: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) := paco9_3_ Definition upaco9_3_1( r_0 r_1 r_2: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) := paco9_3_1 r_0 r_1 r_2 \9/ r_1. Definition upaco9_3_2( r_0 r_1 r_2: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) := paco9_3_2 r_0 r_1 r_2 \9/ r_2. End Arg9_3_def. -Arguments paco9_3_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments upaco9_3_0 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_3_0 : clear implicits. +Arguments upaco9_3_0 : clear implicits. Hint Unfold upaco9_3_0. -Arguments paco9_3_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments upaco9_3_1 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_3_1 : clear implicits. +Arguments upaco9_3_1 : clear implicits. Hint Unfold upaco9_3_1. -Arguments paco9_3_2 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments upaco9_3_2 [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_3_2 : clear implicits. +Arguments upaco9_3_2 : clear implicits. Hint Unfold upaco9_3_2. -(* Less than or equal - internal use only *) -Notation "p <_paco_9= q" := - (forall _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 (PR: p _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 : Prop), q _paco_x0 _paco_x1 _paco_x2 _paco_x3 _paco_x4 _paco_x5 _paco_x6 _paco_x7 _paco_x8 : Prop) - (at level 50, no associativity). - (** 1 Mutual Coinduction *) Section Arg9_1. -Definition monotone9 T0 T1 T2 T3 T4 T5 T6 T7 T8 (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) := +Definition monotone9 (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 r r' (IN: gf r x0 x1 x2 x3 x4 x5 x6 x7 x8) (LE: r <9= r'), gf r' x0 x1 x2 x3 x4 x5 x6 x7 x8. -Definition _monotone9 T0 T1 T2 T3 T4 T5 T6 T7 T8 (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) := +Definition _monotone9 (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) := forall r r'(LE: r <9= r'), gf r <9== gf r'. -Lemma monotone9_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) : +Lemma monotone9_eq (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) : monotone9 gf <-> _monotone9 gf. Proof. unfold monotone9, _monotone9, le9. split; eauto. Qed. -Lemma monotone9_map T0 T1 T2 T3 T4 T5 T6 T7 T8 (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) +Lemma monotone9_map (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) (MON: _monotone9 gf) : _monotone (fun R0 => curry9 (gf (uncurry9 R0))). Proof. repeat_intros 3. apply curry_map9. apply MON; apply uncurry_map9; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. Variable gf : rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8. Arguments gf : clear implicits. @@ -292,58 +249,27 @@ Qed. End Arg9_1. -Hint Unfold monotone9. -Hint Resolve paco9_fold. - -Arguments paco9_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments paco9_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments paco9_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments paco9_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments paco9_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments paco9_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. - -Global Opaque paco9. -Global Opaque paco9_acc. -Global Opaque paco9_mult. -Global Opaque paco9_fold. -Global Opaque paco9_unfold. - -Instance paco9_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 (gf : rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8->_) r x0 x1 x2 x3 x4 x5 x6 x7 x8 : paco_class (paco9 gf r x0 x1 x2 x3 x4 x5 x6 x7 x8) := -{ pacoacc := paco9_acc gf; - pacomult := paco9_mult gf; - pacofold := paco9_fold gf; - pacounfold := paco9_unfold gf }. - (** 2 Mutual Coinduction *) Section Arg9_2. -Definition monotone9_2 T0 T1 T2 T3 T4 T5 T6 T7 T8 (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) := +Definition monotone9_2 (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 r_0 r_1 r'_0 r'_1 (IN: gf r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8) (LE_0: r_0 <9= r'_0)(LE_1: r_1 <9= r'_1), gf r'_0 r'_1 x0 x1 x2 x3 x4 x5 x6 x7 x8. -Definition _monotone9_2 T0 T1 T2 T3 T4 T5 T6 T7 T8 (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) := +Definition _monotone9_2 (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) := forall r_0 r_1 r'_0 r'_1(LE_0: r_0 <9= r'_0)(LE_1: r_1 <9= r'_1), gf r_0 r_1 <9== gf r'_0 r'_1. -Lemma monotone9_2_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) : +Lemma monotone9_2_eq (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) : monotone9_2 gf <-> _monotone9_2 gf. Proof. unfold monotone9_2, _monotone9_2, le9. split; eauto. Qed. -Lemma monotone9_2_map T0 T1 T2 T3 T4 T5 T6 T7 T8 (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) +Lemma monotone9_2_map (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) (MON: _monotone9_2 gf) : _monotone_2 (fun R0 R1 => curry9 (gf (uncurry9 R0) (uncurry9 R1))). Proof. repeat_intros 6. apply curry_map9. apply MON; apply uncurry_map9; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. Variable gf_0 gf_1 : rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -500,77 +426,27 @@ Qed. End Arg9_2. -Hint Unfold monotone9_2. -Hint Resolve paco9_2_0_fold. -Hint Resolve paco9_2_1_fold. - -Arguments paco9_2_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments paco9_2_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments paco9_2_0_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments paco9_2_1_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments paco9_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments paco9_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments paco9_2_0_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments paco9_2_1_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments paco9_2_0_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments paco9_2_1_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments paco9_2_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Arguments paco9_2_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. - -Global Opaque paco9_2_0. -Global Opaque paco9_2_0_acc. -Global Opaque paco9_2_0_mult. -Global Opaque paco9_2_0_fold. -Global Opaque paco9_2_0_unfold. - -Global Opaque paco9_2_1. -Global Opaque paco9_2_1_acc. -Global Opaque paco9_2_1_mult. -Global Opaque paco9_2_1_fold. -Global Opaque paco9_2_1_unfold. - -Instance paco9_2_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 (gf_0 gf_1 : rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 : paco_class (paco9_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8) := -{ pacoacc := paco9_2_0_acc gf_0 gf_1; - pacomult := paco9_2_0_mult gf_0 gf_1; - pacofold := paco9_2_0_fold gf_0 gf_1; - pacounfold := paco9_2_0_unfold gf_0 gf_1 }. - -Instance paco9_2_1_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 (gf_0 gf_1 : rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 : paco_class (paco9_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8) := -{ pacoacc := paco9_2_1_acc gf_0 gf_1; - pacomult := paco9_2_1_mult gf_0 gf_1; - pacofold := paco9_2_1_fold gf_0 gf_1; - pacounfold := paco9_2_1_unfold gf_0 gf_1 }. - (** 3 Mutual Coinduction *) Section Arg9_3. -Definition monotone9_3 T0 T1 T2 T3 T4 T5 T6 T7 T8 (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) := +Definition monotone9_3 (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) := forall x0 x1 x2 x3 x4 x5 x6 x7 x8 r_0 r_1 r_2 r'_0 r'_1 r'_2 (IN: gf r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8) (LE_0: r_0 <9= r'_0)(LE_1: r_1 <9= r'_1)(LE_2: r_2 <9= r'_2), gf r'_0 r'_1 r'_2 x0 x1 x2 x3 x4 x5 x6 x7 x8. -Definition _monotone9_3 T0 T1 T2 T3 T4 T5 T6 T7 T8 (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) := +Definition _monotone9_3 (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) := forall r_0 r_1 r_2 r'_0 r'_1 r'_2(LE_0: r_0 <9= r'_0)(LE_1: r_1 <9= r'_1)(LE_2: r_2 <9= r'_2), gf r_0 r_1 r_2 <9== gf r'_0 r'_1 r'_2. -Lemma monotone9_3_eq T0 T1 T2 T3 T4 T5 T6 T7 T8 (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) : +Lemma monotone9_3_eq (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) : monotone9_3 gf <-> _monotone9_3 gf. Proof. unfold monotone9_3, _monotone9_3, le9. split; eauto. Qed. -Lemma monotone9_3_map T0 T1 T2 T3 T4 T5 T6 T7 T8 (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) +Lemma monotone9_3_map (gf: rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8) (MON: _monotone9_3 gf) : _monotone_3 (fun R0 R1 R2 => curry9 (gf (uncurry9 R0) (uncurry9 R1) (uncurry9 R2))). Proof. repeat_intros 9. apply curry_map9. apply MON; apply uncurry_map9; auto. Qed. -Variable T0 : Type. -Variable T1 : forall (x0: @T0), Type. -Variable T2 : forall (x0: @T0) (x1: @T1 x0), Type. -Variable T3 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1), Type. -Variable T4 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2), Type. -Variable T5 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3), Type. -Variable T6 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4), Type. -Variable T7 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5), Type. -Variable T8 : forall (x0: @T0) (x1: @T1 x0) (x2: @T2 x0 x1) (x3: @T3 x0 x1 x2) (x4: @T4 x0 x1 x2 x3) (x5: @T5 x0 x1 x2 x3 x4) (x6: @T6 x0 x1 x2 x3 x4 x5) (x7: @T7 x0 x1 x2 x3 x4 x5 x6), Type. Variable gf_0 gf_1 gf_2 : rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8 -> rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8. Arguments gf_0 : clear implicits. Arguments gf_1 : clear implicits. @@ -803,10 +679,72 @@ Qed. End Arg9_3. -Hint Unfold monotone9_3. +End PACO9. + +Global Opaque paco9. + +Hint Unfold upaco9. +Hint Resolve paco9_fold. +Hint Unfold monotone9. + +Arguments paco9_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. + +Instance paco9_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 (gf : rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8->_) r x0 x1 x2 x3 x4 x5 x6 x7 x8 : paco_class (paco9 gf r x0 x1 x2 x3 x4 x5 x6 x7 x8) := +{ pacoacc := paco9_acc gf; + pacomult := paco9_mult gf; + pacofold := paco9_fold gf; + pacounfold := paco9_unfold gf }. + +Global Opaque paco9_2_0. +Global Opaque paco9_2_1. + +Hint Unfold upaco9_2_0. +Hint Unfold upaco9_2_1. +Hint Resolve paco9_2_0_fold. +Hint Resolve paco9_2_1_fold. +Hint Unfold monotone9_2. + +Arguments paco9_2_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_2_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_2_0_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_2_1_mon [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_2_0_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_2_1_mult_strong [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_2_0_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_2_1_mult [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_2_0_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_2_1_fold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_2_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. +Arguments paco9_2_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. + +Instance paco9_2_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 (gf_0 gf_1 : rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 : paco_class (paco9_2_0 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8) := +{ pacoacc := paco9_2_0_acc gf_0 gf_1; + pacomult := paco9_2_0_mult gf_0 gf_1; + pacofold := paco9_2_0_fold gf_0 gf_1; + pacounfold := paco9_2_0_unfold gf_0 gf_1 }. + +Instance paco9_2_1_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 (gf_0 gf_1 : rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8->_) r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8 : paco_class (paco9_2_1 gf_0 gf_1 r_0 r_1 x0 x1 x2 x3 x4 x5 x6 x7 x8) := +{ pacoacc := paco9_2_1_acc gf_0 gf_1; + pacomult := paco9_2_1_mult gf_0 gf_1; + pacofold := paco9_2_1_fold gf_0 gf_1; + pacounfold := paco9_2_1_unfold gf_0 gf_1 }. + +Global Opaque paco9_3_0. +Global Opaque paco9_3_1. +Global Opaque paco9_3_2. + +Hint Unfold upaco9_3_0. +Hint Unfold upaco9_3_1. +Hint Unfold upaco9_3_2. Hint Resolve paco9_3_0_fold. Hint Resolve paco9_3_1_fold. Hint Resolve paco9_3_2_fold. +Hint Unfold monotone9_3. Arguments paco9_3_0_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. Arguments paco9_3_1_acc [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. @@ -827,24 +765,6 @@ Arguments paco9_3_0_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. Arguments paco9_3_1_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. Arguments paco9_3_2_unfold [ T0 T1 T2 T3 T4 T5 T6 T7 T8 ]. -Global Opaque paco9_3_0. -Global Opaque paco9_3_0_acc. -Global Opaque paco9_3_0_mult. -Global Opaque paco9_3_0_fold. -Global Opaque paco9_3_0_unfold. - -Global Opaque paco9_3_1. -Global Opaque paco9_3_1_acc. -Global Opaque paco9_3_1_mult. -Global Opaque paco9_3_1_fold. -Global Opaque paco9_3_1_unfold. - -Global Opaque paco9_3_2. -Global Opaque paco9_3_2_acc. -Global Opaque paco9_3_2_mult. -Global Opaque paco9_3_2_fold. -Global Opaque paco9_3_2_unfold. - Instance paco9_3_0_inst T0 T1 T2 T3 T4 T5 T6 T7 T8 (gf_0 gf_1 gf_2 : rel9 T0 T1 T2 T3 T4 T5 T6 T7 T8->_) r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8 : paco_class (paco9_3_0 gf_0 gf_1 gf_2 r_0 r_1 r_2 x0 x1 x2 x3 x4 x5 x6 x7 x8) := { pacoacc := paco9_3_0_acc gf_0 gf_1 gf_2; pacomult := paco9_3_0_mult gf_0 gf_1 gf_2;