1 (**************************************************************************)
4 (* ||A|| A project by Andrea Asperti *)
6 (* ||I|| Developers: *)
7 (* ||T|| The HELM team. *)
8 (* ||A|| http://helm.cs.unibo.it *)
10 (* \ / This file is distributed under the terms of the *)
11 (* v GNU General Public License Version 2 *)
13 (**************************************************************************)
15 include "ground/xoa/ex_3_1.ma".
16 include "ground/xoa/ex_4_2.ma".
17 include "ground/arith/nat_plus.ma".
18 include "ground/arith/nat_le_max.ma".
19 include "ground/relocation/pr_fcla_eq.ma".
20 include "ground/relocation/pr_sor_isi.ma".
22 (* RELATIONAL UNION FOR PARTIAL RELOCATION MAPS *****************************)
24 (* Constructions with pr_fcla ***********************************************)
28 âf1,n1. đâ¨f1⊠â n1 â âf2,n2. đâ¨f2⊠â n2 â
29 ââf,n. f1 â f2 â f & đâ¨f⊠â n & (n1 ⨠n2) ⤠n & n ⤠n1 + n2.
30 #f1 #n1 #Hf1 elim Hf1 -f1 -n1 /3 width=6 by pr_sor_isi_sn, ex4_2_intro/
31 #f1 #n1 #Hf1 #IH #f2 #n2 * -f2 -n2 /3 width=6 by pr_fcla_push, pr_fcla_next, ex4_2_intro, pr_sor_isi_dx/
32 #f2 #n2 #Hf2 elim (IH ⌠Hf2) -IH -Hf2 -Hf1 [2,4: #f #n <nplus_succ_dx ] (* * full auto fails *)
33 [ /3 width=7 by pr_fcla_next, pr_sor_push_next, nle_max_sn_succ_dx, nle_succ_bi, ex4_2_intro/
34 | /4 width=7 by pr_fcla_next, pr_sor_next_bi, nle_succ_dx, nle_succ_bi, ex4_2_intro/
35 | /3 width=7 by pr_fcla_push, pr_sor_push_bi, ex4_2_intro/
36 | /3 width=7 by pr_fcla_next, pr_sor_next_push, nle_max_sn_succ_sn, nle_succ_bi, ex4_2_intro/
40 (* Destructions with pr_fcla ************************************************)
43 lemma pr_sor_inv_fcla_bi:
44 âf1,n1. đâ¨f1⊠â n1 â âf2,n2. đâ¨f2⊠â n2 â âf. f1 â f2 â f â
45 âân. đâ¨f⊠â n & (n1 ⨠n2) ⤠n & n ⤠n1 + n2.
46 #f1 #n1 #Hf1 #f2 #n2 #Hf2 #f #Hf elim (pr_sor_fcla_bi ⌠Hf1 ⌠Hf2) -Hf1 -Hf2
47 /4 width=6 by pr_sor_mono, pr_fcla_eq_repl_back, ex3_intro/
50 (* Destructions with pr_fcla ************************************************)
52 (*** sor_fwd_fcla_sn_ex *)
53 lemma pr_sor_des_fcla_sn:
54 âf,n. đâ¨f⊠â n â âf1,f2. f1 â f2 â f â
55 âân1. đâ¨f1⊠â n1 & n1 ⤠n.
57 [ /4 width=4 by pr_sor_des_isi_sn, pr_fcla_isi, ex2_intro/
58 | #f #n #_ #IH #f1 #f2 #H
59 elim (pr_sor_inv_push ⌠H) -H [ |*: // ] #g1 #g2 #Hf #H1 #H2 destruct
60 elim (IH ⌠Hf) -f /3 width=3 by pr_fcla_push, ex2_intro/
61 | #f #n #_ #IH #f1 #f2 #H
62 elim (pr_sor_inv_next ⌠H) -H [1,3,4: * |*: // ] #g1 #g2 #Hf #H1 #H2 destruct
63 elim (IH ⌠Hf) -f /3 width=3 by pr_fcla_push, pr_fcla_next, nle_succ_bi, nle_succ_dx, ex2_intro/
67 (*** sor_fwd_fcla_dx_ex *)
68 lemma pr_sor_des_fcla_dx:
69 âf,n. đâ¨f⊠â n â âf1,f2. f1 â f2 â f â
70 âân2. đâ¨f2⊠â n2 & n2 ⤠n.
71 /3 width=4 by pr_sor_des_fcla_sn, pr_sor_comm/ qed-.