]> matita.cs.unibo.it Git - helm.git/commitdiff
more additions and corrections for the article
authorFerruccio Guidi <fguidi@maelstrom.helm.cs.unibo.it>
Sat, 20 Jul 2019 20:13:45 +0000 (22:13 +0200)
committerFerruccio Guidi <fguidi@maelstrom.helm.cs.unibo.it>
Sat, 20 Jul 2019 20:13:45 +0000 (22:13 +0200)
+ fqu_clear excluded from (fqu true)
+ some renaming and changes of notation (esp. lsubsx)
+ more comments and additions to etc
+ matitadep: -b show the recursive backward dependences of a file

104 files changed:
matita/components/binaries/matitadep/matitadep.ml
matita/matita/contribs/lambdadelta/apps_2/examples/ex_fpbg_refl.ma
matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpce.ma
matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_tdeq_conf.ma
matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_tdeq_trans.ma
matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fqus.ma
matita/matita/contribs/lambdadelta/basic_2/etc/rdsx_csx.etc [new file with mode: 0644]
matita/matita/contribs/lambdadelta/basic_2/etc/sdsx/sdsx.etc [new file with mode: 0644]
matita/matita/contribs/lambdadelta/basic_2/etc/sdsx/sdsx_rdsx.etc [new file with mode: 0644]
matita/matita/contribs/lambdadelta/basic_2/notation/relations/lsubeqx_5.ma [deleted file]
matita/matita/contribs/lambdadelta/basic_2/notation/relations/topredtysnstrong_5.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbg.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fqus.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lpx.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fqus.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbs.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqup.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpxs.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqup.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqus.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpxs.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_csx.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_jsx.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_rsx.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx.ma [deleted file]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx_lsubsx.ma [deleted file]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx_rdsx.ma [deleted file]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx.ma [deleted file]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_csx.ma [deleted file]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_drops.ma [deleted file]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_fqup.ma [deleted file]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_length.ma [deleted file]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_lpxs.ma [deleted file]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_rdsx.ma [deleted file]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_csx.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_drops.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_fqup.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_length.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_lpxs.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_rsx.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fqus.ma
matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb.ma
matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq.ma
matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_fquq.ma
matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpr.ma
matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fquq.ma
matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fsle.ma
matita/matita/contribs/lambdadelta/basic_2/web/basic_2_src.tbl
matita/matita/contribs/lambdadelta/static_2/etc/scl/clearsn_3.etc [new file with mode: 0644]
matita/matita/contribs/lambdadelta/static_2/etc/scl/scl.etc [new file with mode: 0644]
matita/matita/contribs/lambdadelta/static_2/etc/scl/scl_scl.etc [new file with mode: 0644]
matita/matita/contribs/lambdadelta/static_2/notation/relations/freeplus_3.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/static_2/notation/relations/freestar_3.ma [deleted file]
matita/matita/contribs/lambdadelta/static_2/notation/relations/lrsubeqf_4.ma
matita/matita/contribs/lambdadelta/static_2/notation/relations/supterm_6.ma
matita/matita/contribs/lambdadelta/static_2/notation/relations/supterm_7.ma
matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermopt_6.ma
matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermopt_7.ma
matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermplus_6.ma
matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermplus_7.ma
matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermstar_6.ma
matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermstar_7.ma
matita/matita/contribs/lambdadelta/static_2/s_computation/fqup.ma
matita/matita/contribs/lambdadelta/static_2/s_computation/fqup_drops.ma
matita/matita/contribs/lambdadelta/static_2/s_computation/fqup_weight.ma
matita/matita/contribs/lambdadelta/static_2/s_computation/fqus.ma
matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_drops.ma
matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_fqup.ma
matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_weight.ma
matita/matita/contribs/lambdadelta/static_2/s_transition/fqu.ma
matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_length.ma
matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_tdeq.ma
matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_weight.ma
matita/matita/contribs/lambdadelta/static_2/s_transition/fquq.ma
matita/matita/contribs/lambdadelta/static_2/s_transition/fquq_length.ma
matita/matita/contribs/lambdadelta/static_2/s_transition/fquq_weight.ma
matita/matita/contribs/lambdadelta/static_2/static/aaa_fqus.ma
matita/matita/contribs/lambdadelta/static_2/static/fdeq_fqus.ma
matita/matita/contribs/lambdadelta/static_2/static/frees.ma
matita/matita/contribs/lambdadelta/static_2/static/frees_append.ma
matita/matita/contribs/lambdadelta/static_2/static/frees_drops.ma
matita/matita/contribs/lambdadelta/static_2/static/frees_fqup.ma
matita/matita/contribs/lambdadelta/static_2/static/frees_frees.ma
matita/matita/contribs/lambdadelta/static_2/static/fsle.ma
matita/matita/contribs/lambdadelta/static_2/static/fsle_fsle.ma
matita/matita/contribs/lambdadelta/static_2/static/lsubf.ma
matita/matita/contribs/lambdadelta/static_2/static/lsubf_frees.ma
matita/matita/contribs/lambdadelta/static_2/static/lsubf_lsubf.ma
matita/matita/contribs/lambdadelta/static_2/static/lsubf_lsubr.ma
matita/matita/contribs/lambdadelta/static_2/static/rdeq.ma
matita/matita/contribs/lambdadelta/static_2/static/rdeq_fqus.ma
matita/matita/contribs/lambdadelta/static_2/static/req.ma
matita/matita/contribs/lambdadelta/static_2/static/rex.ma
matita/matita/contribs/lambdadelta/static_2/static/rex_drops.ma
matita/matita/contribs/lambdadelta/static_2/static/rex_fqup.ma
matita/matita/contribs/lambdadelta/static_2/static/rex_fsle.ma
matita/matita/contribs/lambdadelta/static_2/static/rex_length.ma
matita/matita/contribs/lambdadelta/static_2/static/rex_lex.ma
matita/matita/contribs/lambdadelta/static_2/static/rex_rex.ma
matita/matita/contribs/lambdadelta/static_2/web/static_2_src.tbl
matita/matita/predefined_virtuals.ml

index 054f90f4a64bac89921c71c81ba7c4bb7c3bc43b..d21af12a3fd635320655f2c6a7e1bf9d832ef161 100644 (file)
@@ -1,8 +1,8 @@
-module StringSet = Set.Make (String) 
+module StringSet = Set.Make (String)
 
 type file = {
-   ddeps: string list;        (* direct dependences *)
-   rdeps: StringSet.t option  (* recursive dependences *)
+  ddeps: string list;        (* direct dependences *)
+  rdeps: StringSet.t option  (* recursive dependences *)
 }
 
 let graph = Hashtbl.create 503
@@ -10,111 +10,124 @@ let graph = Hashtbl.create 503
 let debug = ref 0
 
 let rec purge dname vdeps = match vdeps with
-   | []       -> vdeps
-   | hd :: tl -> if hd = dname then tl else hd :: purge dname tl 
+  | []       -> vdeps
+  | hd :: tl -> if hd = dname then tl else hd :: purge dname tl
 
 let add fname =
-   if fname = "" then () else
-   if Hashtbl.mem graph fname then () else
-   Hashtbl.add graph fname {ddeps = []; rdeps = None}
+  if fname = "" then () else
+  if Hashtbl.mem graph fname then () else
+  Hashtbl.add graph fname {ddeps = []; rdeps = None}
 
 let add_ddep fname dname =
-   if dname = "" then () else
-   let file = Hashtbl.find graph fname in
-   Hashtbl.replace graph fname {file with ddeps = dname :: file.ddeps} 
+  if dname = "" then () else
+  let file = Hashtbl.find graph fname in
+  Hashtbl.replace graph fname {file with ddeps = dname :: file.ddeps}
 
 let init fname dname =
-   if !debug land 1 > 0 then Printf.eprintf "init: %s: %s.\n" fname dname;
-   add fname; add dname; add_ddep fname dname 
+  if !debug land 1 > 0 then Printf.eprintf "init: %s: %s.\n" fname dname;
+  add fname; add dname; add_ddep fname dname
 
 (* vdeps: visited dependences for loop detection *)
 let rec compute_from_file vdeps fname file = match file.rdeps with
-   | Some rdeps -> rdeps
-   | None       ->   
-      if !debug land 2 > 0 then Printf.eprintf "  compute file: %s\n" fname; 
-      let vdeps = fname :: vdeps in
-      List.iter (redundant vdeps fname file.ddeps) file.ddeps;
-      let rdeps = compute_from_ddeps vdeps file.ddeps in
-      Hashtbl.replace graph fname {file with rdeps = Some rdeps};      
-      rdeps
+  | Some rdeps -> rdeps
+  | None       ->
+    if !debug land 2 > 0 then Printf.eprintf "  compute file: %s\n" fname;
+    let vdeps = fname :: vdeps in
+    List.iter (redundant vdeps fname file.ddeps) file.ddeps;
+    let rdeps = compute_from_ddeps vdeps file.ddeps in
+    Hashtbl.replace graph fname {file with rdeps = Some rdeps};
+    rdeps
 
 and compute_from_dname vdeps rdeps dname =
-   if List.mem dname vdeps then begin
-      let loop = purge dname (List.rev vdeps) in
-      Printf.printf "circular: %s\n" (String.concat " " loop);
-      StringSet.add dname rdeps
-   end else
-     let file = Hashtbl.find graph dname in
-     StringSet.add dname (StringSet.union (compute_from_file vdeps dname file) rdeps)
+  if List.mem dname vdeps then begin
+    let loop = purge dname (List.rev vdeps) in
+    Printf.printf "circular: %s\n" (String.concat " " loop);
+    StringSet.add dname rdeps
+  end else
+    let file = Hashtbl.find graph dname in
+    StringSet.add dname (StringSet.union (compute_from_file vdeps dname file) rdeps)
 
-and compute_from_ddeps vdeps ddeps = 
-   List.fold_left (compute_from_dname vdeps) StringSet.empty ddeps
+and compute_from_ddeps vdeps ddeps =
+  List.fold_left (compute_from_dname vdeps) StringSet.empty ddeps
 
 and redundant vdeps fname ddeps dname =
-   let rdeps = compute_from_ddeps vdeps (purge dname ddeps) in
-   if StringSet.mem dname rdeps then
-      Printf.printf "%s: redundant %s\n" fname dname
+  let rdeps = compute_from_ddeps vdeps (purge dname ddeps) in
+  if StringSet.mem dname rdeps then
+    Printf.printf "%s: redundant %s\n" fname dname
 
-let check () = 
-   let iter fname file = ignore (compute_from_file [] fname file) in
-   Hashtbl.iter iter graph 
+let check () =
+  let iter fname file = ignore (compute_from_file [] fname file) in
+  Hashtbl.iter iter graph
 
 let get_unions () =
-   let map1 ddeps dname = StringSet.add dname ddeps in 
-   let map2 fname file (fnames, ddeps) =
-      StringSet.add fname fnames, List.fold_left map1 ddeps file.ddeps
-   in
-   Hashtbl.fold map2 graph (StringSet.empty, StringSet.empty)
+  let map1 ddeps dname = StringSet.add dname ddeps in
+  let map2 fname file (fnames, ddeps) =
+    StringSet.add fname fnames, List.fold_left map1 ddeps file.ddeps
+  in
+  Hashtbl.fold map2 graph (StringSet.empty, StringSet.empty)
 
 let get_leafs () =
-   let map fname file fnames =
-      if file.ddeps = [] then StringSet.add fname fnames else fnames
-   in
-   Hashtbl.fold map graph StringSet.empty
+  let map fname file fnames =
+    if file.ddeps = [] then StringSet.add fname fnames else fnames
+  in
+  Hashtbl.fold map graph StringSet.empty
 
 let top () =
-   let iter fname = Printf.printf "top: %s\n" fname in
-   let fnames, ddeps = get_unions () in
-   StringSet.iter iter (StringSet.diff fnames ddeps) 
+  let iter fname = Printf.printf "top: %s\n" fname in
+  let fnames, ddeps = get_unions () in
+  StringSet.iter iter (StringSet.diff fnames ddeps)
 
 let leaf () =
-   let iter fname = Printf.printf "leaf: %s\n" fname in
-   let fnames = get_leafs () in
-   StringSet.iter iter fnames
-
-let rec read ich = 
-   let line = input_line ich in
-   begin try Scanf.sscanf line "%s@:include \"%s@\"." init 
-   with Scanf.Scan_failure _ ->
-      begin try Scanf.sscanf line "./%s@:include \"%s@\"." init
-      with Scanf.Scan_failure _ ->   
-         begin try Scanf.sscanf line "%s@:(*%s@*)" (fun _ _ -> ())
-         with Scanf.Scan_failure _ ->
-           Printf.eprintf "unknown line: %s.\n" line
-         end
-      end  
-   end;
-   read ich
-   
+  let iter fname = Printf.printf "leaf: %s\n" fname in
+  let fnames = get_leafs () in
+  StringSet.iter iter fnames
+
+let back fname =
+  Printf.printf "backward: %s\n" fname;
+  try match (Hashtbl.find graph fname).rdeps with
+    | None       -> ()
+    | Some rdeps ->
+      let iter fname = Printf.printf "%s\n" fname in
+      StringSet.iter iter rdeps
+  with Not_found -> ()
+
+let rec read ich =
+  let line = input_line ich in
+  begin try Scanf.sscanf line "%s@:include \"%s@\"." init
+  with Scanf.Scan_failure _ ->
+    begin try Scanf.sscanf line "./%s@:include \"%s@\"." init
+    with Scanf.Scan_failure _ ->
+      begin try Scanf.sscanf line "%s@:(*%s@*)" (fun _ _ -> ())
+      with Scanf.Scan_failure _ ->
+          Printf.eprintf "unknown line: %s.\n" line
+      end
+    end
+  end;
+  read ich
+
 let _ =
-   let show_check = ref false in
-   let show_top = ref false in
-   let show_leaf = ref false in   
-   let process_file name = () in
-   let show () =
-      if !show_check then check ();
-      if !show_top then top ();
-      if !show_leaf then leaf ()   
-   in
-   let help   = "matitadep [-clt | -d <int> ] < <file>" in
-   let help_c = " Print the redundant and looping arcs of the dependences graph" in
-   let help_d = "<flags>  Set these debug options" in
-   let help_l = " Print the leaf nodes of the dependences graph" in
-   let help_t = " Print the top nodes of the dependences graph" in
-   Arg.parse [
-      "-c", Arg.Set show_check, help_c;
-      "-d", Arg.Int (fun x -> debug := x), help_d;
-      "-l", Arg.Set show_leaf, help_l;
-      "-t", Arg.Set show_top, help_t;
-   ] process_file help;
-   try read stdin with End_of_file -> show ()
+  let show_check = ref false in
+  let show_top = ref false in
+  let show_leaf = ref false in
+  let show_back = ref "" in
+  let process_file name = () in
+  let show () =
+    if !show_check then check ();
+    if !show_top then top ();
+    if !show_leaf then leaf ();
+    if !show_back <> "" then back !show_back
+  in
+  let help   = "matitadep [-clt | -d <int> | -b <string> ] < <file>" in
+  let help_b = "<string> Print the backward dependences of this node" in
+  let help_c = " Print the redundant and looping arcs of the dependences graph" in
+  let help_d = "<flags>  Set these debug options" in
+  let help_l = " Print the leaf nodes of the dependences graph" in
+  let help_t = " Print the top nodes of the dependences graph" in
+  Arg.parse [
+    "-b", Arg.String ((:=) show_back), help_b;
+    "-c", Arg.Set show_check, help_c;
+    "-d", Arg.Int ((:=) debug), help_d;
+    "-l", Arg.Set show_leaf, help_l;
+    "-t", Arg.Set show_top, help_t;
+  ] process_file help;
+  try read stdin with End_of_file -> show ()
index f75a20a29e9b51b6862863bfb02c060710909ab4..b41ddae8a0b2805a59db7275adc2f36824c2ba59 100644 (file)
@@ -48,7 +48,7 @@ lemma cpr_ApplOmega_34 (h) (G) (L) (s0) (s): ⦃G,L⦄ ⊢ ApplOmega3 s0 s ➡[h
 lemma cpxs_ApplOmega_14 (h) (G) (L) (s0) (s): ⦃G,L⦄ ⊢ ApplOmega1 s0 s ⬈*[h] ApplOmega4 s0 s.
 /5 width=4 by cpxs_strap1, cpm_fwd_cpx/ qed.
 
-lemma fqup_ApplOmega_41 (G) (L) (s0) (s): â¦\83G,L,ApplOmega4 s0 sâ¦\84 â\8a\90+ ⦃G,L,ApplOmega1 s0 s⦄.
+lemma fqup_ApplOmega_41 (G) (L) (s0) (s): â¦\83G,L,ApplOmega4 s0 sâ¦\84 â¬\82+ ⦃G,L,ApplOmega1 s0 s⦄.
 /2 width=1 by/ qed.
 
 (* Main properties **********************************************************)
index faca3d631551475656388ecd95f57a0f09cf9d01..472d81e84c892d5a30ef950574f5dcddd30d936e 100644 (file)
@@ -57,7 +57,7 @@ generalize in match HT1; -HT1
 | #p #I #V1 #T1 #_ #IH #H
   elim (cnv_inv_bind … H) -H #HV1 #HT1
   elim (IH … HV1) [| /3 width=1 by fpb_fpbg, fpb_fqu, fqu_pair_sn/ ] #V2 #HV12
-  elim (IH … HT1) [| /3 width=1 by fpb_fpbg, fpb_fqu, fqu_bind_dx/ ] #T2 #HT12
+  elim (IH … HT1) [| /4 width=1 by fpb_fpbg, fpb_fqu, fqu_bind_dx/ ] #T2 #HT12
   /3 width=2 by cpce_bind, ex_intro/
 | #I #V1 #T1 #_ #IH #H
   elim (cnv_fwd_flat … H) -H #HV1 #HT1
index 752d02d11a771a1e5785a774fd9d3127bd682f96..43952ffcf353d1b66fe5e7176942768c65af6ce3 100644 (file)
@@ -39,7 +39,7 @@ fact cnv_cpm_tdeq_conf_lpr_atom_ess_aux (h) (G0) (L1) (L2) (s):
 qed-.
 
 fact cnv_cpm_tdeq_conf_lpr_bind_bind_aux (a) (h) (p) (I) (G0) (L0) (V0) (T0):
-     (â\88\80G,L,T. â¦\83G0,L0,â\93\91{p,I}V0.T0â¦\84 â\8a\90+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr a h G L T) →
+     (â\88\80G,L,T. â¦\83G0,L0,â\93\91{p,I}V0.T0â¦\84 â¬\82+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr a h G L T) →
      ⦃G0,L0⦄ ⊢ ⓑ{p,I}V0.T0 ![a,h] →
      ∀n1,T1. ⦃G0,L0.ⓑ{I}V0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 →
      ∀n2,T2. ⦃G0,L0.ⓑ{I}V0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 →
@@ -55,7 +55,7 @@ elim (IH … H1T01 H2T01 … H1T02 H2T02 (L1.ⓑ{I}V0) … (L2.ⓑ{I}V0)) [|*: /
 qed-.
 
 fact cnv_cpm_tdeq_conf_lpr_appl_appl_aux (a) (h) (G0) (L0) (V0) (T0):
-     (â\88\80G,L,T. â¦\83G0,L0,â\93\90V0.T0â¦\84 â\8a\90+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr a h G L T) →
+     (â\88\80G,L,T. â¦\83G0,L0,â\93\90V0.T0â¦\84 â¬\82+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr a h G L T) →
      ⦃G0,L0⦄ ⊢ ⓐV0.T0 ![a,h] →
      ∀n1,T1. ⦃G0,L0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 →
      ∀n2,T2. ⦃G0,L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 →
@@ -71,7 +71,7 @@ elim (IH … H1T01 H2T01 … H1T02 H2T02 … HL01 … HL02) [|*: /2 width=1 by f
 qed-.
 
 fact cnv_cpm_tdeq_conf_lpr_cast_cast_aux (a) (h) (G0) (L0) (V0) (T0):
-     (â\88\80G,L,T. â¦\83G0,L0,â\93\9dV0.T0â¦\84 â\8a\90+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr a h G L T) →
+     (â\88\80G,L,T. â¦\83G0,L0,â\93\9dV0.T0â¦\84 â¬\82+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr a h G L T) →
      ⦃G0,L0⦄ ⊢ ⓝV0.T0 ![a,h] →
      ∀n1,V1. ⦃G0,L0⦄ ⊢ V0 ➡[n1,h] V1 → V0 ≛ V1 →
      ∀n2,V2. ⦃G0,L0⦄ ⊢ V0 ➡[n2,h] V2 → V0 ≛ V2 →
@@ -90,7 +90,7 @@ elim (IH … H1T01 H2T01 … H1T02 H2T02 … HL01 … HL02) [|*: /2 width=1 by f
 qed-.
 
 fact cnv_cpm_tdeq_conf_lpr_aux (a) (h) (G0) (L0) (T0):
-     (â\88\80G,L,T. â¦\83G0,L0,T0â¦\84 â\8a\90+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr a h G L T) →
+     (â\88\80G,L,T. â¦\83G0,L0,T0â¦\84 â¬\82+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr a h G L T) →
      ∀G,L,T. G0 = G → L0 = L → T0 = T → IH_cnv_cpm_tdeq_conf_lpr a h G L T.
 #a #h #G0 #L0 #T0 #IH1 #G #L * [| * [| * ]]
 [ #I #HG0 #HL0 #HT0 #HT #n1 #X1 #H1X1 #H2X1 #n2 #X2 #H1X2 #H2X2 #L1 #HL1 #L2 #HL2 destruct
index 44b8fe219e00f47e5b5a115b645f48a7fe7bd3c1..fd77a19b2a75bc923542631f17702c3d7d35bfab 100644 (file)
@@ -27,7 +27,7 @@ definition IH_cnv_cpm_tdeq_cpm_trans (a) (h): relation3 genv lenv term ≝
 
 fact cnv_cpm_tdeq_cpm_trans_sub (a) (h) (G0) (L0) (T0):
      (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr a h G L T) →
-     (â\88\80G,L,T. â¦\83G0,L0,T0â¦\84 â\8a\90+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_cpm_trans a h G L T) →
+     (â\88\80G,L,T. â¦\83G0,L0,T0â¦\84 â¬\82+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_cpm_trans a h G L T) →
      ∀G,L,T1. G0 = G → L0 = L → T0 = T1 → IH_cnv_cpm_tdeq_cpm_trans a h G L T1.
 #a #h #G0 #L0 #T0 #IH2 #IH1 #G #L * [| * [| * ]]
 [ #I #_ #_ #_ #_ #n1 #X1 #H1X #H2X #n2 #X2 #HX2 destruct -G0 -L0 -T0
index 678495b8e4afb72f855fb20c3ef6d22d07dd34b3..fbac6d7f7ce018e22a6fb8732f64ed23e8b410fc 100644 (file)
@@ -20,7 +20,7 @@ include "basic_2/dynamic/cnv_drops.ma".
 (* Properties with supclosure ***********************************************)
 
 (* Basic_2A1: uses: snv_fqu_conf *)
-lemma cnv_fqu_conf (a) (h): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90 ⦃G2,L2,T2⦄ →
+lemma cnv_fqu_conf (a) (h): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82 ⦃G2,L2,T2⦄ →
                             ⦃G1,L1⦄ ⊢ T1 ![a,h] → ⦃G2,L2⦄ ⊢ T2 ![a,h].
 #a #h #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
 [ #I1 #G1 #L1 #V1 #H
@@ -30,7 +30,7 @@ lemma cnv_fqu_conf (a) (h): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐ ⦃G2,L2,T2
   | elim (cnv_inv_appl … H) -H //
   | elim (cnv_inv_cast … H) -H //
   ]
-| #p #I1 #G1 #L1 #V1 #T1 #H
+| #p #I1 #G1 #L1 #V1 #T1 #_ #H
   elim (cnv_inv_bind … H) -H //
 | #p #I1 #G1 #L1 #V1 #T1 #H destruct
 | * #G1 #L1 #V1 #T1 #H
@@ -43,21 +43,21 @@ lemma cnv_fqu_conf (a) (h): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐ ⦃G2,L2,T2
 qed-.
 
 (* Basic_2A1: uses: snv_fquq_conf *)
-lemma cnv_fquq_conf (a) (h): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90⸮ ⦃G2,L2,T2⦄ →
+lemma cnv_fquq_conf (a) (h): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮ ⦃G2,L2,T2⦄ →
                              ⦃G1,L1⦄ ⊢ T1 ![a,h] → ⦃G2,L2⦄ ⊢ T2 ![a,h].
 #a #h #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -H [|*]
 /2 width=5 by cnv_fqu_conf/
 qed-.
 
 (* Basic_2A1: uses: snv_fqup_conf *)
-lemma cnv_fqup_conf (a) (h): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90+ ⦃G2,L2,T2⦄ →
+lemma cnv_fqup_conf (a) (h): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82+ ⦃G2,L2,T2⦄ →
                              ⦃G1,L1⦄ ⊢ T1 ![a,h] → ⦃G2,L2⦄ ⊢ T2 ![a,h].
 #a #h #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
 /3 width=5 by fqup_strap1, cnv_fqu_conf/
 qed-.
 
 (* Basic_2A1: uses: snv_fqus_conf *)
-lemma cnv_fqus_conf (a) (h): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90* ⦃G2,L2,T2⦄ →
+lemma cnv_fqus_conf (a) (h): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82* ⦃G2,L2,T2⦄ →
                              ⦃G1,L1⦄ ⊢ T1 ![a,h] → ⦃G2,L2⦄ ⊢ T2 ![a,h].
 #a #h #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fqus_inv_fqup … H) -H [|*]
 /2 width=5 by cnv_fqup_conf/
diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/rdsx_csx.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/rdsx_csx.etc
new file mode 100644 (file)
index 0000000..cae7215
--- /dev/null
@@ -0,0 +1,44 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "basic_2/rt_computation/csx_lsubr.ma".
+include "basic_2/rt_computation/csx_cpxs.ma".
+include "basic_2/rt_computation/sdsx_rdsx.ma".
+
+(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******)
+
+(* Advanced properties ******************************************************)
+
+lemma rdsx_pair_lpxs (h) (I) (G):
+                     ∀K1,V1. G ⊢ ⬈*[h,V1] 𝐒⦃K1⦄ →
+                     ∀V2. ⦃G,K1⦄ ⊢ ⬈*[h] 𝐒⦃V2⦄ →
+                     (∀K. ⦃G,K1⦄ ⊢ ⬈*[h] K → ⦃G,K⦄ ⊢ V1 ⬈*[h] V2) →
+                     G ⊢ ⬈*[h,#0] 𝐒⦃K1.ⓑ{I}V2⦄.
+#h #I #G #K1 #V1 #H
+@(rdsx_ind_lpxs … H) -K1 #K1 #_ #IHK #V2 #H
+@(csx_ind_cpxs … H) -V2 #V2 #HV2 #IHV #HK
+@rdsx_intro_lpxs #Y #HY #HnY
+elim (lpxs_inv_pair_sn … HY) -HY #K3 #V3 #HK13 #HV23 #H destruct
+elim (tdeq_dec V2 V3)
+[ -IHV -HV23 #HV23
+  @(rdsx_rdeq_trans … (K3.ⓑ{I}V2)) [| /2 width=1 by rdeq_pair_refl/ ]
+  @(IHK … HK13) -IHK
+  [
+  |
+  | /3 width=3 by lpxs_trans/
+  ]
+| -IHK -HnY #HnV23
+  @(rdsx_lpxs_trans … (K1.ⓑ{I}V3)) [| /2 width=1 by lpxs_bind_refl_dx/ ]
+  @(IHV … HV23 HnV23) -IHV -HnV23
+  #K #HK
diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/sdsx/sdsx.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/sdsx/sdsx.etc
new file mode 100644 (file)
index 0000000..c721bee
--- /dev/null
@@ -0,0 +1,145 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "basic_2/rt_computation/rdsx.ma".
+
+(* STRONGLY NORMALIZING SELECTED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******)
+
+(* Basic_2A1: uses: lcosx *)
+inductive sdsx (h) (G): rtmap → predicate lenv ≝
+| sdsx_atom: ∀f. sdsx h G f (⋆)
+| sdsx_push: ∀f,I,K. sdsx h G f K → sdsx h G (⫯f) (K.ⓘ{I})
+| sdsx_unit: ∀f,I,K. sdsx h G f K → sdsx h G (↑f) (K.ⓤ{I})
+| sdsx_pair: ∀f,I,K,V. G ⊢ ⬈*[h,V] 𝐒⦃K⦄ →
+             sdsx h G f K → sdsx h G (↑f) (K.ⓑ{I}V)
+.
+
+interpretation
+   "strong normalization for unbound context-sensitive parallel rt-transition on selected entries (local environment)"
+   'PRedTySNStrong h f G L = (sdsx h G f L).
+
+(* Basic inversion lemmas ***************************************************)
+
+fact sdsx_inv_push_aux (h) (G):
+     ∀g,L. G ⊢ ⬈*[h,g] 𝐒⦃L⦄ →
+     ∀f,I,K. g = ⫯f → L = K.ⓘ{I} → G ⊢ ⬈*[h,f] 𝐒⦃K⦄.
+#h #G #g #L * -g -L
+[ #f #g #J #L #_ #H destruct
+| #f #I #K #HK #g #J #L #H1 #H2 destruct //
+| #f #I #K #_ #g #J #L #H #_
+  elim (discr_next_push … H)
+| #f #I #K #V #_ #_ #g #J #L #H #_
+  elim (discr_next_push … H)
+]
+qed-.
+
+lemma sdsx_inv_push (h) (G):
+      ∀f,I,K. G ⊢ ⬈*[h,⫯f] 𝐒⦃K.ⓘ{I}⦄ → G ⊢ ⬈*[h,f] 𝐒⦃K⦄.
+/2 width=6 by sdsx_inv_push_aux/ qed-.
+
+fact sdsx_inv_unit_aux (h) (G):
+     ∀g,L. G ⊢ ⬈*[h,g] 𝐒⦃L⦄ →
+     ∀f,I,K. g = ↑f → L = K.ⓤ{I} → G ⊢ ⬈*[h,f] 𝐒⦃K⦄.
+#h #G #g #L * -g -L
+[ #f #g #J #L #_ #H destruct
+| #f #I #K #_ #g #J #L #H #_
+  elim (discr_push_next … H)
+| #f #I #K #HK #g #J #L #H1 #H2 destruct //
+| #f #I #K #V #_ #_ #g #J #L #_ #H destruct
+]
+qed-.
+
+lemma sdsx_inv_unit (h) (G):
+      ∀f,I,K. G ⊢ ⬈*[h,↑f] 𝐒⦃K.ⓤ{I}⦄ → G ⊢ ⬈*[h,f] 𝐒⦃K⦄.
+/2 width=6 by sdsx_inv_unit_aux/ qed-.
+
+fact sdsx_inv_pair_aux (h) (G):
+     ∀g,L. G ⊢ ⬈*[h,g] 𝐒⦃L⦄ →
+     ∀f,I,K,V. g = ↑f → L = K.ⓑ{I}V →
+     ∧∧ G ⊢ ⬈*[h,V] 𝐒⦃K⦄ & G ⊢ ⬈*[h,f] 𝐒⦃K⦄.
+#h #G #g #L * -g -L
+[ #f #g #J #L #W #_ #H destruct
+| #f #I #K #_ #g #J #L #W #H #_
+  elim (discr_push_next … H)
+| #f #I #K #_ #g #J #L #W #_ #H destruct
+| #f #I #K #V #HV #HK #g #J #L #W #H1 #H2 destruct
+  /2 width=1 by conj/
+]
+qed-.
+
+(* Basic_2A1: uses: lcosx_inv_pair *)
+lemma sdsx_inv_pair (h) (G):
+      ∀f,I,K,V. G ⊢ ⬈*[h,↑f] 𝐒⦃K.ⓑ{I}V⦄ →
+      ∧∧ G ⊢ ⬈*[h,V] 𝐒⦃K⦄ & G ⊢ ⬈*[h,f] 𝐒⦃K⦄.
+/2 width=6 by sdsx_inv_pair_aux/ qed-.
+
+(* Advanced inversion lemmas ************************************************)
+
+lemma sdsx_inv_pair_gen (h) (G):
+      ∀g,I,K,V. G ⊢ ⬈*[h,g] 𝐒⦃K.ⓑ{I}V⦄ →
+      ∨∨ ∃∃f. G ⊢ ⬈*[h,f] 𝐒⦃K⦄ & g = ⫯f
+       | ∃∃f. G ⊢ ⬈*[h,V] 𝐒⦃K⦄ & G ⊢ ⬈*[h,f] 𝐒⦃K⦄ & g = ↑f.
+#h #G #g #I #K #V #H
+elim (pn_split g) * #f #Hf destruct
+[ lapply (sdsx_inv_push … H) -H /3 width=3 by ex2_intro, or_introl/
+| elim (sdsx_inv_pair … H) -H /3 width=3 by ex3_intro, or_intror/
+]
+qed-.
+
+(* Advanced forward lemmas **************************************************)
+
+lemma sdsx_fwd_bind (h) (G):
+      ∀g,I,K. G ⊢ ⬈*[h,g] 𝐒⦃K.ⓘ{I}⦄ → G ⊢ ⬈*[h,⫱g] 𝐒⦃K⦄.
+#h #G #g #I #K
+elim (pn_split g) * #f #Hf destruct
+[ #H lapply (sdsx_inv_push … H) -H //
+| cases I -I #I
+  [ #H lapply (sdsx_inv_unit … H) -H //
+  | #V #H elim (sdsx_inv_pair … H) -H //
+  ]
+]
+qed-.
+
+(* Basic properties *********************************************************)
+
+lemma sdsx_eq_repl_back (h) (G):
+      ∀L. eq_repl_back … (λf. G ⊢ ⬈*[h,f] 𝐒⦃L⦄).
+#h #G #L #f1 #H elim H -L -f1
+[ //
+| #f1 #I #L #_ #IH #x2 #H
+  elim (eq_inv_px … H) -H /3 width=3 by sdsx_push/
+| #f1 #I #L #_ #IH #x2 #H
+  elim (eq_inv_nx … H) -H /3 width=3 by sdsx_unit/
+| #f1 #I #L #V #HV #_ #IH #x2 #H
+  elim (eq_inv_nx … H) -H /3 width=3 by sdsx_pair/
+]
+qed-.
+
+lemma sdsx_eq_repl_fwd (h) (G):
+      ∀L. eq_repl_fwd … (λf. G ⊢ ⬈*[h,f] 𝐒⦃L⦄).
+#h #G #L @eq_repl_sym /2 width=3 by sdsx_eq_repl_back/
+qed-.
+
+(* Advanced properties ******************************************************)
+
+(* Basic_2A1: uses: lcosx_O *)
+lemma sdsx_isid (h) (G):
+      ∀f. 𝐈⦃f⦄ → ∀L. G ⊢ ⬈*[h,f] 𝐒⦃L⦄.
+#h #G #f #Hf #L elim L -L
+/3 width=3 by sdsx_eq_repl_back, sdsx_push, eq_push_inv_isid/
+qed.
+
+(* Basic_2A1: removed theorems 2:
+              lcosx_drop_trans_lt lcosx_inv_succ
+*)
diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/sdsx/sdsx_rdsx.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/sdsx/sdsx_rdsx.etc
new file mode 100644 (file)
index 0000000..9c2c7d5
--- /dev/null
@@ -0,0 +1,94 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "static_2/relocation/scl.ma".
+include "basic_2/rt_computation/rdsx_drops.ma".
+include "basic_2/rt_computation/rdsx_lpxs.ma".
+include "basic_2/rt_computation/sdsx.ma".
+
+axiom pippo (h) (f) (G) (V:term):
+      ∀L1. G ⊢ ⬈*[h,V] 𝐒⦃L1⦄ →
+      ∀L2. L1 ⊐ⓧ[f] L2 → G ⊢ ⬈*[h,V] 𝐒⦃L2⦄.
+
+
+(* STRONGLY NORMALIZING SELECTED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******)
+
+(* Properties with strongly normalizing referred local environments *********)
+
+(* Basic_2A1: uses: lsx_cpx_trans_lcosx *)
+lemma rdsx_cpx_trans_sdsx (h):
+      ∀G,L0,T1,T2. ⦃G,L0⦄ ⊢ T1 ⬈[h] T2 →
+      ∀f. G ⊢ ⬈*[h,f] 𝐒⦃L0⦄ → ∀L. L0 ⊐ⓧ[f] L →
+      G ⊢ ⬈*[h,T1] 𝐒⦃L⦄ → G ⊢ ⬈*[h,T2] 𝐒⦃L⦄.
+#h #G #L0 #T1 #T2 #H @(cpx_ind … H) -G -L0 -T1 -T2
+[ //
+| //
+| #I #G #K0 #V1 #V2 #W2 #_ #IH #HVW2 #g #H1 #Y #H2 #H3
+  elim (sdsx_inv_pair_gen … H1) -H1 *
+  [ #f #HK0 #H destruct
+    elim (scl_inv_push_sn … H2) -H2 #K #HK #H destruct
+    /4 width=8 by rdsx_lifts, rdsx_fwd_pair, drops_refl, drops_drop/
+  | #f #HV1 #HK0 #H destruct
+    elim (scl_inv_next_sn … H2) -H2 #K #HK #H destruct
+    /4 width=8 by pippo, rdsx_lifts, drops_refl, drops_drop/
+  ]
+| #I0 #G #K0 #T #U #i #_ #IH #HTU #g #H1 #Y #H2 #H3
+  lapply (sdsx_fwd_bind … H1) -H1 #HK0
+  elim (scl_fwd_bind_sn … H2) -H2 #I #K #HK #H destruct
+  /6 width=8 by rdsx_inv_lifts, rdsx_lifts, drops_refl, drops_drop/
+| #p #I #G #L0 #V1 #V2 #T1 #T2 #_ #_ #IHV12 #IHT12 #f #H1 #L #H2 #H3
+  elim (rdsx_inv_bind_void … H3) -H3 #HV1 #HT1
+  @rdsx_bind_void
+  [ /2 width=3 by/
+  | @(IHT12 (↑f) … HT1) 
+    [ @(sdsx_pair … H1) 
+    | /2 width=1 by scl_next/
+  
+  /4 width=2 by lsubsx_pair, rdsx_bind_void/
+| #I0 #G #L0 #V1 #V2 #T1 #T2 #_ #_ #IHV12 #IHT12 #f #L #HL0 #HL
+  elim (rdsx_inv_flat … HL) -HL /3 width=2 by rdsx_flat/
+| #G #L0 #V #U1 #T1 #T2 #HTU1 #_ #IHT12 #f #L #HL0 #HL
+  elim (rdsx_inv_bind … HL) -HL #HV #HU1
+  /5 width=8 by rdsx_inv_lifts, drops_refl, drops_drop/
+| #G #L0 #V #T1 #T2 #_ #IHT12 #f #L #HL0 #HL
+  elim (rdsx_inv_flat … HL) -HL /2 width=2 by/
+| #G #L0 #V1 #V2 #T #_ #IHV12 #f #L #HL0 #HL
+  elim (rdsx_inv_flat … HL) -HL /2 width=2 by/
+| #p #G #L0 #V1 #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #IHV12 #IHW12 #IHT12 #f #L #HL0 #HL
+  elim (rdsx_inv_flat … HL) -HL #HV1 #HL
+  elim (rdsx_inv_bind … HL) -HL #HW1 #HT1
+  /4 width=2 by lsubsx_pair, rdsx_bind_void, rdsx_flat/
+| #p #G #L0 #V1 #V2 #U2 #W1 #W2 #T1 #T2 #_ #_ #_ #IHV12 #IHW12 #IHT12 #HVU2 #f #L #HL0 #HL
+  elim (rdsx_inv_flat … HL) -HL #HV1 #HL
+  elim (rdsx_inv_bind … HL) -HL #HW1 #HT1
+  /6 width=8 by lsubsx_pair, rdsx_lifts, rdsx_bind_void, rdsx_flat, drops_refl, drops_drop/
+]
+qed-.
+
+(* Advanced properties of strongly normalizing referred local environments **)
+
+(* Basic_2A1: uses: lsx_cpx_trans_O *)
+lemma rdsx_cpx_trans (h):
+      ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈[h] T2 →
+      G ⊢ ⬈*[h,T1] 𝐒⦃L⦄ → G ⊢ ⬈*[h,T2] 𝐒⦃L⦄.
+/3 width=6 by rdsx_cpx_trans_lsubsx, lsubsx_refl/ qed-.
+
+lemma rdsx_cpxs_trans (h):
+      ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 →
+      G ⊢ ⬈*[h,T1] 𝐒⦃L⦄ → G ⊢ ⬈*[h,T2] 𝐒⦃L⦄.
+#h #G #L #T1 #T2 #H
+@(cpxs_ind_dx ???????? H) -T1 //
+/3 width=3 by rdsx_cpx_trans/
+qed-.
+*)
diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/lsubeqx_5.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/lsubeqx_5.ma
deleted file mode 100644 (file)
index 958ca60..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-(**************************************************************************)
-(*       ___                                                              *)
-(*      ||M||                                                             *)
-(*      ||A||       A project by Andrea Asperti                           *)
-(*      ||T||                                                             *)
-(*      ||I||       Developers:                                           *)
-(*      ||T||         The HELM team.                                      *)
-(*      ||A||         http://helm.cs.unibo.it                             *)
-(*      \   /                                                             *)
-(*       \ /        This file is distributed under the terms of the       *)
-(*        v         GNU General Public License Version 2                  *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-
-notation "hvbox( G ⊢ break term 46 L1 ⊆ⓧ [ break term 46 h, break term 46 f ] break term 46 L2 )"
-   non associative with precedence 45
-   for @{ 'LSubEqX $h $f $G $L1 $L2 }.
diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/topredtysnstrong_5.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/topredtysnstrong_5.ma
new file mode 100644 (file)
index 0000000..a8ae479
--- /dev/null
@@ -0,0 +1,19 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
+
+notation "hvbox( G ⊢ break term 46 L1 ⊒[ break term 46 h, break term 46 f ] break term 46 L2 )"
+   non associative with precedence 45
+   for @{ 'ToPRedTySNStrong $h $f $G $L1 $L2 }.
index baa4aa7f9d7abb833e1347aab065e2d12dbf6a39..5a0471b2a0e6def262d0a70cba5f4e9d0bc2e556 100644 (file)
@@ -36,7 +36,7 @@ lemma cpms_fpbg_trans (h) (n):
 /3 width=5 by fpbs_fpbg_trans, cpms_fwd_fpbs/ qed-.
 
 lemma fqup_cpms_fwd_fpbg (h):
-      â\88\80G1,G2,L1,L2,T1,T. â¦\83G1,L1,T1â¦\84 â\8a\90+ ⦃G2,L2,T⦄ →
+      â\88\80G1,G2,L1,L2,T1,T. â¦\83G1,L1,T1â¦\84 â¬\82+ ⦃G2,L2,T⦄ →
       ∀n,T2. ⦃G2,L2⦄ ⊢ T ➡*[n,h] T2 → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄.
 /3 width=5 by cpms_fwd_fpbs, fqup_fpbg, fpbg_fpbs_trans/ qed-.
 
index 5fc7879fe914ec680979067d24a43228a8124395..eb8e6748ac386f51411fddb8c9dc00ecd1bae6ab 100644 (file)
@@ -22,32 +22,32 @@ include "basic_2/rt_computation/cpxs_cpxs.ma".
 (* Properties on supclosure *************************************************)
 
 lemma fqu_cpxs_trans: ∀h,b,G1,G2,L1,L2,T2,U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 →
-                      â\88\80T1. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
-                      â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & â¦\83G1,L1,U1â¦\84 â\8a\90[b] ⦃G2,L2,U2⦄.
+                      â\88\80T1. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
+                      â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & â¦\83G1,L1,U1â¦\84 â¬\82[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/
 #T #T2 #HT2 #_ #IHTU2 #T1 #HT1 elim (fqu_cpx_trans … HT1 … HT2) -T
 #T #HT1 #HT2 elim (IHTU2 … HT2) -T2 /3 width=3 by cpxs_strap2, ex2_intro/
 qed-.
 
 lemma fquq_cpxs_trans: ∀h,b,G1,G2,L1,L2,T2,U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 →
-                       â\88\80T1. â¦\83G1,L1,T1â¦\84 â\8a\90⸮[b] ⦃G2,L2,T2⦄ →
-                       â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & â¦\83G1,L1,U1â¦\84 â\8a\90⸮[b] ⦃G2,L2,U2⦄.
+                       â\88\80T1. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] ⦃G2,L2,T2⦄ →
+                       â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & â¦\83G1,L1,U1â¦\84 â¬\82⸮[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/
 #T #T2 #HT2 #_ #IHTU2 #T1 #HT1 elim (fquq_cpx_trans … HT1 … HT2) -T
 #T #HT1 #HT2 elim (IHTU2 … HT2) -T2 /3 width=3 by cpxs_strap2, ex2_intro/
 qed-.
 
 lemma fqup_cpxs_trans: ∀h,b,G1,G2,L1,L2,T2,U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 →
-                       â\88\80T1. â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄ →
-                       â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & â¦\83G1,L1,U1â¦\84 â\8a\90+[b] ⦃G2,L2,U2⦄.
+                       â\88\80T1. â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄ →
+                       â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & â¦\83G1,L1,U1â¦\84 â¬\82+[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/
 #T #T2 #HT2 #_ #IHTU2 #T1 #HT1 elim (fqup_cpx_trans … HT1 … HT2) -T
 #U1 #HTU1 #H2 elim (IHTU2 … H2) -T2 /3 width=3 by cpxs_strap2, ex2_intro/
 qed-.
 
 lemma fqus_cpxs_trans: ∀h,b,G1,G2,L1,L2,T2,U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 →
-                       â\88\80T1. â¦\83G1,L1,T1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
-                       â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & â¦\83G1,L1,U1â¦\84 â\8a\90*[b] ⦃G2,L2,U2⦄.
+                       â\88\80T1. â¦\83G1,L1,T1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
+                       â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & â¦\83G1,L1,U1â¦\84 â¬\82*[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/
 #T #T2 #HT2 #_ #IHTU2 #T1 #HT1 elim (fqus_cpx_trans … HT1 … HT2) -T
 #U1 #HTU1 #H2 elim (IHTU2 … H2) -T2 /3 width=3 by cpxs_strap2, ex2_intro/
@@ -55,9 +55,9 @@ qed-.
 
 (* Note: a proof based on fqu_cpx_trans_tdneq might exist *)
 (* Basic_2A1: uses: fqu_cpxs_trans_neq *)
-lemma fqu_cpxs_trans_tdneq: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma fqu_cpxs_trans_tdneq: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                             ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) →
-                            â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â\8a\90[b] ⦃G2,L2,U2⦄.
+                            â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â¬\82[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
 [ #I #G #L #V1 #V2 #HV12 #_ elim (lifts_total V2 𝐔❴1❵)
   #U2 #HVU2 @(ex3_intro … U2)
@@ -69,7 +69,7 @@ lemma fqu_cpxs_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐[b] ⦃G
   [1,3: /2 width=4 by fqu_pair_sn, cpxs_pair_sn/
   | #H elim (tdeq_inv_pair … H) -H /2 width=1 by/
   ]
-| #p #I #G #L #V #T1 #T2 #HT12 #H0 @(ex3_intro … (ⓑ{p,I}V.T2))
+| #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ{p,I}V.T2))
   [1,3: /2 width=4 by fqu_bind_dx, cpxs_bind/
   | #H elim (tdeq_inv_pair … H) -H /2 width=1 by/
   ]
@@ -88,9 +88,9 @@ lemma fqu_cpxs_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐[b] ⦃G
 qed-.
 
 (* Basic_2A1: uses: fquq_cpxs_trans_neq *)
-lemma fquq_cpxs_trans_tdneq: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90⸮[b] ⦃G2,L2,T2⦄ →
+lemma fquq_cpxs_trans_tdneq: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] ⦃G2,L2,T2⦄ →
                              ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) →
-                             â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â\8a\90⸮[b] ⦃G2,L2,U2⦄.
+                             â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â¬\82⸮[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 elim H12 -H12
 [ #H12 #U2 #HTU2 #H elim (fqu_cpxs_trans_tdneq … H12 … HTU2 H) -T2
   /3 width=4 by fqu_fquq, ex3_intro/
@@ -99,9 +99,9 @@ lemma fquq_cpxs_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐⸮[b]
 qed-.
 
 (* Basic_2A1: uses: fqup_cpxs_trans_neq *)
-lemma fqup_cpxs_trans_tdneq: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄ →
+lemma fqup_cpxs_trans_tdneq: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄ →
                              ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) →
-                             â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â\8a\90+[b] ⦃G2,L2,U2⦄.
+                             â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â¬\82+[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1
 [ #G1 #L1 #T1 #H12 #U2 #HTU2 #H elim (fqu_cpxs_trans_tdneq … H12 … HTU2 H) -T2
   /3 width=4 by fqu_fqup, ex3_intro/
@@ -112,9 +112,9 @@ lemma fqup_cpxs_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐+[b] 
 qed-.
 
 (* Basic_2A1: uses: fqus_cpxs_trans_neq *)
-lemma fqus_cpxs_trans_tdneq: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
+lemma fqus_cpxs_trans_tdneq: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
                              ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) →
-                             â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â\8a\90*[b] ⦃G2,L2,U2⦄.
+                             â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â¬\82*[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fqus_inv_fqup … H12) -H12
 [ #H12 elim (fqup_cpxs_trans_tdneq … H12 … HTU2 H) -T2
   /3 width=4 by fqup_fqus, ex3_intro/
index dbefb4db53b75f3496b5ccdc02d42c3f8734a658..599e41a203e90fede89e156c7f71bee5b3979c7e 100644 (file)
@@ -57,9 +57,9 @@ lemma cpxs_bind2_dx: ∀h,G,L,V1,V2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 →
 (* Properties with plus-iterated structural successor for closures **********)
 
 (* Basic_2A1: uses: lpx_fqup_trans *)
-lemma lpx_fqup_trans: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄ →
+lemma lpx_fqup_trans: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄ →
                       ∀K1. ⦃G1,K1⦄ ⊢ ⬈[h] L1 →
-                      â\88\83â\88\83K2,T. â¦\83G1,K1â¦\84 â\8a¢ T1 â¬\88*[h] T & â¦\83G1,K1,Tâ¦\84 â\8a\90+[b] ⦃G2,K2,T2⦄ & ⦃G2,K2⦄ ⊢ ⬈[h] L2.
+                      â\88\83â\88\83K2,T. â¦\83G1,K1â¦\84 â\8a¢ T1 â¬\88*[h] T & â¦\83G1,K1,Tâ¦\84 â¬\82+[b] ⦃G2,K2,T2⦄ & ⦃G2,K2⦄ ⊢ ⬈[h] L2.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
 [ #G2 #L2 #T2 #H12 #K1 #HKL1 elim (lpx_fqu_trans … H12 … HKL1) -L1
   /3 width=5 by cpx_cpxs, fqu_fqup, ex3_2_intro/
@@ -73,9 +73,9 @@ qed-.
 (* Properties with star-iterated structural successor for closures **********)
 
 (* Basic_2A1: uses: lpx_fqus_trans *)
-lemma lpx_fqus_trans: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
+lemma lpx_fqus_trans: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
                       ∀K1. ⦃G1,K1⦄ ⊢ ⬈[h] L1 →
-                      â\88\83â\88\83K2,T. â¦\83G1,K1â¦\84 â\8a¢ T1 â¬\88*[h] T & â¦\83G1,K1,Tâ¦\84 â\8a\90*[b] ⦃G2,K2,T2⦄ & ⦃G2,K2⦄ ⊢ ⬈[h] L2.
+                      â\88\83â\88\83K2,T. â¦\83G1,K1â¦\84 â\8a¢ T1 â¬\88*[h] T & â¦\83G1,K1,Tâ¦\84 â¬\82*[b] ⦃G2,K2,T2⦄ & ⦃G2,K2⦄ ⊢ ⬈[h] L2.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #HKL1 elim (fqus_inv_fqup … H) -H
 [ #H12 elim (lpx_fqup_trans … H12 … HKL1) -L1 /3 width=5 by fqup_fqus, ex3_2_intro/
 | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
index 03ae7cc3797aa2fc3bbd0c1b67014159bbb28141..acef276fa2851d4a9691671a0e068afa62c45fae 100644 (file)
@@ -19,7 +19,7 @@ include "basic_2/rt_computation/csx_lsubr.ma".
 
 (* Properties with extended supclosure **************************************)
 
-lemma csx_fqu_conf: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma csx_fqu_conf: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                     ⦃G1,L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ⦃G2,L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
 [ /3 width=5 by csx_inv_lref_pair, drops_refl/
@@ -31,19 +31,19 @@ lemma csx_fqu_conf: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐[b] ⦃G2,L2,T2
 ]
 qed-.
 
-lemma csx_fquq_conf: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90⸮[b] ⦃G2,L2,T2⦄ →
+lemma csx_fquq_conf: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] ⦃G2,L2,T2⦄ →
                      ⦃G1,L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ⦃G2,L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 * /2 width=6 by csx_fqu_conf/
 * #HG #HL #HT destruct //
 qed-.
 
-lemma csx_fqup_conf: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄ →
+lemma csx_fqup_conf: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄ →
                      ⦃G1,L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ⦃G2,L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
 /3 width=6 by csx_fqu_conf/
 qed-.
 
-lemma csx_fqus_conf: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
+lemma csx_fqus_conf: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
                      ⦃G1,L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ⦃G2,L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -H
 /3 width=6 by csx_fquq_conf/
index 2c2f375f2bc141e0607f445ddb2f08fdbb584c8b..b14847da03a338bfb3bda7ebad945b551e82f4fd 100644 (file)
@@ -39,7 +39,7 @@ lemma fpbg_fpbq_trans: ∀h,G1,G,G2,L1,L,L2,T1,T,T2.
 qed-.
 
 lemma fpbg_fqu_trans (h): ∀G1,G,G2,L1,L,L2,T1,T,T2.
-                          â¦\83G1,L1,T1â¦\84 >[h] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â\8a\90 ⦃G2,L2,T2⦄ →
+                          â¦\83G1,L1,T1â¦\84 >[h] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82 ⦃G2,L2,T2⦄ →
                           ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄.
 #h #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2
 /4 width=5 by fpbg_fpbq_trans, fpbq_fquq, fqu_fquq/
index 1eb2d110b1259982fba99fad882b89410b58f40e..e80960d047dc8f3d91cfda9c1e6469d025c31de2 100644 (file)
@@ -64,7 +64,7 @@ qed-.
 (* Advanced properties with plus-iterated structural successor for closures *)
 
 lemma fqup_fpbg_trans (h):
-      â\88\80G1,G,L1,L,T1,T. â¦\83G1,L1,T1â¦\84 â\8a\90+ ⦃G,L,T⦄ →
+      â\88\80G1,G,L1,L,T1,T. â¦\83G1,L1,T1â¦\84 â¬\82+ ⦃G,L,T⦄ →
       ∀G2,L2,T2. ⦃G,L,T⦄ >[h] ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄.
 /3 width=5 by fpbs_fpbg_trans, fqup_fpbs/ qed-.
 
index 9e40865afc4e6734b11ca9e22b2463f77736c1ca..746aa695379d1a84b61276a50fb48f9a893b6f06 100644 (file)
@@ -26,7 +26,7 @@ lemma fpbg_tdeq_div: ∀h,G1,G2,L1,L2,T1,T. ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T⦄ 
 (* Properties with plus-iterated structural successor for closures **********)
 
 (* Note: this is used in the closure proof *)
-lemma fqup_fpbg: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90+ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄.
+lemma fqup_fpbg: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82+ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄.
 #h #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fqup_inv_step_sn … H) -H
 /3 width=5 by fqus_fpbs, fpb_fqu, ex2_3_intro/
 qed.
index f995181c32a98664b5acbd344f3a6999dd0f4b53..ec1d680a817ab4e0885d70996a825db685531cce 100644 (file)
@@ -48,11 +48,11 @@ lemma cpxs_tdeq_fpbs: ∀h,G,L,T1,T. ⦃G,L⦄ ⊢ T1 ⬈*[h] T →
 (* Properties with star-iterated structural successor for closures **********)
 
 lemma cpxs_fqus_fpbs: ∀h,G1,L1,T1,T. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T →
-                      â\88\80G2,L2,T2. â¦\83G1,L1,Tâ¦\84 â\8a\90* ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄.
+                      â\88\80G2,L2,T2. â¦\83G1,L1,Tâ¦\84 â¬\82* ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄.
 /3 width=5 by fpbs_fqus_trans, cpxs_fpbs/ qed.
 
 (* Properties with plus-iterated structural successor for closures **********)
 
 lemma cpxs_fqup_fpbs: ∀h,G1,L1,T1,T. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T →
-                      â\88\80G2,L2,T2. â¦\83G1,L1,Tâ¦\84 â\8a\90+ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄.
+                      â\88\80G2,L2,T2. â¦\83G1,L1,Tâ¦\84 â¬\82+ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄.
 /3 width=5 by fpbs_fqup_trans, cpxs_fpbs/ qed.
index ccb50f6245c60c2017f5494a70567fce1619eae0..4a970e58b3d769478556301c9b4521a63fb2a9a7 100644 (file)
@@ -30,16 +30,16 @@ lemma fpbs_tdeq_trans: ∀h,G1,G2,L1,L2,T1,T. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T
 
 (* Properties with plus-iterated structural successor for closures **********)
 
-lemma fqup_fpbs: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90+ ⦃G2,L2,T2⦄ →
+lemma fqup_fpbs: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82+ ⦃G2,L2,T2⦄ →
                  ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄.
 #h #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 
 /4 width=5 by fqu_fquq, fpbq_fquq, tri_step/
 qed.
 
 lemma fpbs_fqup_trans: ∀h,G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ≥[h] ⦃G,L,T⦄ →
-                       â\88\80G2,L2,T2. â¦\83G,L,Tâ¦\84 â\8a\90+ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄.
+                       â\88\80G2,L2,T2. â¦\83G,L,Tâ¦\84 â¬\82+ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄.
 /3 width=5 by fpbs_fqus_trans, fqup_fqus/ qed-.
 
 lemma fqup_fpbs_trans: ∀h,G,G2,L,L2,T,T2. ⦃G,L,T⦄ ≥[h] ⦃G2,L2,T2⦄ →
-                       â\88\80G1,L1,T1. â¦\83G1,L1,T1â¦\84 â\8a\90+ ⦃G,L,T⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄.
+                       â\88\80G1,L1,T1. â¦\83G1,L1,T1â¦\84 â¬\82+ ⦃G,L,T⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄.
 /3 width=5 by fqus_fpbs_trans, fqup_fqus/ qed-.
index c869f3d9ff79de242926da0abcbf85a75c99cebc..3f1e06fabc2f9fc698938781bfe6b36bd619e330 100644 (file)
@@ -19,20 +19,20 @@ include "basic_2/rt_computation/fpbs.ma".
 
 (* Properties with star-iterated structural successor for closures **********)
 
-lemma fqus_fpbs: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90* ⦃G2,L2,T2⦄ →
+lemma fqus_fpbs: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82* ⦃G2,L2,T2⦄ →
                  ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄.
 #h #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -G2 -L2 -T2
 /3 width=5 by fpbq_fquq, tri_step/
 qed.
 
 lemma fpbs_fqus_trans: ∀h,G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ≥[h] ⦃G,L,T⦄ →
-                       â\88\80G2,L2,T2. â¦\83G,L,Tâ¦\84 â\8a\90* ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄.
+                       â\88\80G2,L2,T2. â¦\83G,L,Tâ¦\84 â¬\82* ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄.
 #h #G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H @(fqus_ind … H) -G2 -L2 -T2
 /3 width=5 by fpbs_strap1, fpbq_fquq/
 qed-.
 
 lemma fqus_fpbs_trans: ∀h,G,G2,L,L2,T,T2. ⦃G,L,T⦄ ≥[h] ⦃G2,L2,T2⦄ →
-                       â\88\80G1,L1,T1. â¦\83G1,L1,T1â¦\84 â\8a\90* ⦃G,L,T⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄.
+                       â\88\80G1,L1,T1. â¦\83G1,L1,T1â¦\84 â¬\82* ⦃G,L,T⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄.
 #h #G #G2 #L #L2 #T #T2 #H1 #G1 #L1 #T1 #H @(fqus_ind_dx … H) -G1 -L1 -T1
 /3 width=5 by fpbs_strap2, fpbq_fquq/
 qed-.
index 07df0c6245afb41534f18f6407593caacc5c3dfc..d3b96eb96795631c9fe2352629abeae1c13eeb9f 100644 (file)
@@ -51,20 +51,20 @@ lemma fpbs_lpx_trans: ∀h,G1,G2,L1,L,T1,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L,T2⦄
 
 (* Properties with star-iterated structural successor for closures **********)
 
-lemma fqus_lpxs_fpbs: â\88\80h,G1,G2,L1,L,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90* ⦃G2,L,T2⦄ →
+lemma fqus_lpxs_fpbs: â\88\80h,G1,G2,L1,L,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82* ⦃G2,L,T2⦄ →
                       ∀L2. ⦃G2,L⦄ ⊢ ⬈*[h] L2 → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄.
 /3 width=3 by fpbs_lpxs_trans, fqus_fpbs/ qed.
 
 (* Properties with unbound context-sensitive parallel rt-computation ********)
 
 lemma cpxs_fqus_lpxs_fpbs: ∀h,G1,L1,T1,T. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T →
-                           â\88\80G2,L,T2. â¦\83G1,L1,Tâ¦\84 â\8a\90* ⦃G2,L,T2⦄ →
+                           â\88\80G2,L,T2. â¦\83G1,L1,Tâ¦\84 â¬\82* ⦃G2,L,T2⦄ →
                            ∀L2.⦃G2,L⦄ ⊢ ⬈*[h] L2 → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄.
 /3 width=5 by cpxs_fqus_fpbs, fpbs_lpxs_trans/ qed.
 
 lemma fpbs_cpxs_tdeq_fqup_lpx_trans: ∀h,G1,G3,L1,L3,T1,T3. ⦃G1,L1,T1⦄ ≥ [h] ⦃G3,L3,T3⦄ →
                                      ∀T4. ⦃G3,L3⦄ ⊢ T3 ⬈*[h] T4 → ∀T5. T4 ≛ T5 →
-                                     â\88\80G2,L4,T2. â¦\83G3,L3,T5â¦\84 â\8a\90+ ⦃G2,L4,T2⦄ →
+                                     â\88\80G2,L4,T2. â¦\83G3,L3,T5â¦\84 â¬\82+ ⦃G2,L4,T2⦄ →
                                      ∀L2. ⦃G2,L4⦄ ⊢ ⬈[h] L2 → ⦃G1,L1,T1⦄ ≥ [h] ⦃G2,L2,T2⦄.
 #h #G1 #G3 #L1 #L3 #T1 #T3 #H13 #T4 #HT34 #T5 #HT45 #G2 #L4 #T2 #H34 #L2 #HL42  
 @(fpbs_lpx_trans … HL42) -L2 (**) (* full auto too slow *)
@@ -76,7 +76,7 @@ qed-.
 
 (* Basic_2A1: uses: fpbs_intro_alt *)
 lemma fpbs_intro_star: ∀h,G1,L1,T1,T. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T →
-                       â\88\80G,L,T0. â¦\83G1,L1,Tâ¦\84 â\8a\90* ⦃G,L,T0⦄ →
+                       â\88\80G,L,T0. â¦\83G1,L1,Tâ¦\84 â¬\82* ⦃G,L,T0⦄ →
                        ∀L0. ⦃G,L⦄ ⊢ ⬈*[h] L0 →
                        ∀G2,L2,T2. ⦃G,L0,T0⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄ .
 /3 width=5 by cpxs_fqus_lpxs_fpbs, fpbs_strap1, fpbq_fdeq/ qed.
@@ -85,7 +85,7 @@ lemma fpbs_intro_star: ∀h,G1,L1,T1,T. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T →
 
 (* Basic_2A1: uses: fpbs_inv_alt *)
 lemma fpbs_inv_star: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄ →
-                     â\88\83â\88\83G,L,L0,T,T0. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] T & â¦\83G1,L1,Tâ¦\84 â\8a\90* ⦃G,L,T0⦄
+                     â\88\83â\88\83G,L,L0,T,T0. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] T & â¦\83G1,L1,Tâ¦\84 â¬\82* ⦃G,L,T0⦄
                                   & ⦃G,L⦄ ⊢ ⬈*[h] L0 & ⦃G,L0,T0⦄ ≛ ⦃G2,L2,T2⦄.
 #h #G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind_dx … H) -G1 -L1 -T1
 [ /2 width=9 by ex4_5_intro/
index 83d407f7533059f1fddedb323fda10c58ae325d7..de36632c3bc8c77fe54a1861beee440ae471f858 100644 (file)
@@ -12,7 +12,7 @@
 (*                                                                        *)
 (**************************************************************************)
 
-include "basic_2/rt_computation/rdsx_csx.ma".
+include "basic_2/rt_computation/rsx_csx.ma".
 include "basic_2/rt_computation/fpbs_cpx.ma".
 include "basic_2/rt_computation/fpbs_csx.ma".
 include "basic_2/rt_computation/fsb_fpbg.ma".
@@ -34,7 +34,7 @@ lemma csx_fsb_fpbs: ∀h,G1,L1,T1. ⦃G1,L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ →
 #G0 #L0 #T0 #IHu #H10 
 lapply (fpbs_csx_conf … H10) // -HT1 #HT0
 generalize in match IHu; -IHu generalize in match H10; -H10
-@(rdsx_ind … (csx_rdsx … HT0)) -L0
+@(rsx_ind … (csx_rsx … HT0)) -L0
 #L0 #_ #IHd #H10 #IHu @fsb_intro
 #G2 #L2 #T2 * -G2 -L2 -T2 [ -IHd -IHc | -IHu -IHd |  ]
 [ /4 width=5 by fpbs_fqup_trans, fqu_fqup/
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx.ma
new file mode 100644 (file)
index 0000000..94a1ec8
--- /dev/null
@@ -0,0 +1,164 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "basic_2/notation/relations/topredtysnstrong_5.ma".
+include "basic_2/rt_computation/rsx.ma".
+
+(* COMPATIBILITY OF STRONG NORMALIZATION FOR UNBOUND RT-TRANSITION **********)
+
+(* Note: this should be an instance of a more general sex *)
+(* Basic_2A1: uses: lcosx *)
+inductive jsx (h) (G): rtmap → relation lenv ≝
+| jsx_atom: ∀f. jsx h G f (⋆) (⋆)
+| jsx_push: ∀f,I,K1,K2. jsx h G f K1 K2 →
+               jsx h G (⫯f) (K1.ⓘ{I}) (K2.ⓘ{I})
+| jsx_unit: ∀f,I,K1,K2. jsx h G f K1 K2 →
+               jsx h G (↑f) (K1.ⓤ{I}) (K2.ⓧ)
+| jsx_pair: ∀f,I,K1,K2,V. G ⊢ ⬈*[h,V] 𝐒⦃K2⦄ →
+               jsx h G f K1 K2 → jsx h G (↑f) (K1.ⓑ{I}V) (K2.ⓧ)
+.
+
+interpretation
+  "strong normalization for unbound parallel rt-transition (compatibility)"
+  'ToPRedTySNStrong h f G L1 L2 = (jsx h G f L1 L2).
+
+(* Basic inversion lemmas ***************************************************)
+
+fact jsx_inv_atom_sn_aux (h) (G):
+     ∀g,L1,L2. G ⊢ L1 ⊒[h,g] L2 → L1 = ⋆ → L2 = ⋆.
+#h #G #g #L1 #L2 * -g -L1 -L2 //
+[ #f #I #K1 #K2 #_ #H destruct
+| #f #I #K1 #K2 #_ #H destruct
+| #f #I #K1 #K2 #V #_ #_ #H destruct
+]
+qed-.
+
+lemma jsx_inv_atom_sn (h) (G): ∀g,L2. G ⊢ ⋆ ⊒[h,g] L2 → L2 = ⋆.
+/2 width=7 by jsx_inv_atom_sn_aux/ qed-.
+
+fact jsx_inv_push_sn_aux (h) (G):
+     ∀g,L1,L2. G ⊢ L1 ⊒[h,g] L2 →
+     ∀f,I,K1. g = ⫯f → L1 = K1.ⓘ{I} →
+     ∃∃K2. G ⊢ K1 ⊒[h,f] K2 & L2 = K2.ⓘ{I}.
+#h #G #g #L1 #L2 * -g -L1 -L2
+[ #f #g #J #L1 #_ #H destruct
+| #f #I #K1 #K2 #HK12 #g #J #L1 #H1 #H2 destruct
+  <(injective_push … H1) -g /2 width=3 by ex2_intro/
+| #f #I #K1 #K2 #_ #g #J #L1 #H
+  elim (discr_next_push … H)
+| #f #I #K1 #K2 #V #_ #_ #g #J #L1 #H
+  elim (discr_next_push … H)
+]
+qed-.
+
+lemma jsx_inv_push_sn (h) (G):
+      ∀f,I,K1,L2. G ⊢ K1.ⓘ{I} ⊒[h,⫯f] L2 →
+      ∃∃K2. G ⊢ K1 ⊒[h,f] K2 & L2 = K2.ⓘ{I}.
+/2 width=5 by jsx_inv_push_sn_aux/ qed-.
+
+fact jsx_inv_unit_sn_aux (h) (G):
+     ∀g,L1,L2. G ⊢ L1 ⊒[h,g] L2 →
+     ∀f,I,K1. g = ↑f → L1 = K1.ⓤ{I} →
+     ∃∃K2. G ⊢ K1 ⊒[h,f] K2 & L2 = K2.ⓧ.
+#h #G #g #L1 #L2 * -g -L1 -L2
+[ #f #g #J #L1 #_ #H destruct
+| #f #I #K1 #K2 #_ #g #J #L1 #H
+  elim (discr_push_next … H)
+| #f #I #K1 #K2 #HK12 #g #J #L1 #H1 #H2 destruct
+  <(injective_next … H1) -g /2 width=3 by ex2_intro/
+| #f #I #K1 #K2 #V #_ #_ #g #J #L1 #_ #H destruct
+]
+qed-.
+
+lemma jsx_inv_unit_sn (h) (G):
+      ∀f,I,K1,L2. G ⊢ K1.ⓤ{I} ⊒[h,↑f] L2 →
+      ∃∃K2. G ⊢ K1 ⊒[h,f] K2 & L2 = K2.ⓧ.
+/2 width=6 by jsx_inv_unit_sn_aux/ qed-.
+
+fact jsx_inv_pair_sn_aux (h) (G):
+     ∀g,L1,L2. G ⊢ L1 ⊒[h,g] L2 →
+     ∀f,I,K1,V. g = ↑f → L1 = K1.ⓑ{I}V →
+     ∃∃K2. G ⊢ ⬈*[h,V] 𝐒⦃K2⦄  & G ⊢ K1 ⊒[h,f] K2 & L2 = K2.ⓧ.
+#h #G #g #L1 #L2 * -g -L1 -L2
+[ #f #g #J #L1 #W #_ #H destruct
+| #f #I #K1 #K2 #_ #g #J #L1 #W #H
+  elim (discr_push_next … H)
+| #f #I #K1 #K2 #_ #g #J #L1 #W #_ #H destruct
+| #f #I #K1 #K2 #V #HV #HK12 #g #J #L1 #W #H1 #H2 destruct
+  <(injective_next … H1) -g /2 width=4 by ex3_intro/
+]
+qed-.
+
+(* Basic_2A1: uses: lcosx_inv_pair *)
+lemma jsx_inv_pair_sn (h) (G):
+      ∀f,I,K1,L2,V. G ⊢ K1.ⓑ{I}V ⊒[h,↑f] L2 →
+      ∃∃K2. G ⊢ ⬈*[h,V] 𝐒⦃K2⦄  & G ⊢ K1 ⊒[h,f] K2 & L2 = K2.ⓧ.
+/2 width=6 by jsx_inv_pair_sn_aux/ qed-.
+
+(* Advanced inversion lemmas ************************************************)
+
+lemma jsx_inv_pair_sn_gen (h) (G): ∀g,I,K1,L2,V. G ⊢ K1.ⓑ{I}V ⊒[h,g] L2 →
+      ∨∨ ∃∃f,K2. G ⊢ K1 ⊒[h,f] K2 & g = ⫯f & L2 = K2.ⓑ{I}V
+       | ∃∃f,K2. G ⊢ ⬈*[h,V] 𝐒⦃K2⦄  & G ⊢ K1 ⊒[h,f] K2 & g = ↑f & L2 = K2.ⓧ.
+#h #G #g #I #K1 #L2 #V #H
+elim (pn_split g) * #f #Hf destruct
+[ elim (jsx_inv_push_sn … H) -H /3 width=5 by ex3_2_intro, or_introl/
+| elim (jsx_inv_pair_sn … H) -H /3 width=6 by ex4_2_intro, or_intror/
+]
+qed-.
+
+(* Advanced forward lemmas **************************************************)
+
+lemma jsx_fwd_bind_sn (h) (G):
+      ∀g,I1,K1,L2. G ⊢ K1.ⓘ{I1} ⊒[h,g] L2 →
+      ∃∃I2,K2. G ⊢ K1 ⊒[h,⫱g] K2 & L2 = K2.ⓘ{I2}.
+#h #G #g #I1 #K1 #L2
+elim (pn_split g) * #f #Hf destruct
+[ #H elim (jsx_inv_push_sn … H) -H
+| cases I1 -I1 #I1
+  [ #H elim (jsx_inv_unit_sn … H) -H
+  | #V #H elim (jsx_inv_pair_sn … H) -H
+  ]
+]
+/2 width=4 by ex2_2_intro/
+qed-.
+
+(* Basic properties *********************************************************)
+
+lemma jsx_eq_repl_back (h) (G): ∀L1,L2. eq_repl_back … (λf. G ⊢ L1 ⊒[h,f] L2).
+#h #G #L1 #L2 #f1 #H elim H -L1 -L2 -f1 //
+[ #f #I #L1 #L2 #_ #IH #x #H
+  elim (eq_inv_px … H) -H /3 width=3 by jsx_push/
+| #f #I #L1 #L2 #_ #IH #x #H
+  elim (eq_inv_nx … H) -H /3 width=3 by jsx_unit/
+| #f #I #L1 #L2 #V #HV #_ #IH #x #H
+  elim (eq_inv_nx … H) -H /3 width=3 by jsx_pair/
+]
+qed-.
+
+lemma jsx_eq_repl_fwd (h) (G): ∀L1,L2. eq_repl_fwd … (λf. G ⊢ L1 ⊒[h,f] L2).
+#h #G #L1 #L2 @eq_repl_sym /2 width=3 by jsx_eq_repl_back/
+qed-.
+
+(* Advanced properties ******************************************************)
+
+(* Basic_2A1: uses: lcosx_O *)
+lemma jsx_refl (h) (G): ∀f. 𝐈⦃f⦄ → reflexive … (jsx h G f).
+#h #G #f #Hf #L elim L -L
+/3 width=3 by jsx_eq_repl_back, jsx_push, eq_push_inv_isid/
+qed.
+
+(* Basic_2A1: removed theorems 2:
+              lcosx_drop_trans_lt lcosx_inv_succ
+*)
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_jsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_jsx.ma
new file mode 100644 (file)
index 0000000..7431ea4
--- /dev/null
@@ -0,0 +1,38 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "basic_2/rt_computation/jsx.ma".
+
+(* COMPATIBILITY OF STRONG NORMALIZATION FOR UNBOUND RT-TRANSITION **********)
+
+(* Main properties **********************************************************)
+
+theorem jsx_fix (h) (G):
+        ∀f,L1,L. G ⊢ L1 ⊒[h,f] L → ∀L2. G ⊢ L ⊒[h,f] L2 → L = L2.
+#h #G #f #L1 #L #H elim H -f -L1 -L
+[ #f #L2 #H
+  >(jsx_inv_atom_sn … H) -L2 //
+| #f #I #K1 #K2 #_ #IH #L2 #H
+  elim (jsx_inv_push_sn … H) -H /3 width=1 by eq_f2/
+| #f #I #K1 #K2 #_ #IH #L2 #H
+  elim (jsx_inv_unit_sn … H) -H /3 width=1 by eq_f2/
+| #f #I #K1 #K2 #V #_ #_ #IH #L2 #H
+  elim (jsx_inv_unit_sn … H) -H /3 width=1 by eq_f2/
+]
+qed-.
+
+theorem jsx_trans (h) (G): ∀f. Transitive … (jsx h G f).
+#h #G #f #L1 #L #H1 #L2 #H2
+<(jsx_fix … H1 … H2) -L2 //
+qed-.
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_rsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_rsx.ma
new file mode 100644 (file)
index 0000000..e5e662d
--- /dev/null
@@ -0,0 +1,78 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "basic_2/rt_computation/rsx_drops.ma".
+include "basic_2/rt_computation/rsx_lpxs.ma".
+include "basic_2/rt_computation/jsx.ma".
+
+(* COMPATIBILITY OF STRONG NORMALIZATION FOR UNBOUND RT-TRANSITION **********)
+
+(* Properties with strongly normalizing referred local environments *********)
+
+(* Basic_2A1: uses: lsx_cpx_trans_lcosx *)
+lemma rsx_cpx_trans_jsx (h) (G):
+      ∀L0,T1,T2. ⦃G,L0⦄ ⊢ T1 ⬈[h] T2 →
+      ∀f,L. G ⊢ L0 ⊒[h,f] L →
+      G ⊢ ⬈*[h,T1] 𝐒⦃L⦄ → G ⊢ ⬈*[h,T2] 𝐒⦃L⦄.
+#h #G #L0 #T1 #T2 #H @(cpx_ind … H) -G -L0 -T1 -T2
+[ //
+| //
+| #I0 #G #K0 #V1 #V2 #W2 #_ #IH #HVW2 #g #L #HK0 #HL
+  elim (jsx_inv_pair_sn_gen … HK0) -HK0 *
+  [ #f #K #HK0 #H1 #H2 destruct
+    /4 width=8 by rsx_lifts, rsx_fwd_pair, drops_refl, drops_drop/
+  | #f #K #HV1 #HK0 #H1 #H2 destruct
+    /4 width=8 by rsx_lifts, drops_refl, drops_drop/
+  ]
+| #I0 #G #K0 #T #U #i #_ #IH #HTU #g #L #HK0 #HL
+  elim (jsx_fwd_bind_sn … HK0) -HK0 #I #K #HK0 #H destruct
+  /6 width=8 by rsx_inv_lifts, rsx_lifts, drops_refl, drops_drop/
+| #p #I0 #G #L0 #V1 #V2 #T1 #T2 #_ #_ #IHV12 #IHT12 #f #L #HL0 #HL
+  elim (rsx_inv_bind_void … HL) -HL
+  /4 width=2 by jsx_pair, rsx_bind_void/
+| #I0 #G #L0 #V1 #V2 #T1 #T2 #_ #_ #IHV12 #IHT12 #f #L #HL0 #HL
+  elim (rsx_inv_flat … HL) -HL /3 width=2 by rsx_flat/
+| #G #L0 #V #U1 #T1 #T2 #HTU1 #_ #IHT12 #f #L #HL0 #HL
+  elim (rsx_inv_bind_void … HL) -HL #HV #HU1
+  /5 width=8 by rsx_inv_lifts, drops_refl, drops_drop/
+| #G #L0 #V #T1 #T2 #_ #IHT12 #f #L #HL0 #HL
+  elim (rsx_inv_flat … HL) -HL /2 width=2 by/
+| #G #L0 #V1 #V2 #T #_ #IHV12 #f #L #HL0 #HL
+  elim (rsx_inv_flat … HL) -HL /2 width=2 by/
+| #p #G #L0 #V1 #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #IHV12 #IHW12 #IHT12 #f #L #HL0 #HL
+  elim (rsx_inv_flat … HL) -HL #HV1 #HL
+  elim (rsx_inv_bind_void … HL) -HL #HW1 #HT1
+  /4 width=2 by jsx_pair, rsx_bind_void, rsx_flat/
+| #p #G #L0 #V1 #V2 #U2 #W1 #W2 #T1 #T2 #_ #_ #_ #IHV12 #IHW12 #IHT12 #HVU2 #f #L #HL0 #HL
+  elim (rsx_inv_flat … HL) -HL #HV1 #HL
+  elim (rsx_inv_bind_void … HL) -HL #HW1 #HT1
+  /6 width=8 by jsx_pair, rsx_lifts, rsx_bind_void, rsx_flat, drops_refl, drops_drop/
+]
+qed-.
+
+(* Advanced properties of strongly normalizing referred local environments **)
+
+(* Basic_2A1: uses: lsx_cpx_trans_O *)
+lemma rsx_cpx_trans (h) (G):
+      ∀L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈[h] T2 →
+      G ⊢ ⬈*[h,T1] 𝐒⦃L⦄ → G ⊢ ⬈*[h,T2] 𝐒⦃L⦄.
+/3 width=6 by rsx_cpx_trans_jsx, jsx_refl/ qed-.
+
+lemma rsx_cpxs_trans (h) (G):
+      ∀L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 →
+      G ⊢ ⬈*[h,T1] 𝐒⦃L⦄ → G ⊢ ⬈*[h,T2] 𝐒⦃L⦄.
+#h #G #L #T1 #T2 #H
+@(cpxs_ind_dx ???????? H) -T1 //
+/3 width=3 by rsx_cpx_trans/
+qed-.
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx.ma
deleted file mode 100644 (file)
index e2fb366..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-(**************************************************************************)
-(*       ___                                                              *)
-(*      ||M||                                                             *)
-(*      ||A||       A project by Andrea Asperti                           *)
-(*      ||T||                                                             *)
-(*      ||I||       Developers:                                           *)
-(*      ||T||         The HELM team.                                      *)
-(*      ||A||         http://helm.cs.unibo.it                             *)
-(*      \   /                                                             *)
-(*       \ /        This file is distributed under the terms of the       *)
-(*        v         GNU General Public License Version 2                  *)
-(*                                                                        *)
-(**************************************************************************)
-
-include "basic_2/notation/relations/lsubeqx_5.ma".
-include "basic_2/rt_computation/rdsx.ma".
-
-(* CLEAR OF STRONGLY NORMALIZING ENTRIES FOR UNBOUND RT-TRANSITION **********)
-
-(* Note: this should be an instance of a more general sex *)
-(* Basic_2A1: uses: lcosx *)
-inductive lsubsx (h) (G): rtmap → relation lenv ≝
-| lsubsx_atom: ∀f. lsubsx h G f (⋆) (⋆)
-| lsubsx_push: ∀f,I,K1,K2. lsubsx h G f K1 K2 →
-               lsubsx h G (⫯f) (K1.ⓘ{I}) (K2.ⓘ{I})
-| lsubsx_unit: ∀f,I,K1,K2. lsubsx h G f K1 K2 →
-               lsubsx h G (↑f) (K1.ⓤ{I}) (K2.ⓧ)
-| lsubsx_pair: ∀f,I,K1,K2,V. G ⊢ ⬈*[h,V] 𝐒⦃K2⦄ →
-               lsubsx h G f K1 K2 → lsubsx h G (↑f) (K1.ⓑ{I}V) (K2.ⓧ)
-.
-
-interpretation
-  "local environment refinement (clear)"
-  'LSubEqX h f G L1 L2 = (lsubsx h G f L1 L2).
-
-(* Basic inversion lemmas ***************************************************)
-
-fact lsubsx_inv_atom_sn_aux: ∀h,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h,g] L2 →
-                             L1 = ⋆ → L2 = ⋆.
-#h #g #G #L1 #L2 * -g -L1 -L2 //
-[ #f #I #K1 #K2 #_ #H destruct
-| #f #I #K1 #K2 #_ #H destruct
-| #f #I #K1 #K2 #V #_ #_ #H destruct
-]
-qed-.
-
-lemma lsubsx_inv_atom_sn: ∀h,g,G,L2. G ⊢ ⋆ ⊆ⓧ[h,g] L2 → L2 = ⋆.
-/2 width=7 by lsubsx_inv_atom_sn_aux/ qed-.
-
-fact lsubsx_inv_push_sn_aux: ∀h,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h,g] L2 →
-                             ∀f,I,K1. g = ⫯f → L1 = K1.ⓘ{I} →
-                             ∃∃K2. G ⊢ K1 ⊆ⓧ[h,f] K2 & L2 = K2.ⓘ{I}.
-#h #g #G #L1 #L2 * -g -L1 -L2
-[ #f #g #J #L1 #_ #H destruct
-| #f #I #K1 #K2 #HK12 #g #J #L1 #H1 #H2 destruct
-  <(injective_push … H1) -g /2 width=3 by ex2_intro/
-| #f #I #K1 #K2 #_ #g #J #L1 #H
-  elim (discr_next_push … H)
-| #f #I #K1 #K2 #V #_ #_ #g #J #L1 #H
-  elim (discr_next_push … H)
-]
-qed-.
-
-lemma lsubsx_inv_push_sn: ∀h,f,I,G,K1,L2. G ⊢ K1.ⓘ{I} ⊆ⓧ[h,⫯f] L2 →
-                          ∃∃K2. G ⊢ K1 ⊆ⓧ[h,f] K2 & L2 = K2.ⓘ{I}.
-/2 width=5 by lsubsx_inv_push_sn_aux/ qed-.
-
-fact lsubsx_inv_unit_sn_aux: ∀h,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h,g] L2 →
-                             ∀f,I,K1. g = ↑f → L1 = K1.ⓤ{I} →
-                             ∃∃K2. G ⊢ K1 ⊆ⓧ[h,f] K2 & L2 = K2.ⓧ.
-#h #g #G #L1 #L2 * -g -L1 -L2
-[ #f #g #J #L1 #_ #H destruct
-| #f #I #K1 #K2 #_ #g #J #L1 #H
-  elim (discr_push_next … H)
-| #f #I #K1 #K2 #HK12 #g #J #L1 #H1 #H2 destruct
-  <(injective_next … H1) -g /2 width=3 by ex2_intro/
-| #f #I #K1 #K2 #V #_ #_ #g #J #L1 #_ #H destruct
-]
-qed-.
-
-lemma lsubsx_inv_unit_sn: ∀h,f,I,G,K1,L2. G ⊢ K1.ⓤ{I} ⊆ⓧ[h,↑f] L2 →
-                          ∃∃K2. G ⊢ K1 ⊆ⓧ[h,f] K2 & L2 = K2.ⓧ.
-/2 width=6 by lsubsx_inv_unit_sn_aux/ qed-.
-
-fact lsubsx_inv_pair_sn_aux: ∀h,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h,g] L2 →
-                             ∀f,I,K1,V. g = ↑f → L1 = K1.ⓑ{I}V →
-                             ∃∃K2. G ⊢ ⬈*[h,V] 𝐒⦃K2⦄ &
-                                   G ⊢ K1 ⊆ⓧ[h,f] K2 & L2 = K2.ⓧ.
-#h #g #G #L1 #L2 * -g -L1 -L2
-[ #f #g #J #L1 #W #_ #H destruct
-| #f #I #K1 #K2 #_ #g #J #L1 #W #H
-  elim (discr_push_next … H)
-| #f #I #K1 #K2 #_ #g #J #L1 #W #_ #H destruct
-| #f #I #K1 #K2 #V #HV #HK12 #g #J #L1 #W #H1 #H2 destruct
-  <(injective_next … H1) -g /2 width=4 by ex3_intro/
-]
-qed-.
-
-(* Basic_2A1: uses: lcosx_inv_pair *)
-lemma lsubsx_inv_pair_sn: ∀h,f,I,G,K1,L2,V. G ⊢ K1.ⓑ{I}V ⊆ⓧ[h,↑f] L2 →
-                          ∃∃K2. G ⊢ ⬈*[h,V] 𝐒⦃K2⦄ &
-                                G ⊢ K1 ⊆ⓧ[h,f] K2 & L2 = K2.ⓧ.
-/2 width=6 by lsubsx_inv_pair_sn_aux/ qed-.
-
-(* Advanced inversion lemmas ************************************************)
-
-lemma lsubsx_inv_pair_sn_gen: ∀h,g,I,G,K1,L2,V. G ⊢ K1.ⓑ{I}V ⊆ⓧ[h,g] L2 →
-                              ∨∨ ∃∃f,K2. G ⊢ K1 ⊆ⓧ[h,f] K2 & g = ⫯f & L2 = K2.ⓑ{I}V
-                               | ∃∃f,K2. G ⊢ ⬈*[h,V] 𝐒⦃K2⦄ &
-                                         G ⊢ K1 ⊆ⓧ[h,f] K2 & g = ↑f & L2 = K2.ⓧ.
-#h #g #I #G #K1 #L2 #V #H
-elim (pn_split g) * #f #Hf destruct
-[ elim (lsubsx_inv_push_sn … H) -H /3 width=5 by ex3_2_intro, or_introl/
-| elim (lsubsx_inv_pair_sn … H) -H /3 width=6 by ex4_2_intro, or_intror/
-]
-qed-.
-
-(* Advanced forward lemmas **************************************************)
-
-lemma lsubsx_fwd_bind_sn: ∀h,g,I1,G,K1,L2. G ⊢ K1.ⓘ{I1} ⊆ⓧ[h,g] L2 →
-                          ∃∃I2,K2. G ⊢ K1 ⊆ⓧ[h,⫱g] K2 & L2 = K2.ⓘ{I2}.
-#h #g #I1 #G #K1 #L2
-elim (pn_split g) * #f #Hf destruct
-[ #H elim (lsubsx_inv_push_sn … H) -H
-| cases I1 -I1 #I1
-  [ #H elim (lsubsx_inv_unit_sn … H) -H
-  | #V #H elim (lsubsx_inv_pair_sn … H) -H
-  ]
-]
-/2 width=4 by ex2_2_intro/
-qed-.
-
-(* Basic properties *********************************************************)
-
-lemma lsubsx_eq_repl_back: ∀h,G,L1,L2. eq_repl_back … (λf. G ⊢ L1 ⊆ⓧ[h,f] L2).
-#h #G #L1 #L2 #f1 #H elim H -L1 -L2 -f1 //
-[ #f #I #L1 #L2 #_ #IH #x #H
-  elim (eq_inv_px … H) -H /3 width=3 by lsubsx_push/
-| #f #I #L1 #L2 #_ #IH #x #H
-  elim (eq_inv_nx … H) -H /3 width=3 by lsubsx_unit/
-| #f #I #L1 #L2 #V #HV #_ #IH #x #H
-  elim (eq_inv_nx … H) -H /3 width=3 by lsubsx_pair/
-]
-qed-.
-
-lemma lsubsx_eq_repl_fwd: ∀h,G,L1,L2. eq_repl_fwd … (λf. G ⊢ L1 ⊆ⓧ[h,f] L2).
-#h #G #L1 #L2 @eq_repl_sym /2 width=3 by lsubsx_eq_repl_back/
-qed-.
-
-(* Advanced properties ******************************************************)
-
-(* Basic_2A1: uses: lcosx_O *)
-lemma lsubsx_refl: ∀h,f,G. 𝐈⦃f⦄ → reflexive … (lsubsx h G f).
-#h #f #G #Hf #L elim L -L
-/3 width=3 by lsubsx_eq_repl_back, lsubsx_push, eq_push_inv_isid/
-qed.
-
-(* Basic_2A1: removed theorems 2:
-              lcosx_drop_trans_lt lcosx_inv_succ
-*)
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx_lsubsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx_lsubsx.ma
deleted file mode 100644 (file)
index 8203885..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-(**************************************************************************)
-(*       ___                                                              *)
-(*      ||M||                                                             *)
-(*      ||A||       A project by Andrea Asperti                           *)
-(*      ||T||                                                             *)
-(*      ||I||       Developers:                                           *)
-(*      ||T||         The HELM team.                                      *)
-(*      ||A||         http://helm.cs.unibo.it                             *)
-(*      \   /                                                             *)
-(*       \ /        This file is distributed under the terms of the       *)
-(*        v         GNU General Public License Version 2                  *)
-(*                                                                        *)
-(**************************************************************************)
-
-include "basic_2/rt_computation/lsubsx.ma".
-
-(* CLEAR OF STRONGLY NORMALIZING ENTRIES FOR UNBOUND RT-TRANSITION **********)
-
-(* Main properties **********************************************************)
-
-theorem lsubsx_fix: ∀h,f,G,L1,L. G ⊢ L1 ⊆ⓧ[h,f] L →
-                    ∀L2. G ⊢ L ⊆ⓧ[h,f] L2 → L = L2.
-#h #f #G #L1 #L #H elim H -f -L1 -L
-[ #f #L2 #H
-  >(lsubsx_inv_atom_sn … H) -L2 //
-| #f #I #K1 #K2 #_ #IH #L2 #H
-  elim (lsubsx_inv_push_sn … H) -H /3 width=1 by eq_f2/
-| #f #I #K1 #K2 #_ #IH #L2 #H
-  elim (lsubsx_inv_unit_sn … H) -H /3 width=1 by eq_f2/
-| #f #I #K1 #K2 #V #_ #_ #IH #L2 #H
-  elim (lsubsx_inv_unit_sn … H) -H /3 width=1 by eq_f2/
-]
-qed-.
-
-theorem lsubsx_trans: ∀h,f,G. Transitive … (lsubsx h G f).
-#h #f #G #L1 #L #H1 #L2 #H2
-<(lsubsx_fix … H1 … H2) -L2 //
-qed-.
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx_rdsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx_rdsx.ma
deleted file mode 100644 (file)
index 7240fb3..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-(**************************************************************************)
-(*       ___                                                              *)
-(*      ||M||                                                             *)
-(*      ||A||       A project by Andrea Asperti                           *)
-(*      ||T||                                                             *)
-(*      ||I||       Developers:                                           *)
-(*      ||T||         The HELM team.                                      *)
-(*      ||A||         http://helm.cs.unibo.it                             *)
-(*      \   /                                                             *)
-(*       \ /        This file is distributed under the terms of the       *)
-(*        v         GNU General Public License Version 2                  *)
-(*                                                                        *)
-(**************************************************************************)
-
-include "basic_2/rt_computation/rdsx_drops.ma".
-include "basic_2/rt_computation/rdsx_lpxs.ma".
-include "basic_2/rt_computation/lsubsx.ma".
-
-(* CLEAR OF STRONGLY NORMALIZING ENTRIES FOR UNBOUND RT-TRANSITION **********)
-
-(* Properties with strongly normalizing referred local environments *********)
-
-(* Basic_2A1: uses: lsx_cpx_trans_lcosx *)
-lemma rdsx_cpx_trans_lsubsx (h):
-      ∀G,L0,T1,T2. ⦃G,L0⦄ ⊢ T1 ⬈[h] T2 →
-      ∀f,L. G ⊢ L0 ⊆ⓧ[h,f] L →
-      G ⊢ ⬈*[h,T1] 𝐒⦃L⦄ → G ⊢ ⬈*[h,T2] 𝐒⦃L⦄.
-#h #G #L0 #T1 #T2 #H @(cpx_ind … H) -G -L0 -T1 -T2 //
-[ #I0 #G #K0 #V1 #V2 #W2 #_ #IH #HVW2 #g #L #HK0 #HL
-  elim (lsubsx_inv_pair_sn_gen … HK0) -HK0 *
-  [ #f #K #HK0 #H1 #H2 destruct
-    /4 width=8 by rdsx_lifts, rdsx_fwd_pair, drops_refl, drops_drop/
-  | #f #K #HV1 #HK0 #H1 #H2 destruct
-    /4 width=8 by rdsx_lifts, drops_refl, drops_drop/
-  ]
-| #I0 #G #K0 #T #U #i #_ #IH #HTU #g #L #HK0 #HL
-  elim (lsubsx_fwd_bind_sn … HK0) -HK0 #I #K #HK0 #H destruct
-  /6 width=8 by rdsx_inv_lifts, rdsx_lifts, drops_refl, drops_drop/
-| #p #I0 #G #L0 #V1 #V2 #T1 #T2 #_ #_ #IHV12 #IHT12 #f #L #HL0 #HL
-  elim (rdsx_inv_bind … HL) -HL
-  /4 width=2 by lsubsx_pair, rdsx_bind_void/
-| #I0 #G #L0 #V1 #V2 #T1 #T2 #_ #_ #IHV12 #IHT12 #f #L #HL0 #HL
-  elim (rdsx_inv_flat … HL) -HL /3 width=2 by rdsx_flat/
-| #G #L0 #V #U1 #T1 #T2 #HTU1 #_ #IHT12 #f #L #HL0 #HL
-  elim (rdsx_inv_bind … HL) -HL #HV #HU1
-  /5 width=8 by rdsx_inv_lifts, drops_refl, drops_drop/
-| #G #L0 #V #T1 #T2 #_ #IHT12 #f #L #HL0 #HL
-  elim (rdsx_inv_flat … HL) -HL /2 width=2 by/
-| #G #L0 #V1 #V2 #T #_ #IHV12 #f #L #HL0 #HL
-  elim (rdsx_inv_flat … HL) -HL /2 width=2 by/
-| #p #G #L0 #V1 #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #IHV12 #IHW12 #IHT12 #f #L #HL0 #HL
-  elim (rdsx_inv_flat … HL) -HL #HV1 #HL
-  elim (rdsx_inv_bind … HL) -HL #HW1 #HT1
-  /4 width=2 by lsubsx_pair, rdsx_bind_void, rdsx_flat/
-| #p #G #L0 #V1 #V2 #U2 #W1 #W2 #T1 #T2 #_ #_ #_ #IHV12 #IHW12 #IHT12 #HVU2 #f #L #HL0 #HL
-  elim (rdsx_inv_flat … HL) -HL #HV1 #HL
-  elim (rdsx_inv_bind … HL) -HL #HW1 #HT1
-  /6 width=8 by lsubsx_pair, rdsx_lifts, rdsx_bind_void, rdsx_flat, drops_refl, drops_drop/
-]
-qed-.
-
-(* Advanced properties of strongly normalizing referred local environments **)
-
-(* Basic_2A1: uses: lsx_cpx_trans_O *)
-lemma rdsx_cpx_trans (h):
-      ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈[h] T2 →
-      G ⊢ ⬈*[h,T1] 𝐒⦃L⦄ → G ⊢ ⬈*[h,T2] 𝐒⦃L⦄.
-/3 width=6 by rdsx_cpx_trans_lsubsx, lsubsx_refl/ qed-.
-
-lemma rdsx_cpxs_trans (h):
-      ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 →
-      G ⊢ ⬈*[h,T1] 𝐒⦃L⦄ → G ⊢ ⬈*[h,T2] 𝐒⦃L⦄.
-#h #G #L #T1 #T2 #H
-@(cpxs_ind_dx ???????? H) -T1 //
-/3 width=3 by rdsx_cpx_trans/
-qed-.
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx.ma
deleted file mode 100644 (file)
index 46b287b..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-(**************************************************************************)
-(*       ___                                                              *)
-(*      ||M||                                                             *)
-(*      ||A||       A project by Andrea Asperti                           *)
-(*      ||T||                                                             *)
-(*      ||I||       Developers:                                           *)
-(*      ||T||         The HELM team.                                      *)
-(*      ||A||         http://helm.cs.unibo.it                             *)
-(*      \   /                                                             *)
-(*       \ /        This file is distributed under the terms of the       *)
-(*        v         GNU General Public License Version 2                  *)
-(*                                                                        *)
-(**************************************************************************)
-
-include "basic_2/notation/relations/predtysnstrong_4.ma".
-include "static_2/static/rdeq.ma".
-include "basic_2/rt_transition/lpx.ma".
-
-(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******)
-
-definition rdsx (h) (G) (T): predicate lenv ≝
-                             SN … (lpx h G) (rdeq T).
-
-interpretation
-   "strong normalization for unbound context-sensitive parallel rt-transition on referred entries (local environment)"
-   'PRedTySNStrong h T G L = (rdsx h G T L).
-
-(* Basic eliminators ********************************************************)
-
-(* Basic_2A1: uses: lsx_ind *)
-lemma rdsx_ind (h) (G) (T):
-               ∀Q:predicate lenv.
-               (∀L1. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ →
-                     (∀L2. ⦃G,L1⦄ ⊢ ⬈[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) →
-                     Q L1
-               ) →
-               ∀L. G ⊢ ⬈*[h,T] 𝐒⦃L⦄ →  Q L.
-#h #G #T #Q #H0 #L1 #H elim H -L1
-/5 width=1 by SN_intro/
-qed-.
-
-(* Basic properties *********************************************************)
-
-(* Basic_2A1: uses: lsx_intro *)
-lemma rdsx_intro (h) (G) (T):
-                 ∀L1.
-                 (∀L2. ⦃G,L1⦄ ⊢ ⬈[h] L2 → (L1 ≛[T] L2 → ⊥) → G ⊢ ⬈*[h,T] 𝐒⦃L2⦄) →
-                 G ⊢ ⬈*[h,T] 𝐒⦃L1⦄.
-/5 width=1 by SN_intro/ qed.
-
-(* Basic forward lemmas *****************************************************)
-
-(* Basic_2A1: uses: lsx_fwd_pair_sn lsx_fwd_bind_sn lsx_fwd_flat_sn *)
-lemma rdsx_fwd_pair_sn (h) (G):
-                       ∀I,L,V,T. G ⊢ ⬈*[h,②{I}V.T] 𝐒⦃L⦄ →
-                       G ⊢ ⬈*[h,V] 𝐒⦃L⦄.
-#h #G #I #L #V #T #H
-@(rdsx_ind … H) -L #L1 #_ #IHL1
-@rdsx_intro #L2 #HL12 #HnL12
-/4 width=3 by rdeq_fwd_pair_sn/
-qed-.
-
-(* Basic_2A1: uses: lsx_fwd_flat_dx *)
-lemma rdsx_fwd_flat_dx (h) (G):
-                       ∀I,L,V,T. G ⊢ ⬈*[h,ⓕ{I}V.T] 𝐒⦃L⦄ →
-                       G ⊢ ⬈*[h,T] 𝐒⦃L⦄.
-#h #G #I #L #V #T #H 
-@(rdsx_ind … H) -L #L1 #_ #IHL1
-@rdsx_intro #L2 #HL12 #HnL12
-/4 width=3 by rdeq_fwd_flat_dx/
-qed-.
-
-fact rdsx_fwd_pair_aux (h) (G):
-     ∀L. G ⊢ ⬈*[h,#0] 𝐒⦃L⦄ →
-     ∀I,K,V. L = K.ⓑ{I}V → G ⊢ ⬈*[h,V] 𝐒⦃K⦄.
-#h #G #L #H
-@(rdsx_ind … H) -L #L1 #_ #IH #I #K1 #V #H destruct
-/5 width=5 by lpx_pair, rdsx_intro, rdeq_fwd_zero_pair/
-qed-.
-
-lemma rdsx_fwd_pair (h) (G):
-                    ∀I,K,V. G ⊢ ⬈*[h,#0] 𝐒⦃K.ⓑ{I}V⦄ → G ⊢ ⬈*[h,V] 𝐒⦃K⦄.
-/2 width=4 by rdsx_fwd_pair_aux/ qed-.
-
-(* Basic inversion lemmas ***************************************************)
-
-(* Basic_2A1: uses: lsx_inv_flat *)
-lemma rdsx_inv_flat (h) (G):
-      ∀I,L,V,T. G ⊢ ⬈*[h,ⓕ{I}V.T] 𝐒⦃L⦄ →
-      ∧∧ G ⊢ ⬈*[h,V] 𝐒⦃L⦄ & G ⊢ ⬈*[h,T] 𝐒⦃L⦄.
-/3 width=3 by rdsx_fwd_pair_sn, rdsx_fwd_flat_dx, conj/ qed-.
-
-(* Basic_2A1: removed theorems 9:
-              lsx_ge_up lsx_ge
-              lsxa_ind lsxa_intro lsxa_lleq_trans lsxa_lpxs_trans lsxa_intro_lpx lsx_lsxa lsxa_inv_lsx
-*)
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_csx.ma
deleted file mode 100644 (file)
index f6c85a0..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-(**************************************************************************)
-(*       ___                                                              *)
-(*      ||M||                                                             *)
-(*      ||A||       A project by Andrea Asperti                           *)
-(*      ||T||                                                             *)
-(*      ||I||       Developers:                                           *)
-(*      ||T||         The HELM team.                                      *)
-(*      ||A||         http://helm.cs.unibo.it                             *)
-(*      \   /                                                             *)
-(*       \ /        This file is distributed under the terms of the       *)
-(*        v         GNU General Public License Version 2                  *)
-(*                                                                        *)
-(**************************************************************************)
-
-include "basic_2/rt_computation/csx_lsubr.ma".
-include "basic_2/rt_computation/csx_cpxs.ma".
-include "basic_2/rt_computation/lsubsx_rdsx.ma".
-
-(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******)
-
-(* Advanced properties ******************************************************)
-
-(* Basic_2A1: uses: lsx_lref_be_lpxs *)
-lemma rdsx_pair_lpxs (h) (G):
-                     ∀K1,V. ⦃G,K1⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ →
-                     ∀K2. G ⊢ ⬈*[h,V] 𝐒⦃K2⦄ → ⦃G,K1⦄ ⊢ ⬈*[h] K2 →
-                     ∀I. G ⊢ ⬈*[h,#0] 𝐒⦃K2.ⓑ{I}V⦄.
-#h #G #K1 #V #H
-@(csx_ind_cpxs … H) -V #V0 #_ #IHV0 #K2 #H
-@(rdsx_ind … H) -K2 #K0 #HK0 #IHK0 #HK10 #I
-@rdsx_intro #Y #HY #HnY
-elim (lpx_inv_pair_sn … HY) -HY #K2 #V2 #HK02 #HV02 #H destruct
-elim (tdeq_dec V0 V2) #HnV02 destruct [ -IHV0 -HV02 -HK0 | -IHK0 -HnY ]
-[ /5 width=5 by rdsx_rdeq_trans, lpxs_step_dx, rdeq_pair/
-| @(IHV0 … HnV02) -IHV0 -HnV02
-  [ /2 width=3 by lpxs_cpx_trans/
-  | /3 width=3 by rdsx_lpx_trans, rdsx_cpx_trans/
-  | /2 width=3 by lpxs_step_dx/
-  ]
-]
-qed.
-
-(* Basic_2A1: uses: lsx_lref_be *)
-lemma rdsx_lref_pair_drops (h) (G):
-                           ∀K,V. ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ → G ⊢ ⬈*[h,V] 𝐒⦃K⦄ →
-                           ∀I,i,L. ⬇*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄.
-#h #G #K #V #HV #HK #I #i elim i -i
-[ #L #H >(drops_fwd_isid … H) -H /2 width=3 by rdsx_pair_lpxs/
-| #i #IH #L #H
-  elim (drops_inv_bind2_isuni_next … H) -H // #J #Y #HY #H destruct
-  @(rdsx_lifts … (𝐔❴1❵)) /3 width=6 by drops_refl, drops_drop/ (**) (* full auto fails *)
-]
-qed.
-
-(* Main properties **********************************************************)
-
-(* Basic_2A1: uses: csx_lsx *)
-theorem csx_rdsx (h): ∀G,L,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → G ⊢ ⬈*[h,T] 𝐒⦃L⦄.
-#h #G #L #T @(fqup_wf_ind_eq (Ⓕ) … G L T) -G -L -T
-#Z #Y #X #IH #G #L * * //
-[ #i #HG #HL #HT #H destruct
-  elim (csx_inv_lref … H) -H [ |*: * ]
-  [ /2 width=1 by rdsx_lref_atom/
-  | /2 width=3 by rdsx_lref_unit/
-  | /4 width=6 by rdsx_lref_pair_drops, fqup_lref/
-  ]
-| #p #I #V #T #HG #HL #HT #H destruct
-  elim (csx_fwd_bind_unit … H Void) -H /3 width=1 by rdsx_bind_void/
-| #I #V #T #HG #HL #HT #H destruct
-  elim (csx_fwd_flat … H) -H /3 width=1 by rdsx_flat/
-]
-qed.
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_drops.ma
deleted file mode 100644 (file)
index 3c1c6ac..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-(**************************************************************************)
-(*       ___                                                              *)
-(*      ||M||                                                             *)
-(*      ||A||       A project by Andrea Asperti                           *)
-(*      ||T||                                                             *)
-(*      ||I||       Developers:                                           *)
-(*      ||T||         The HELM team.                                      *)
-(*      ||A||         http://helm.cs.unibo.it                             *)
-(*      \   /                                                             *)
-(*       \ /        This file is distributed under the terms of the       *)
-(*        v         GNU General Public License Version 2                  *)
-(*                                                                        *)
-(**************************************************************************)
-
-include "static_2/static/rdeq_drops.ma".
-include "basic_2/rt_transition/lpx_drops.ma".
-include "basic_2/rt_computation/rdsx_length.ma".
-include "basic_2/rt_computation/rdsx_fqup.ma".
-
-(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******)
-
-(* Properties with generic relocation ***************************************)
-
-(* Note: this uses length *)
-(* Basic_2A1: uses: lsx_lift_le lsx_lift_ge *)
-lemma rdsx_lifts (h) (G): d_liftable1_isuni … (λL,T. G ⊢ ⬈*[h,T] 𝐒⦃L⦄).
-#h #G #K #T #H @(rdsx_ind … H) -K
-#K1 #_ #IH #b #f #L1 #HLK1 #Hf #U #HTU @rdsx_intro
-#L2 #HL12 #HnL12 elim (lpx_drops_conf … HLK1 … HL12) 
-/5 width=9 by rdeq_lifts_bi, lpx_fwd_length/
-qed-.
-
-(* Inversion lemmas on relocation *******************************************)
-
-(* Basic_2A1: uses: lsx_inv_lift_le lsx_inv_lift_be lsx_inv_lift_ge *)
-lemma rdsx_inv_lifts (h) (G): d_deliftable1_isuni … (λL,T. G ⊢ ⬈*[h,T] 𝐒⦃L⦄).
-#h #G #L #U #H @(rdsx_ind … H) -L
-#L1 #_ #IH #b #f #K1 #HLK1 #Hf #T #HTU @rdsx_intro
-#K2 #HK12 #HnK12 elim (drops_lpx_trans … HLK1 … HK12) -HK12
-/4 width=10 by rdeq_inv_lifts_bi/
-qed-.
-
-(* Advanced properties ******************************************************)
-
-(* Basic_2A1: uses: lsx_lref_free *)
-lemma rdsx_lref_atom (h) (G): ∀L,i. ⬇*[Ⓕ,𝐔❴i❵] L ≘ ⋆ → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄.
-#h #G #L1 #i #HL1
-@(rdsx_lifts … (#0) … HL1) -HL1 //
-qed.
-
-(* Basic_2A1: uses: lsx_lref_skip *)
-lemma rdsx_lref_unit (h) (G): ∀I,L,K,i. ⬇*[i] L ≘ K.ⓤ{I} → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄.
-#h #G #I #L1 #K1 #i #HL1
-@(rdsx_lifts … (#0) … HL1) -HL1 //
-qed.
-
-(* Advanced forward lemmas **************************************************)
-
-(* Basic_2A1: uses: lsx_fwd_lref_be *)
-lemma rdsx_fwd_lref_pair (h) (G):
-                         ∀L,i. G ⊢ ⬈*[h,#i] 𝐒⦃L⦄ →
-                         ∀I,K,V. ⬇*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,V] 𝐒⦃K⦄.
-#h #G #L #i #HL #I #K #V #HLK
-lapply (rdsx_inv_lifts … HL … HLK … (#0) ?) -L
-/2 width=2 by rdsx_fwd_pair/
-qed-.
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_fqup.ma
deleted file mode 100644 (file)
index 3829360..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-(**************************************************************************)
-(*       ___                                                              *)
-(*      ||M||                                                             *)
-(*      ||A||       A project by Andrea Asperti                           *)
-(*      ||T||                                                             *)
-(*      ||I||       Developers:                                           *)
-(*      ||T||         The HELM team.                                      *)
-(*      ||A||         http://helm.cs.unibo.it                             *)
-(*      \   /                                                             *)
-(*       \ /        This file is distributed under the terms of the       *)
-(*        v         GNU General Public License Version 2                  *)
-(*                                                                        *)
-(**************************************************************************)
-
-include "static_2/static/rdeq_fqup.ma".
-include "basic_2/rt_computation/rdsx.ma".
-
-(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******)
-
-(* Advanced properties ******************************************************)
-
-(* Basic_2A1: uses: lsx_atom *)
-lemma lfsx_atom (h) (G) (T): G ⊢ ⬈*[h,T] 𝐒⦃⋆⦄.
-#h #G #T
-@rdsx_intro #Y #H #HnT
-lapply (lpx_inv_atom_sn … H) -H #H destruct
-elim HnT -HnT //
-qed.
-
-(* Advanced forward lemmas **************************************************)
-
-(* Basic_2A1: uses: lsx_fwd_bind_dx *)
-(* Note: the exclusion binder (ⓧ) makes this more elegant and much simpler *)
-(* Note: the old proof without the exclusion binder requires lreq *)
-lemma rdsx_fwd_bind_dx (h) (G):
-                       ∀p,I,L,V,T. G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L⦄ →
-                       G ⊢ ⬈*[h,T] 𝐒⦃L.ⓧ⦄.
-#h #G #p #I #L #V #T #H
-@(rdsx_ind … H) -L #L1 #_ #IH
-@rdsx_intro #Y #H #HT
-elim (lpx_inv_unit_sn … H) -H #L2 #HL12 #H destruct
-/4 width=4 by rdeq_fwd_bind_dx_void/
-qed-.
-
-(* Advanced inversion lemmas ************************************************)
-
-(* Basic_2A1: uses: lsx_inv_bind *)
-lemma rdsx_inv_bind (h) (G):
-      ∀p,I,L,V,T. G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L⦄ →
-      ∧∧ G ⊢ ⬈*[h,V] 𝐒⦃L⦄ & G ⊢ ⬈*[h,T] 𝐒⦃L.ⓧ⦄.
-/3 width=4 by rdsx_fwd_pair_sn, rdsx_fwd_bind_dx, conj/ qed-.
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_length.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_length.ma
deleted file mode 100644 (file)
index 75177be..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-(**************************************************************************)
-(*       ___                                                              *)
-(*      ||M||                                                             *)
-(*      ||A||       A project by Andrea Asperti                           *)
-(*      ||T||                                                             *)
-(*      ||I||       Developers:                                           *)
-(*      ||T||         The HELM team.                                      *)
-(*      ||A||         http://helm.cs.unibo.it                             *)
-(*      \   /                                                             *)
-(*       \ /        This file is distributed under the terms of the       *)
-(*        v         GNU General Public License Version 2                  *)
-(*                                                                        *)
-(**************************************************************************)
-
-include "static_2/static/rdeq_length.ma".
-include "basic_2/rt_transition/lpx_length.ma".
-include "basic_2/rt_computation/rdsx.ma".
-
-(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******)
-
-(* Advanced properties ******************************************************)
-
-(* Basic_2A1: uses: lsx_sort *)
-lemma rdsx_sort (h) (G): ∀L,s. G ⊢ ⬈*[h,⋆s] 𝐒⦃L⦄.
-#h #G #L1 #s @rdsx_intro #L2 #H #Hs
-elim Hs -Hs /3 width=3 by lpx_fwd_length, rdeq_sort_length/
-qed.
-
-(* Basic_2A1: uses: lsx_gref *)
-lemma rdsx_gref (h) (G): ∀L,l. G ⊢ ⬈*[h,§l] 𝐒⦃L⦄.
-#h #G #L1 #s @rdsx_intro #L2 #H #Hs
-elim Hs -Hs /3 width=3 by lpx_fwd_length, rdeq_gref_length/
-qed.
-
-lemma rdsx_unit (h) (G): ∀I,L. G ⊢ ⬈*[h,#0] 𝐒⦃L.ⓤ{I}⦄.
-#h #G #I #L1 @rdsx_intro
-#Y #HY #HnY elim HnY -HnY
-elim (lpx_inv_unit_sn … HY) -HY #L2 #HL12 #H destruct
-/3 width=3 by lpx_fwd_length, rdeq_unit_length/
-qed.
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_lpxs.ma
deleted file mode 100644 (file)
index 77867e0..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-(**************************************************************************)
-(*       ___                                                              *)
-(*      ||M||                                                             *)
-(*      ||A||       A project by Andrea Asperti                           *)
-(*      ||T||                                                             *)
-(*      ||I||       Developers:                                           *)
-(*      ||T||         The HELM team.                                      *)
-(*      ||A||         http://helm.cs.unibo.it                             *)
-(*      \   /                                                             *)
-(*       \ /        This file is distributed under the terms of the       *)
-(*        v         GNU General Public License Version 2                  *)
-(*                                                                        *)
-(**************************************************************************)
-
-include "basic_2/rt_computation/lpxs_rdeq.ma".
-include "basic_2/rt_computation/lpxs_lpxs.ma".
-include "basic_2/rt_computation/rdsx_rdsx.ma".
-
-(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******)
-
-(* Properties with unbound rt-computation for full local environments *******)
-
-(* Basic_2A1: uses: lsx_intro_alt *)
-lemma rdsx_intro_lpxs (h) (G):
-                      ∀L1,T. (∀L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → G ⊢ ⬈*[h,T] 𝐒⦃L2⦄) →
-                      G ⊢ ⬈*[h,T] 𝐒⦃L1⦄.
-/4 width=1 by lpx_lpxs, rdsx_intro/ qed-.
-
-(* Basic_2A1: uses: lsx_lpxs_trans *)
-lemma rdsx_lpxs_trans (h) (G):
-      ∀L1,T. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ →
-      ∀L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → G ⊢ ⬈*[h,T] 𝐒⦃L2⦄.
-#h #G #L1 #T #HL1 #L2 #H @(lpxs_ind_dx … H) -L2
-/2 width=3 by rdsx_lpx_trans/
-qed-.
-
-(* Eliminators with unbound rt-computation for full local environments ******)
-
-lemma rdsx_ind_lpxs_rdeq (h) (G):
-                         ∀T. ∀Q:predicate lenv.
-                         (∀L1. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ →
-                               (∀L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) →
-                               Q L1
-                         ) →
-                         ∀L1. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄  →
-                         ∀L0. ⦃G,L1⦄ ⊢ ⬈*[h] L0 → ∀L2. L0 ≛[T] L2 → Q L2.
-#h #G #T #Q #IH #L1 #H @(rdsx_ind … H) -L1
-#L1 #HL1 #IH1 #L0 #HL10 #L2 #HL02
-@IH -IH /3 width=3 by rdsx_lpxs_trans, rdsx_rdeq_trans/ -HL1 #K2 #HLK2 #HnLK2
-lapply (rdeq_rdneq_trans … HL02 … HnLK2) -HnLK2 #H
-elim (rdeq_lpxs_trans … HLK2 … HL02) -L2 #K0 #HLK0 #HK02
-lapply (rdneq_rdeq_canc_dx … H … HK02) -H #HnLK0
-elim (rdeq_dec L1 L0 T) #H
-[ lapply (rdeq_rdneq_trans … H … HnLK0) -H -HnLK0 #Hn10
-  lapply (lpxs_trans … HL10 … HLK0) -L0 #H10
-  elim (lpxs_rdneq_inv_step_sn … H10 …  Hn10) -H10 -Hn10
-  /3 width=8 by rdeq_trans/
-| elim (lpxs_rdneq_inv_step_sn … HL10 … H) -HL10 -H #L #K #HL1 #HnL1 #HLK #HKL0
-  elim (rdeq_lpxs_trans … HLK0 … HKL0) -L0
-  /3 width=8 by lpxs_trans, rdeq_trans/
-]
-qed-.
-
-(* Basic_2A1: uses: lsx_ind_alt *)
-lemma rdsx_ind_lpxs (h) (G):
-                    ∀T. ∀Q:predicate lenv.
-                    (∀L1. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ →
-                          (∀L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) →
-                          Q L1
-                    ) →
-                    ∀L. G ⊢ ⬈*[h,T] 𝐒⦃L⦄  → Q L.
-#h #G #T #Q #IH #L #HL
-@(rdsx_ind_lpxs_rdeq … IH … HL) -IH -HL // (**) (* full auto fails *)
-qed-.
-
-(* Advanced properties ******************************************************)
-
-fact rdsx_bind_lpxs_aux (h) (G):
-                        ∀p,I,L1,V. G ⊢ ⬈*[h,V] 𝐒⦃L1⦄ →
-                        ∀Y,T. G ⊢ ⬈*[h,T] 𝐒⦃Y⦄ →
-                        ∀L2. Y = L2.ⓑ{I}V → ⦃G,L1⦄ ⊢ ⬈*[h] L2 →
-                        G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L2⦄.
-#h #G #p #I #L1 #V #H @(rdsx_ind_lpxs … H) -L1
-#L1 #_ #IHL1 #Y #T #H @(rdsx_ind_lpxs … H) -Y
-#Y #HY #IHY #L2 #H #HL12 destruct
-@rdsx_intro_lpxs #L0 #HL20
-lapply (lpxs_trans … HL12 … HL20) #HL10 #H
-elim (rdneq_inv_bind … H) -H [ -IHY | -HY -IHL1 -HL12 ]
-[ #HnV elim (rdeq_dec L1 L2 V)
-  [ #HV @(IHL1 … HL10) -IHL1 -HL12 -HL10
-    /3 width=4 by rdsx_lpxs_trans, lpxs_bind_refl_dx, rdeq_canc_sn/ (**) (* full auto too slow *)
-  | -HnV -HL10 /4 width=4 by rdsx_lpxs_trans, lpxs_bind_refl_dx/
-  ]
-| /3 width=4 by lpxs_bind_refl_dx/
-]
-qed-.
-
-(* Basic_2A1: uses: lsx_bind *)
-lemma rdsx_bind (h) (G):
-                ∀p,I,L,V. G ⊢ ⬈*[h,V] 𝐒⦃L⦄ →
-                ∀T. G ⊢ ⬈*[h,T] 𝐒⦃L.ⓑ{I}V⦄ →
-                G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L⦄.
-/2 width=3 by rdsx_bind_lpxs_aux/ qed.
-
-(* Basic_2A1: uses: lsx_flat_lpxs *)
-lemma rdsx_flat_lpxs (h) (G):
-                     ∀I,L1,V. G ⊢ ⬈*[h,V] 𝐒⦃L1⦄ →
-                     ∀L2,T. G ⊢ ⬈*[h,T] 𝐒⦃L2⦄ → ⦃G,L1⦄ ⊢ ⬈*[h] L2 →
-                     G ⊢ ⬈*[h,ⓕ{I}V.T] 𝐒⦃L2⦄.
-#h #G #I #L1 #V #H @(rdsx_ind_lpxs … H) -L1
-#L1 #HL1 #IHL1 #L2 #T #H @(rdsx_ind_lpxs … H) -L2
-#L2 #HL2 #IHL2 #HL12 @rdsx_intro_lpxs
-#L0 #HL20 lapply (lpxs_trans … HL12 … HL20)
-#HL10 #H elim (rdneq_inv_flat … H) -H [ -HL1 -IHL2 | -HL2 -IHL1 ]
-[ #HnV elim (rdeq_dec L1 L2 V)
-  [ #HV @(IHL1 … HL10) -IHL1 -HL12 -HL10
-    /3 width=5 by rdsx_lpxs_trans, rdeq_canc_sn/ (**) (* full auto too slow: 47s *)
-  | -HnV -HL10 /3 width=4 by rdsx_lpxs_trans/
-  ]
-| /3 width=3 by/
-]
-qed-.
-
-(* Basic_2A1: uses: lsx_flat *)
-lemma rdsx_flat (h) (G):
-                ∀I,L,V. G ⊢ ⬈*[h,V] 𝐒⦃L⦄ →
-                ∀T. G ⊢ ⬈*[h,T] 𝐒⦃L⦄ → G ⊢ ⬈*[h,ⓕ{I}V.T] 𝐒⦃L⦄.
-/2 width=3 by rdsx_flat_lpxs/ qed.
-
-fact rdsx_bind_lpxs_void_aux (h) (G):
-                             ∀p,I,L1,V. G ⊢ ⬈*[h,V] 𝐒⦃L1⦄ →
-                             ∀Y,T. G ⊢ ⬈*[h,T] 𝐒⦃Y⦄ →
-                             ∀L2. Y = L2.ⓧ → ⦃G,L1⦄ ⊢ ⬈*[h] L2 →
-                             G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L2⦄.
-#h #G #p #I #L1 #V #H @(rdsx_ind_lpxs … H) -L1
-#L1 #_ #IHL1 #Y #T #H @(rdsx_ind_lpxs … H) -Y
-#Y #HY #IHY #L2 #H #HL12 destruct
-@rdsx_intro_lpxs #L0 #HL20
-lapply (lpxs_trans … HL12 … HL20) #HL10 #H
-elim (rdneq_inv_bind_void … H) -H [ -IHY | -HY -IHL1 -HL12 ]
-[ #HnV elim (rdeq_dec L1 L2 V)
-  [ #HV @(IHL1 … HL10) -IHL1 -HL12 -HL10
-    /3 width=6 by rdsx_lpxs_trans, lpxs_bind_refl_dx, rdeq_canc_sn/ (**) (* full auto too slow *)
-  | -HnV -HL10 /4 width=4 by rdsx_lpxs_trans, lpxs_bind_refl_dx/
-  ]
-| /3 width=4 by lpxs_bind_refl_dx/
-]
-qed-.
-
-lemma rdsx_bind_void (h) (G):
-                     ∀p,I,L,V. G ⊢ ⬈*[h,V] 𝐒⦃L⦄ →
-                     ∀T. G ⊢ ⬈*[h,T] 𝐒⦃L.ⓧ⦄ →
-                     G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L⦄.
-/2 width=3 by rdsx_bind_lpxs_void_aux/ qed.
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_rdsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_rdsx.ma
deleted file mode 100644 (file)
index 861fe1f..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-(**************************************************************************)
-(*       ___                                                              *)
-(*      ||M||                                                             *)
-(*      ||A||       A project by Andrea Asperti                           *)
-(*      ||T||                                                             *)
-(*      ||I||       Developers:                                           *)
-(*      ||T||         The HELM team.                                      *)
-(*      ||A||         http://helm.cs.unibo.it                             *)
-(*      \   /                                                             *)
-(*       \ /        This file is distributed under the terms of the       *)
-(*        v         GNU General Public License Version 2                  *)
-(*                                                                        *)
-(**************************************************************************)
-
-include "basic_2/rt_transition/lpx_rdeq.ma".
-include "basic_2/rt_computation/rdsx.ma".
-
-(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******)
-
-(* Advanced properties ******************************************************)
-
-(* Basic_2A1: uses: lsx_lleq_trans *)
-lemma rdsx_rdeq_trans (h) (G):
-                      ∀L1,T. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ →
-                      ∀L2. L1 ≛[T] L2 → G ⊢ ⬈*[h,T] 𝐒⦃L2⦄.
-#h #G #L1 #T #H @(rdsx_ind … H) -L1
-#L1 #_ #IHL1 #L2 #HL12 @rdsx_intro
-#L #HL2 #HnL2 elim (rdeq_lpx_trans … HL2 … HL12) -HL2
-/4 width=5 by rdeq_repl/
-qed-.
-
-(* Basic_2A1: uses: lsx_lpx_trans *)
-lemma rdsx_lpx_trans (h) (G):
-                     ∀L1,T. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ →
-                     ∀L2. ⦃G,L1⦄ ⊢ ⬈[h] L2 → G ⊢ ⬈*[h,T] 𝐒⦃L2⦄.
-#h #G #L1 #T #H @(rdsx_ind … H) -L1 #L1 #HL1 #IHL1 #L2 #HL12
-elim (rdeq_dec L1 L2 T) /3 width=4 by rdsx_rdeq_trans/
-qed-.
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx.ma
new file mode 100644 (file)
index 0000000..43e4b04
--- /dev/null
@@ -0,0 +1,95 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "basic_2/notation/relations/predtysnstrong_4.ma".
+include "static_2/static/rdeq.ma".
+include "basic_2/rt_transition/lpx.ma".
+
+(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******)
+
+definition rsx (h) (G) (T): predicate lenv ≝
+           SN … (lpx h G) (rdeq T).
+
+interpretation
+   "strong normalization for unbound context-sensitive parallel rt-transition on referred entries (local environment)"
+   'PRedTySNStrong h T G L = (rsx h G T L).
+
+(* Basic eliminators ********************************************************)
+
+(* Basic_2A1: uses: lsx_ind *)
+lemma rsx_ind (h) (G) (T) (Q:predicate lenv):
+      (∀L1. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ →
+            (∀L2. ⦃G,L1⦄ ⊢ ⬈[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) →
+            Q L1
+      ) →
+      ∀L. G ⊢ ⬈*[h,T] 𝐒⦃L⦄ →  Q L.
+#h #G #T #Q #H0 #L1 #H elim H -L1
+/5 width=1 by SN_intro/
+qed-.
+
+(* Basic properties *********************************************************)
+
+(* Basic_2A1: uses: lsx_intro *)
+lemma rsx_intro (h) (G) (T):
+      ∀L1.
+      (∀L2. ⦃G,L1⦄ ⊢ ⬈[h] L2 → (L1 ≛[T] L2 → ⊥) → G ⊢ ⬈*[h,T] 𝐒⦃L2⦄) →
+      G ⊢ ⬈*[h,T] 𝐒⦃L1⦄.
+/5 width=1 by SN_intro/ qed.
+
+(* Basic forward lemmas *****************************************************)
+
+(* Basic_2A1: uses: lsx_fwd_pair_sn lsx_fwd_bind_sn lsx_fwd_flat_sn *)
+lemma rsx_fwd_pair_sn (h) (G):
+      ∀I,L,V,T. G ⊢ ⬈*[h,②{I}V.T] 𝐒⦃L⦄ →
+      G ⊢ ⬈*[h,V] 𝐒⦃L⦄.
+#h #G #I #L #V #T #H
+@(rsx_ind … H) -L #L1 #_ #IHL1
+@rsx_intro #L2 #HL12 #HnL12
+/4 width=3 by rdeq_fwd_pair_sn/
+qed-.
+
+(* Basic_2A1: uses: lsx_fwd_flat_dx *)
+lemma rsx_fwd_flat_dx (h) (G):
+      ∀I,L,V,T. G ⊢ ⬈*[h,ⓕ{I}V.T] 𝐒⦃L⦄ →
+      G ⊢ ⬈*[h,T] 𝐒⦃L⦄.
+#h #G #I #L #V #T #H 
+@(rsx_ind … H) -L #L1 #_ #IHL1
+@rsx_intro #L2 #HL12 #HnL12
+/4 width=3 by rdeq_fwd_flat_dx/
+qed-.
+
+fact rsx_fwd_pair_aux (h) (G):
+     ∀L. G ⊢ ⬈*[h,#0] 𝐒⦃L⦄ →
+     ∀I,K,V. L = K.ⓑ{I}V → G ⊢ ⬈*[h,V] 𝐒⦃K⦄.
+#h #G #L #H
+@(rsx_ind … H) -L #L1 #_ #IH #I #K1 #V #H destruct
+/5 width=5 by lpx_pair, rsx_intro, rdeq_fwd_zero_pair/
+qed-.
+
+lemma rsx_fwd_pair (h) (G):
+      ∀I,K,V. G ⊢ ⬈*[h,#0] 𝐒⦃K.ⓑ{I}V⦄ → G ⊢ ⬈*[h,V] 𝐒⦃K⦄.
+/2 width=4 by rsx_fwd_pair_aux/ qed-.
+
+(* Basic inversion lemmas ***************************************************)
+
+(* Basic_2A1: uses: lsx_inv_flat *)
+lemma rsx_inv_flat (h) (G):
+      ∀I,L,V,T. G ⊢ ⬈*[h,ⓕ{I}V.T] 𝐒⦃L⦄ →
+      ∧∧ G ⊢ ⬈*[h,V] 𝐒⦃L⦄ & G ⊢ ⬈*[h,T] 𝐒⦃L⦄.
+/3 width=3 by rsx_fwd_pair_sn, rsx_fwd_flat_dx, conj/ qed-.
+
+(* Basic_2A1: removed theorems 9:
+              lsx_ge_up lsx_ge
+              lsxa_ind lsxa_intro lsxa_lleq_trans lsxa_lpxs_trans lsxa_intro_lpx lsx_lsxa lsxa_inv_lsx
+*)
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_csx.ma
new file mode 100644 (file)
index 0000000..64eeba5
--- /dev/null
@@ -0,0 +1,73 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "basic_2/rt_computation/csx_lsubr.ma".
+include "basic_2/rt_computation/csx_cpxs.ma".
+include "basic_2/rt_computation/jsx_rsx.ma".
+
+(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******)
+
+(* Advanced properties ******************************************************)
+
+(* Note: swapping the eliminations to avoid rsx_cpx_trans: no solution found *)
+(* Basic_2A1: uses: lsx_lref_be_lpxs *)
+lemma rsx_pair_lpxs (h) (G):
+      ∀K1,V. ⦃G,K1⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ →
+      ∀K2. G ⊢ ⬈*[h,V] 𝐒⦃K2⦄ → ⦃G,K1⦄ ⊢ ⬈*[h] K2 →
+      ∀I. G ⊢ ⬈*[h,#0] 𝐒⦃K2.ⓑ{I}V⦄.
+#h #G #K1 #V #H
+@(csx_ind_cpxs … H) -V #V0 #_ #IHV0 #K2 #H
+@(rsx_ind … H) -K2 #K0 #HK0 #IHK0 #HK10 #I
+@rsx_intro #Y #HY #HnY
+elim (lpx_inv_pair_sn … HY) -HY #K2 #V2 #HK02 #HV02 #H destruct
+elim (tdeq_dec V0 V2) #HnV02 destruct [ -IHV0 -HV02 -HK0 | -IHK0 -HnY ]
+[ /5 width=5 by rsx_rdeq_trans, lpxs_step_dx, rdeq_pair/
+| @(IHV0 … HnV02) -IHV0 -HnV02
+  [ /2 width=3 by lpxs_cpx_trans/
+  | /3 width=3 by rsx_lpx_trans, rsx_cpx_trans/
+  | /2 width=3 by lpxs_step_dx/
+  ]
+]
+qed.
+
+(* Basic_2A1: uses: lsx_lref_be *)
+lemma rsx_lref_pair_drops (h) (G):
+      ∀K,V. ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ → G ⊢ ⬈*[h,V] 𝐒⦃K⦄ →
+      ∀I,i,L. ⬇*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄.
+#h #G #K #V #HV #HK #I #i elim i -i
+[ #L #H >(drops_fwd_isid … H) -H /2 width=3 by rsx_pair_lpxs/
+| #i #IH #L #H
+  elim (drops_inv_bind2_isuni_next … H) -H // #J #Y #HY #H destruct
+  @(rsx_lifts … (𝐔❴1❵)) /3 width=6 by drops_refl, drops_drop/ (**) (* full auto fails *)
+]
+qed.
+
+(* Main properties **********************************************************)
+
+(* Basic_2A1: uses: csx_lsx *)
+theorem csx_rsx (h): ∀G,L,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → G ⊢ ⬈*[h,T] 𝐒⦃L⦄.
+#h #G #L #T @(fqup_wf_ind_eq (Ⓕ) … G L T) -G -L -T
+#Z #Y #X #IH #G #L * * //
+[ #i #HG #HL #HT #H destruct
+  elim (csx_inv_lref … H) -H [ |*: * ]
+  [ /2 width=1 by rsx_lref_atom/
+  | /2 width=3 by rsx_lref_unit/
+  | /4 width=6 by rsx_lref_pair_drops, fqup_lref/
+  ]
+| #p #I #V #T #HG #HL #HT #H destruct
+  elim (csx_fwd_bind_unit … H Void) -H /3 width=1 by rsx_bind_void/
+| #I #V #T #HG #HL #HT #H destruct
+  elim (csx_fwd_flat … H) -H /3 width=1 by rsx_flat/
+]
+qed.
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_drops.ma
new file mode 100644 (file)
index 0000000..80cc2f1
--- /dev/null
@@ -0,0 +1,66 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "static_2/static/rdeq_drops.ma".
+include "basic_2/rt_transition/lpx_drops.ma".
+include "basic_2/rt_computation/rsx_length.ma".
+include "basic_2/rt_computation/rsx_fqup.ma".
+
+(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******)
+
+(* Properties with generic relocation ***************************************)
+
+(* Note: this uses length *)
+(* Basic_2A1: uses: lsx_lift_le lsx_lift_ge *)
+lemma rsx_lifts (h) (G): d_liftable1_isuni … (λL,T. G ⊢ ⬈*[h,T] 𝐒⦃L⦄).
+#h #G #K #T #H @(rsx_ind … H) -K
+#K1 #_ #IH #b #f #L1 #HLK1 #Hf #U #HTU @rsx_intro
+#L2 #HL12 #HnL12 elim (lpx_drops_conf … HLK1 … HL12) 
+/5 width=9 by rdeq_lifts_bi, lpx_fwd_length/
+qed-.
+
+(* Inversion lemmas on relocation *******************************************)
+
+(* Basic_2A1: uses: lsx_inv_lift_le lsx_inv_lift_be lsx_inv_lift_ge *)
+lemma rsx_inv_lifts (h) (G): d_deliftable1_isuni … (λL,T. G ⊢ ⬈*[h,T] 𝐒⦃L⦄).
+#h #G #L #U #H @(rsx_ind … H) -L
+#L1 #_ #IH #b #f #K1 #HLK1 #Hf #T #HTU @rsx_intro
+#K2 #HK12 #HnK12 elim (drops_lpx_trans … HLK1 … HK12) -HK12
+/4 width=10 by rdeq_inv_lifts_bi/
+qed-.
+
+(* Advanced properties ******************************************************)
+
+(* Basic_2A1: uses: lsx_lref_free *)
+lemma rsx_lref_atom (h) (G): ∀L,i. ⬇*[Ⓕ,𝐔❴i❵] L ≘ ⋆ → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄.
+#h #G #L1 #i #HL1
+@(rsx_lifts … (#0) … HL1) -HL1 //
+qed.
+
+(* Basic_2A1: uses: lsx_lref_skip *)
+lemma rsx_lref_unit (h) (G): ∀I,L,K,i. ⬇*[i] L ≘ K.ⓤ{I} → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄.
+#h #G #I #L1 #K1 #i #HL1
+@(rsx_lifts … (#0) … HL1) -HL1 //
+qed.
+
+(* Advanced forward lemmas **************************************************)
+
+(* Basic_2A1: uses: lsx_fwd_lref_be *)
+lemma rsx_fwd_lref_pair (h) (G):
+      ∀L,i. G ⊢ ⬈*[h,#i] 𝐒⦃L⦄ →
+      ∀I,K,V. ⬇*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,V] 𝐒⦃K⦄.
+#h #G #L #i #HL #I #K #V #HLK
+lapply (rsx_inv_lifts … HL … HLK … (#0) ?) -L
+/2 width=2 by rsx_fwd_pair/
+qed-.
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_fqup.ma
new file mode 100644 (file)
index 0000000..b41e150
--- /dev/null
@@ -0,0 +1,50 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "static_2/static/rdeq_fqup.ma".
+include "basic_2/rt_computation/rsx.ma".
+
+(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******)
+
+(* Advanced properties ******************************************************)
+
+(* Basic_2A1: uses: lsx_atom *)
+lemma lfsx_atom (h) (G) (T): G ⊢ ⬈*[h,T] 𝐒⦃⋆⦄.
+#h #G #T
+@rsx_intro #Y #H #HnT
+lapply (lpx_inv_atom_sn … H) -H #H destruct
+elim HnT -HnT //
+qed.
+
+(* Advanced forward lemmas **************************************************)
+
+(* Basic_2A1: uses: lsx_fwd_bind_dx *)
+(* Note: the exclusion binder (ⓧ) makes this more elegant and much simpler *)
+(* Note: the old proof without the exclusion binder requires lreq *)
+lemma rsx_fwd_bind_dx_void (h) (G):
+      ∀p,I,L,V,T. G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L⦄ → G ⊢ ⬈*[h,T] 𝐒⦃L.ⓧ⦄.
+#h #G #p #I #L #V #T #H
+@(rsx_ind … H) -L #L1 #_ #IH
+@rsx_intro #Y #H #HT
+elim (lpx_inv_unit_sn … H) -H #L2 #HL12 #H destruct
+/4 width=4 by rdeq_fwd_bind_dx_void/
+qed-.
+
+(* Advanced inversion lemmas ************************************************)
+
+(* Basic_2A1: uses: lsx_inv_bind *)
+lemma rsx_inv_bind_void (h) (G):
+      ∀p,I,L,V,T. G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L⦄ →
+      ∧∧ G ⊢ ⬈*[h,V] 𝐒⦃L⦄ & G ⊢ ⬈*[h,T] 𝐒⦃L.ⓧ⦄.
+/3 width=4 by rsx_fwd_pair_sn, rsx_fwd_bind_dx_void, conj/ qed-.
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_length.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_length.ma
new file mode 100644 (file)
index 0000000..ae3d769
--- /dev/null
@@ -0,0 +1,40 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "static_2/static/rdeq_length.ma".
+include "basic_2/rt_transition/lpx_length.ma".
+include "basic_2/rt_computation/rsx.ma".
+
+(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******)
+
+(* Advanced properties ******************************************************)
+
+(* Basic_2A1: uses: lsx_sort *)
+lemma rsx_sort (h) (G): ∀L,s. G ⊢ ⬈*[h,⋆s] 𝐒⦃L⦄.
+#h #G #L1 #s @rsx_intro #L2 #H #Hs
+elim Hs -Hs /3 width=3 by lpx_fwd_length, rdeq_sort_length/
+qed.
+
+(* Basic_2A1: uses: lsx_gref *)
+lemma rsx_gref (h) (G): ∀L,l. G ⊢ ⬈*[h,§l] 𝐒⦃L⦄.
+#h #G #L1 #s @rsx_intro #L2 #H #Hs
+elim Hs -Hs /3 width=3 by lpx_fwd_length, rdeq_gref_length/
+qed.
+
+lemma rsx_unit (h) (G): ∀I,L. G ⊢ ⬈*[h,#0] 𝐒⦃L.ⓤ{I}⦄.
+#h #G #I #L1 @rsx_intro
+#Y #HY #HnY elim HnY -HnY
+elim (lpx_inv_unit_sn … HY) -HY #L2 #HL12 #H destruct
+/3 width=3 by lpx_fwd_length, rdeq_unit_length/
+qed.
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_lpxs.ma
new file mode 100644 (file)
index 0000000..9598d49
--- /dev/null
@@ -0,0 +1,152 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "basic_2/rt_computation/lpxs_rdeq.ma".
+include "basic_2/rt_computation/lpxs_lpxs.ma".
+include "basic_2/rt_computation/rsx_rsx.ma".
+
+(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******)
+
+(* Properties with unbound rt-computation for full local environments *******)
+
+(* Basic_2A1: uses: lsx_intro_alt *)
+lemma rsx_intro_lpxs (h) (G):
+      ∀L1,T. (∀L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → G ⊢ ⬈*[h,T] 𝐒⦃L2⦄) →
+      G ⊢ ⬈*[h,T] 𝐒⦃L1⦄.
+/4 width=1 by lpx_lpxs, rsx_intro/ qed-.
+
+(* Basic_2A1: uses: lsx_lpxs_trans *)
+lemma rsx_lpxs_trans (h) (G):
+      ∀L1,T. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ →
+      ∀L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → G ⊢ ⬈*[h,T] 𝐒⦃L2⦄.
+#h #G #L1 #T #HL1 #L2 #H @(lpxs_ind_dx … H) -L2
+/2 width=3 by rsx_lpx_trans/
+qed-.
+
+(* Eliminators with unbound rt-computation for full local environments ******)
+
+lemma rsx_ind_lpxs_rdeq (h) (G) (T) (Q:predicate lenv):
+      (∀L1. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ →
+            (∀L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) →
+            Q L1
+      ) →
+      ∀L1. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄  →
+      ∀L0. ⦃G,L1⦄ ⊢ ⬈*[h] L0 → ∀L2. L0 ≛[T] L2 → Q L2.
+#h #G #T #Q #IH #L1 #H @(rsx_ind … H) -L1
+#L1 #HL1 #IH1 #L0 #HL10 #L2 #HL02
+@IH -IH /3 width=3 by rsx_lpxs_trans, rsx_rdeq_trans/ -HL1 #K2 #HLK2 #HnLK2
+lapply (rdeq_rdneq_trans … HL02 … HnLK2) -HnLK2 #H
+elim (rdeq_lpxs_trans … HLK2 … HL02) -L2 #K0 #HLK0 #HK02
+lapply (rdneq_rdeq_canc_dx … H … HK02) -H #HnLK0
+elim (rdeq_dec L1 L0 T) #H
+[ lapply (rdeq_rdneq_trans … H … HnLK0) -H -HnLK0 #Hn10
+  lapply (lpxs_trans … HL10 … HLK0) -L0 #H10
+  elim (lpxs_rdneq_inv_step_sn … H10 …  Hn10) -H10 -Hn10
+  /3 width=8 by rdeq_trans/
+| elim (lpxs_rdneq_inv_step_sn … HL10 … H) -HL10 -H #L #K #HL1 #HnL1 #HLK #HKL0
+  elim (rdeq_lpxs_trans … HLK0 … HKL0) -L0
+  /3 width=8 by lpxs_trans, rdeq_trans/
+]
+qed-.
+
+(* Basic_2A1: uses: lsx_ind_alt *)
+lemma rsx_ind_lpxs (h) (G) (T) (Q:predicate lenv):
+      (∀L1. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ →
+            (∀L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) →
+            Q L1
+      ) →
+      ∀L. G ⊢ ⬈*[h,T] 𝐒⦃L⦄  → Q L.
+#h #G #T #Q #IH #L #HL
+@(rsx_ind_lpxs_rdeq … IH … HL) -IH -HL // (**) (* full auto fails *)
+qed-.
+
+(* Advanced properties ******************************************************)
+
+fact rsx_bind_lpxs_aux (h) (G):
+     ∀p,I,L1,V. G ⊢ ⬈*[h,V] 𝐒⦃L1⦄ →
+     ∀Y,T. G ⊢ ⬈*[h,T] 𝐒⦃Y⦄ →
+     ∀L2. Y = L2.ⓑ{I}V → ⦃G,L1⦄ ⊢ ⬈*[h] L2 →
+     G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L2⦄.
+#h #G #p #I #L1 #V #H @(rsx_ind_lpxs … H) -L1
+#L1 #_ #IHL1 #Y #T #H @(rsx_ind_lpxs … H) -Y
+#Y #HY #IHY #L2 #H #HL12 destruct
+@rsx_intro_lpxs #L0 #HL20
+lapply (lpxs_trans … HL12 … HL20) #HL10 #H
+elim (rdneq_inv_bind … H) -H [ -IHY | -HY -IHL1 -HL12 ]
+[ #HnV elim (rdeq_dec L1 L2 V)
+  [ #HV @(IHL1 … HL10) -IHL1 -HL12 -HL10
+    /3 width=4 by rsx_lpxs_trans, lpxs_bind_refl_dx, rdeq_canc_sn/ (**) (* full auto too slow *)
+  | -HnV -HL10 /4 width=4 by rsx_lpxs_trans, lpxs_bind_refl_dx/
+  ]
+| /3 width=4 by lpxs_bind_refl_dx/
+]
+qed-.
+
+(* Basic_2A1: uses: lsx_bind *)
+lemma rsx_bind (h) (G):
+      ∀p,I,L,V. G ⊢ ⬈*[h,V] 𝐒⦃L⦄ →
+      ∀T. G ⊢ ⬈*[h,T] 𝐒⦃L.ⓑ{I}V⦄ →
+      G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L⦄.
+/2 width=3 by rsx_bind_lpxs_aux/ qed.
+
+(* Basic_2A1: uses: lsx_flat_lpxs *)
+lemma rsx_flat_lpxs (h) (G):
+      ∀I,L1,V. G ⊢ ⬈*[h,V] 𝐒⦃L1⦄ →
+      ∀L2,T. G ⊢ ⬈*[h,T] 𝐒⦃L2⦄ → ⦃G,L1⦄ ⊢ ⬈*[h] L2 →
+      G ⊢ ⬈*[h,ⓕ{I}V.T] 𝐒⦃L2⦄.
+#h #G #I #L1 #V #H @(rsx_ind_lpxs … H) -L1
+#L1 #HL1 #IHL1 #L2 #T #H @(rsx_ind_lpxs … H) -L2
+#L2 #HL2 #IHL2 #HL12 @rsx_intro_lpxs
+#L0 #HL20 lapply (lpxs_trans … HL12 … HL20)
+#HL10 #H elim (rdneq_inv_flat … H) -H [ -HL1 -IHL2 | -HL2 -IHL1 ]
+[ #HnV elim (rdeq_dec L1 L2 V)
+  [ #HV @(IHL1 … HL10) -IHL1 -HL12 -HL10
+    /3 width=5 by rsx_lpxs_trans, rdeq_canc_sn/ (**) (* full auto too slow: 47s *)
+  | -HnV -HL10 /3 width=4 by rsx_lpxs_trans/
+  ]
+| /3 width=3 by/
+]
+qed-.
+
+(* Basic_2A1: uses: lsx_flat *)
+lemma rsx_flat (h) (G):
+      ∀I,L,V. G ⊢ ⬈*[h,V] 𝐒⦃L⦄ →
+      ∀T. G ⊢ ⬈*[h,T] 𝐒⦃L⦄ → G ⊢ ⬈*[h,ⓕ{I}V.T] 𝐒⦃L⦄.
+/2 width=3 by rsx_flat_lpxs/ qed.
+
+fact rsx_bind_lpxs_void_aux (h) (G):
+     ∀p,I,L1,V. G ⊢ ⬈*[h,V] 𝐒⦃L1⦄ →
+     ∀Y,T. G ⊢ ⬈*[h,T] 𝐒⦃Y⦄ →
+     ∀L2. Y = L2.ⓧ → ⦃G,L1⦄ ⊢ ⬈*[h] L2 →
+     G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L2⦄.
+#h #G #p #I #L1 #V #H @(rsx_ind_lpxs … H) -L1
+#L1 #_ #IHL1 #Y #T #H @(rsx_ind_lpxs … H) -Y
+#Y #HY #IHY #L2 #H #HL12 destruct
+@rsx_intro_lpxs #L0 #HL20
+lapply (lpxs_trans … HL12 … HL20) #HL10 #H
+elim (rdneq_inv_bind_void … H) -H [ -IHY | -HY -IHL1 -HL12 ]
+[ #HnV elim (rdeq_dec L1 L2 V)
+  [ #HV @(IHL1 … HL10) -IHL1 -HL12 -HL10
+    /3 width=6 by rsx_lpxs_trans, lpxs_bind_refl_dx, rdeq_canc_sn/ (**) (* full auto too slow *)
+  | -HnV -HL10 /4 width=4 by rsx_lpxs_trans, lpxs_bind_refl_dx/
+  ]
+| /3 width=4 by lpxs_bind_refl_dx/
+]
+qed-.
+
+lemma rsx_bind_void (h) (G):
+      ∀p,I,L,V. G ⊢ ⬈*[h,V] 𝐒⦃L⦄ →
+      ∀T. G ⊢ ⬈*[h,T] 𝐒⦃L.ⓧ⦄ →
+      G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L⦄.
+/2 width=3 by rsx_bind_lpxs_void_aux/ qed.
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_rsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_rsx.ma
new file mode 100644 (file)
index 0000000..f801c96
--- /dev/null
@@ -0,0 +1,38 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "basic_2/rt_transition/lpx_rdeq.ma".
+include "basic_2/rt_computation/rsx.ma".
+
+(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******)
+
+(* Advanced properties ******************************************************)
+
+(* Basic_2A1: uses: lsx_lleq_trans *)
+lemma rsx_rdeq_trans (h) (G):
+      ∀L1,T. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ →
+      ∀L2. L1 ≛[T] L2 → G ⊢ ⬈*[h,T] 𝐒⦃L2⦄.
+#h #G #L1 #T #H @(rsx_ind … H) -L1
+#L1 #_ #IHL1 #L2 #HL12 @rsx_intro
+#L #HL2 #HnL2 elim (rdeq_lpx_trans … HL2 … HL12) -HL2
+/4 width=5 by rdeq_repl/
+qed-.
+
+(* Basic_2A1: uses: lsx_lpx_trans *)
+lemma rsx_lpx_trans (h) (G):
+      ∀L1,T. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ →
+      ∀L2. ⦃G,L1⦄ ⊢ ⬈[h] L2 → G ⊢ ⬈*[h,T] 𝐒⦃L2⦄.
+#h #G #L1 #T #H @(rsx_ind … H) -L1 #L1 #HL1 #IHL1 #L2 #HL12
+elim (rdeq_dec L1 L2 T) /3 width=4 by rsx_rdeq_trans/
+qed-.
index ca625dd1b4a23a0a96c2337e95b3fe962674ccd2..7cddd25cd47b817021f6d1ed5a548fe5e134ddde 100644 (file)
@@ -21,9 +21,9 @@ include "basic_2/rt_transition/cpx_lsubr.ma".
 
 (* Properties on supclosure *************************************************)
 
-lemma fqu_cpx_trans: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma fqu_cpx_trans: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                      ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 →
-                     â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & â¦\83G1,L1,U1â¦\84 â\8a\90[b] ⦃G2,L2,U2⦄.
+                     â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & â¦\83G1,L1,U1â¦\84 â¬\82[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
 /3 width=3 by cpx_pair_sn, cpx_bind, cpx_flat, fqu_pair_sn, fqu_bind_dx, fqu_flat_dx, ex2_intro/
 [ #I #G #L2 #V2 #X2 #HVX2
@@ -36,18 +36,18 @@ lemma fqu_cpx_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐[b] ⦃G2,L2,T2
 ]
 qed-.
 
-lemma fquq_cpx_trans: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90⸮[b] ⦃G2,L2,T2⦄ →
+lemma fquq_cpx_trans: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] ⦃G2,L2,T2⦄ →
                       ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 →
-                      â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & â¦\83G1,L1,U1â¦\84 â\8a\90⸮[b] ⦃G2,L2,U2⦄.
+                      â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & â¦\83G1,L1,U1â¦\84 â¬\82⸮[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -H
 [ #HT12 #U2 #HTU2 elim (fqu_cpx_trans … HT12 … HTU2) /3 width=3 by fqu_fquq, ex2_intro/
 | * #H1 #H2 #H3 destruct /2 width=3 by ex2_intro/
 ]
 qed-.
 
-lemma fqup_cpx_trans: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄ →
+lemma fqup_cpx_trans: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄ →
                       ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 →
-                      â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & â¦\83G1,L1,U1â¦\84 â\8a\90+[b] ⦃G2,L2,U2⦄.
+                      â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & â¦\83G1,L1,U1â¦\84 â¬\82+[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
 [ #G2 #L2 #T2 #H12 #U2 #HTU2 elim (fqu_cpx_trans … H12 … HTU2) -T2
   /3 width=3 by fqu_fqup, ex2_intro/
@@ -57,18 +57,18 @@ lemma fqup_cpx_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐+[b] ⦃G2,L2,
 ]
 qed-.
 
-lemma fqus_cpx_trans: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
+lemma fqus_cpx_trans: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
                       ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 →
-                      â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & â¦\83G1,L1,U1â¦\84 â\8a\90*[b] ⦃G2,L2,U2⦄.
+                      â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & â¦\83G1,L1,U1â¦\84 â¬\82*[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fqus_inv_fqup … H) -H
 [ #HT12 #U2 #HTU2 elim (fqup_cpx_trans … HT12 … HTU2) /3 width=3 by fqup_fqus, ex2_intro/
 | * #H1 #H2 #H3 destruct /2 width=3 by ex2_intro/
 ]
 qed-.
 
-lemma fqu_cpx_trans_tdneq: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma fqu_cpx_trans_tdneq: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                            ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) →
-                           â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â\8a\90[b] ⦃G2,L2,U2⦄.
+                           â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â¬\82[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
 [ #I #G #L #V1 #V2 #HV12 #_ elim (lifts_total V2 𝐔❴1❵)
   #U2 #HVU2 @(ex3_intro … U2)
@@ -80,7 +80,7 @@ lemma fqu_cpx_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐[b] ⦃G2
   [1,3: /2 width=4 by fqu_pair_sn, cpx_pair_sn/
   | #H elim (tdeq_inv_pair … H) -H /2 width=1 by/
   ]
-| #p #I #G #L #V #T1 #T2 #HT12 #H0 @(ex3_intro … (ⓑ{p,I}V.T2))
+| #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ{p,I}V.T2))
   [1,3: /2 width=4 by fqu_bind_dx, cpx_bind/
   | #H elim (tdeq_inv_pair … H) -H /2 width=1 by/
   ]
@@ -98,9 +98,9 @@ lemma fqu_cpx_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐[b] ⦃G2
 ]
 qed-.
 
-lemma fquq_cpx_trans_tdneq: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90⸮[b] ⦃G2,L2,T2⦄ →
+lemma fquq_cpx_trans_tdneq: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] ⦃G2,L2,T2⦄ →
                             ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) →
-                            â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â\8a\90⸮[b] ⦃G2,L2,U2⦄.
+                            â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â¬\82⸮[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 elim H12 -H12 
 [ #H12 #U2 #HTU2 #H elim (fqu_cpx_trans_tdneq … H12 … HTU2 H) -T2
   /3 width=4 by fqu_fquq, ex3_intro/
@@ -108,9 +108,9 @@ lemma fquq_cpx_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐⸮[b] 
 ]
 qed-.
 
-lemma fqup_cpx_trans_tdneq: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄ →
+lemma fqup_cpx_trans_tdneq: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄ →
                             ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) →
-                            â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â\8a\90+[b] ⦃G2,L2,U2⦄.
+                            â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â¬\82+[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1
 [ #G1 #L1 #T1 #H12 #U2 #HTU2 #H elim (fqu_cpx_trans_tdneq … H12 … HTU2 H) -T2
   /3 width=4 by fqu_fqup, ex3_intro/
@@ -120,9 +120,9 @@ lemma fqup_cpx_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐+[b] ⦃
 ]
 qed-.
 
-lemma fqus_cpx_trans_tdneq: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
+lemma fqus_cpx_trans_tdneq: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
                             ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) →
-                            â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â\8a\90*[b] ⦃G2,L2,U2⦄.
+                            â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â¬\82*[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fqus_inv_fqup … H12) -H12
 [ #H12 elim (fqup_cpx_trans_tdneq … H12 … HTU2 H) -T2
   /3 width=4 by fqup_fqus, ex3_intro/
index 5cfee04133ff9ceb2fbca9f34ab962f31d967ec0..8c07020568502c8e748d6c942bd837df29e6cbf5 100644 (file)
@@ -20,7 +20,7 @@ include "basic_2/rt_transition/lpr_lpx.ma".
 (* PROPER PARALLEL RST-TRANSITION FOR CLOSURES ******************************)
 
 inductive fpb (h) (G1) (L1) (T1): relation3 genv lenv term ≝
-| fpb_fqu: â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\8a\90 ⦃G2,L2,T2⦄ → fpb h G1 L1 T1 G2 L2 T2
+| fpb_fqu: â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â¬\82 ⦃G2,L2,T2⦄ → fpb h G1 L1 T1 G2 L2 T2
 | fpb_cpx: ∀T2. ⦃G1,L1⦄ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → fpb h G1 L1 T1 G1 L1 T2
 | fpb_lpx: ∀L2. ⦃G1,L1⦄ ⊢ ⬈[h] L2 → (L1 ≛[T1] L2 → ⊥) → fpb h G1 L1 T1 G1 L2 T1
 .
index c50a6b2b4d39b80fde52e7a9d690b0242a6bbf1d..690e8ff3238c68381c1ae9269c18e9040f22623c 100644 (file)
@@ -21,7 +21,7 @@ include "basic_2/rt_transition/lpr_lpx.ma".
 
 (* Basic_2A1: includes: fleq_fpbq fpbq_lleq *)
 inductive fpbq (h) (G1) (L1) (T1): relation3 genv lenv term ≝
-| fpbq_fquq: â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\8a\90⸮ ⦃G2,L2,T2⦄ → fpbq h G1 L1 T1 G2 L2 T2
+| fpbq_fquq: â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮ ⦃G2,L2,T2⦄ → fpbq h G1 L1 T1 G2 L2 T2
 | fpbq_cpx : ∀T2. ⦃G1,L1⦄ ⊢ T1 ⬈[h] T2 → fpbq h G1 L1 T1 G1 L1 T2
 | fpbq_lpx : ∀L2. ⦃G1,L1⦄ ⊢ ⬈[h] L2 → fpbq h G1 L1 T1 G1 L2 T1
 | fpbq_fdeq: ∀G2,L2,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → fpbq h G1 L1 T1 G2 L2 T2
index 031de39f82e155b30d7a92099069cfaf3669b5f8..c31e2d0ab08ba08ad5a0f8cee0cb0f6d072f0306 100644 (file)
@@ -22,9 +22,9 @@ include "basic_2/rt_transition/lpr.ma".
 
 (* Properties with extended structural successor for closures ***************)
 
-lemma fqu_cpr_trans_sn (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma fqu_cpr_trans_sn (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                                 ∀U2. ⦃G2,L2⦄ ⊢ T2 ➡[h] U2 →
-                                â\88\83â\88\83L,U1. â¦\83G1,L1â¦\84 â\8a¢ â\9e¡[h] L & â¦\83G1,L1â¦\84 â\8a¢ T1 â\9e¡[h] U1 & â¦\83G1,L,U1â¦\84 â\8a\90[b] ⦃G2,L2,U2⦄.
+                                â\88\83â\88\83L,U1. â¦\83G1,L1â¦\84 â\8a¢ â\9e¡[h] L & â¦\83G1,L1â¦\84 â\8a¢ T1 â\9e¡[h] U1 & â¦\83G1,L,U1â¦\84 â¬\82[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
 [ /3 width=5 by lpr_pair, fqu_lref_O, ex3_2_intro/
 | /3 width=5 by cpr_pair_sn, fqu_pair_sn, ex3_2_intro/
@@ -37,9 +37,9 @@ lemma fqu_cpr_trans_sn (h) (b): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐[b] ⦃G
 ]
 qed-.
 
-lemma fqu_cpr_trans_dx (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma fqu_cpr_trans_dx (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                                 ∀U2. ⦃G2,L2⦄ ⊢ T2 ➡[h] U2 →
-                                â\88\83â\88\83L,U1. â¦\83G1,L1â¦\84 â\8a¢ â\9e¡[h] L & â¦\83G1,Lâ¦\84 â\8a¢ T1 â\9e¡[h] U1 & â¦\83G1,L,U1â¦\84 â\8a\90[b] ⦃G2,L2,U2⦄.
+                                â\88\83â\88\83L,U1. â¦\83G1,L1â¦\84 â\8a¢ â\9e¡[h] L & â¦\83G1,Lâ¦\84 â\8a¢ T1 â\9e¡[h] U1 & â¦\83G1,L,U1â¦\84 â¬\82[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
 [ /3 width=5 by lpr_pair, fqu_lref_O, ex3_2_intro/
 | /3 width=5 by cpr_pair_sn, fqu_pair_sn, ex3_2_intro/
@@ -52,13 +52,13 @@ lemma fqu_cpr_trans_dx (h) (b): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐[b] ⦃G
 ]
 qed-.
 
-lemma fqu_lpr_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma fqu_lpr_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                              ∀K2. ⦃G2,L2⦄ ⊢ ➡[h] K2 →
-                             â\88\83â\88\83K1,T. â¦\83G1,L1â¦\84 â\8a¢ â\9e¡[h] K1 & â¦\83G1,L1â¦\84 â\8a¢ T1 â\9e¡[h] T & â¦\83G1,K1,Tâ¦\84 â\8a\90[b] ⦃G2,K2,T2⦄.
+                             â\88\83â\88\83K1,T. â¦\83G1,L1â¦\84 â\8a¢ â\9e¡[h] K1 & â¦\83G1,L1â¦\84 â\8a¢ T1 â\9e¡[h] T & â¦\83G1,K1,Tâ¦\84 â¬\82[b] ⦃G2,K2,T2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
 [ /3 width=5 by lpr_bind_refl_dx, fqu_lref_O, ex3_2_intro/
 | /3 width=5 by cpr_pair_sn, fqu_pair_sn, ex3_2_intro/
-| #p #I #G2 #L2 #V2 #T2 #X #H
+| #p #I #G2 #L2 #V2 #T2 #Hb #X #H
   elim (lpr_inv_pair_sn … H) -H #K2 #W2 #HLK2 #HVW2 #H destruct
   /3 width=5 by cpr_pair_sn, fqu_bind_dx, ex3_2_intro/
 | #p #I #G2 #L2 #V2 #T2 #Hb #X #H
@@ -71,9 +71,9 @@ qed-.
 
 (* Note: does not hold in Basic_2A1 because it requires cpm *)
 (* Note: L1 = K0.ⓛV0 and T1 = #0 require n = 1 *)
-lemma lpr_fqu_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma lpr_fqu_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                              ∀K1. ⦃G1,K1⦄ ⊢ ➡[h] L1 →
-                             â\88\83â\88\83n,K2,T. â¦\83G1,K1â¦\84 â\8a¢ T1 â\9e¡[n,h] T & â¦\83G1,K1,Tâ¦\84 â\8a\90[b] ⦃G2,K2,T2⦄ & ⦃G2,K2⦄ ⊢ ➡[h] L2 & n ≤ 1.
+                             â\88\83â\88\83n,K2,T. â¦\83G1,K1â¦\84 â\8a¢ T1 â\9e¡[n,h] T & â¦\83G1,K1,Tâ¦\84 â¬\82[b] ⦃G2,K2,T2⦄ & ⦃G2,K2⦄ ⊢ ➡[h] L2 & n ≤ 1.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
 [ * #G #K #V #K1 #H
   elim (lpr_inv_pair_dx … H) -H #K0 #V0 #HK0 #HV0 #H destruct
@@ -91,36 +91,36 @@ qed-.
 
 (* Properties with extended optional structural successor for closures ******)
 
-lemma fquq_cpr_trans_sn (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90⸮[b] ⦃G2,L2,T2⦄ →
+lemma fquq_cpr_trans_sn (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] ⦃G2,L2,T2⦄ →
                                  ∀U2. ⦃G2,L2⦄ ⊢ T2 ➡[h] U2 →
-                                 â\88\83â\88\83L,U1. â¦\83G1,L1â¦\84 â\8a¢ â\9e¡[h] L & â¦\83G1,L1â¦\84 â\8a¢ T1 â\9e¡[h] U1 & â¦\83G1,L,U1â¦\84 â\8a\90⸮[b] ⦃G2,L2,U2⦄.
+                                 â\88\83â\88\83L,U1. â¦\83G1,L1â¦\84 â\8a¢ â\9e¡[h] L & â¦\83G1,L1â¦\84 â\8a¢ T1 â\9e¡[h] U1 & â¦\83G1,L,U1â¦\84 â¬\82⸮[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 cases H -H
 [ #HT12 elim (fqu_cpr_trans_sn … HT12 … HTU2) /3 width=5 by fqu_fquq, ex3_2_intro/
 | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
 ]
 qed-.
 
-lemma fquq_cpr_trans_dx (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90⸮[b] ⦃G2,L2,T2⦄ →
+lemma fquq_cpr_trans_dx (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] ⦃G2,L2,T2⦄ →
                                  ∀U2. ⦃G2,L2⦄ ⊢ T2 ➡[h] U2 →
-                                 â\88\83â\88\83L,U1. â¦\83G1,L1â¦\84 â\8a¢ â\9e¡[h] L & â¦\83G1,Lâ¦\84 â\8a¢ T1 â\9e¡[h] U1 & â¦\83G1,L,U1â¦\84 â\8a\90⸮[b] ⦃G2,L2,U2⦄.
+                                 â\88\83â\88\83L,U1. â¦\83G1,L1â¦\84 â\8a¢ â\9e¡[h] L & â¦\83G1,Lâ¦\84 â\8a¢ T1 â\9e¡[h] U1 & â¦\83G1,L,U1â¦\84 â¬\82⸮[b] ⦃G2,L2,U2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 cases H -H
 [ #HT12 elim (fqu_cpr_trans_dx … HT12 … HTU2) /3 width=5 by fqu_fquq, ex3_2_intro/
 | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
 ]
 qed-.
 
-lemma fquq_lpr_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90⸮[b] ⦃G2,L2,T2⦄ →
+lemma fquq_lpr_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] ⦃G2,L2,T2⦄ →
                               ∀K2. ⦃G2,L2⦄ ⊢ ➡[h] K2 →
-                              â\88\83â\88\83K1,T. â¦\83G1,L1â¦\84 â\8a¢ â\9e¡[h] K1 & â¦\83G1,L1â¦\84 â\8a¢ T1 â\9e¡[h] T & â¦\83G1,K1,Tâ¦\84 â\8a\90⸮[b] ⦃G2,K2,T2⦄.
+                              â\88\83â\88\83K1,T. â¦\83G1,L1â¦\84 â\8a¢ â\9e¡[h] K1 & â¦\83G1,L1â¦\84 â\8a¢ T1 â\9e¡[h] T & â¦\83G1,K1,Tâ¦\84 â¬\82⸮[b] ⦃G2,K2,T2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K2 #HLK2 cases H -H
 [ #H12 elim (fqu_lpr_trans … H12 … HLK2) /3 width=5 by fqu_fquq, ex3_2_intro/
 | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
 ]
 qed-.
 
-lemma lpr_fquq_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90⸮[b] ⦃G2,L2,T2⦄ →
+lemma lpr_fquq_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] ⦃G2,L2,T2⦄ →
                               ∀K1. ⦃G1,K1⦄ ⊢ ➡[h] L1 →
-                              â\88\83â\88\83n,K2,T. â¦\83G1,K1â¦\84 â\8a¢ T1 â\9e¡[n,h] T & â¦\83G1,K1,Tâ¦\84 â\8a\90⸮[b] ⦃G2,K2,T2⦄ & ⦃G2,K2⦄ ⊢ ➡[h] L2 & n ≤ 1.
+                              â\88\83â\88\83n,K2,T. â¦\83G1,K1â¦\84 â\8a¢ T1 â\9e¡[n,h] T & â¦\83G1,K1,Tâ¦\84 â¬\82⸮[b] ⦃G2,K2,T2⦄ & ⦃G2,K2⦄ ⊢ ➡[h] L2 & n ≤ 1.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #HKL1 cases H -H
 [ #H12 elim (lpr_fqu_trans … H12 … HKL1) -L1 /3 width=7 by fqu_fquq, ex4_3_intro/
 | * #H1 #H2 #H3 destruct /2 width=7 by ex4_3_intro/
index 312265d54c13701eea6d91375254667e1ac95a3d..54d5d3bc86d565fd4fb6bd20beac0efcf0826636 100644 (file)
@@ -33,7 +33,7 @@ fact cpr_conf_lpr_atom_atom (h):
 
 fact cpr_conf_lpr_atom_delta (h):
    ∀G0,L0,i. (
-      â\88\80G,L,T. â¦\83G0,L0,#iâ¦\84 â\8a\90+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
+      â\88\80G,L,T. â¦\83G0,L0,#iâ¦\84 â¬\82+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
    ) →
    ∀K0,V0. ⬇*[i] L0 ≘ K0.ⓓV0 →
    ∀V2. ⦃G0,K0⦄ ⊢ V0 ➡[h] V2 → ∀T2. ⬆*[↑i] V2 ≘ T2 →
@@ -54,7 +54,7 @@ qed-.
 (* Basic_1: includes: pr0_delta_delta pr2_delta_delta *)
 fact cpr_conf_lpr_delta_delta (h):
    ∀G0,L0,i. (
-      â\88\80G,L,T. â¦\83G0,L0,#iâ¦\84 â\8a\90+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
+      â\88\80G,L,T. â¦\83G0,L0,#iâ¦\84 â¬\82+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
    ) →
    ∀K0,V0. ⬇*[i] L0 ≘ K0.ⓓV0 →
    ∀V1. ⦃G0,K0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⬆*[↑i] V1 ≘ T1 →
@@ -79,7 +79,7 @@ qed-.
 
 fact cpr_conf_lpr_bind_bind (h):
    ∀p,I,G0,L0,V0,T0. (
-      â\88\80G,L,T. â¦\83G0,L0,â\93\91{p,I}V0.T0â¦\84 â\8a\90+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
+      â\88\80G,L,T. â¦\83G0,L0,â\93\91{p,I}V0.T0â¦\84 â¬\82+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
    ) →
    ∀V1. ⦃G0,L0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⦃G0,L0.ⓑ{I}V0⦄ ⊢ T0 ➡[h] T1 →
    ∀V2. ⦃G0,L0⦄ ⊢ V0 ➡[h] V2 → ∀T2. ⦃G0,L0.ⓑ{I}V0⦄ ⊢ T0 ➡[h] T2 →
@@ -94,7 +94,7 @@ qed-.
 
 fact cpr_conf_lpr_bind_zeta (h):
    ∀G0,L0,V0,T0. (
-      â\88\80G,L,T. â¦\83G0,L0,+â\93\93V0.T0â¦\84 â\8a\90+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
+      â\88\80G,L,T. â¦\83G0,L0,+â\93\93V0.T0â¦\84 â¬\82+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
    ) →
    ∀V1. ⦃G0,L0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⦃G0,L0.ⓓV0⦄ ⊢ T0 ➡[h] T1 →
    ∀T2. ⬆*[1]T2 ≘ T0 → ∀X2. ⦃G0,L0⦄ ⊢ T2 ➡[h] X2 →  
@@ -109,7 +109,7 @@ qed-.
 
 fact cpr_conf_lpr_zeta_zeta (h):
    ∀G0,L0,V0,T0. (
-      â\88\80G,L,T. â¦\83G0,L0,+â\93\93V0.T0â¦\84 â\8a\90+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
+      â\88\80G,L,T. â¦\83G0,L0,+â\93\93V0.T0â¦\84 â¬\82+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
    ) →
    ∀T1. ⬆*[1] T1 ≘ T0 → ∀X1. ⦃G0,L0⦄ ⊢ T1 ➡[h] X1 →
    ∀T2. ⬆*[1] T2 ≘ T0 → ∀X2. ⦃G0,L0⦄ ⊢ T2 ➡[h] X2 →
@@ -124,7 +124,7 @@ qed-.
 
 fact cpr_conf_lpr_flat_flat (h):
    ∀I,G0,L0,V0,T0. (
-      â\88\80G,L,T. â¦\83G0,L0,â\93\95{I}V0.T0â¦\84 â\8a\90+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
+      â\88\80G,L,T. â¦\83G0,L0,â\93\95{I}V0.T0â¦\84 â¬\82+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
    ) →
    ∀V1. ⦃G0,L0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⦃G0,L0⦄ ⊢ T0 ➡[h] T1 →
    ∀V2. ⦃G0,L0⦄ ⊢ V0 ➡[h] V2 → ∀T2. ⦃G0,L0⦄ ⊢ T0 ➡[h] T2 →
@@ -139,7 +139,7 @@ qed-.
 
 fact cpr_conf_lpr_flat_eps (h):
    ∀G0,L0,V0,T0. (
-      â\88\80G,L,T. â¦\83G0,L0,â\93\9dV0.T0â¦\84 â\8a\90+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
+      â\88\80G,L,T. â¦\83G0,L0,â\93\9dV0.T0â¦\84 â¬\82+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
    ) →
    ∀V1,T1. ⦃G0,L0⦄ ⊢ T0 ➡[h] T1 → ∀T2. ⦃G0,L0⦄ ⊢ T0 ➡[h] T2 →
    ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 →
@@ -152,7 +152,7 @@ qed-.
 
 fact cpr_conf_lpr_eps_eps (h):
    ∀G0,L0,V0,T0. (
-      â\88\80G,L,T. â¦\83G0,L0,â\93\9dV0.T0â¦\84 â\8a\90+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
+      â\88\80G,L,T. â¦\83G0,L0,â\93\9dV0.T0â¦\84 â¬\82+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
    ) →
    ∀T1. ⦃G0,L0⦄ ⊢ T0 ➡[h] T1 → ∀T2. ⦃G0,L0⦄ ⊢ T0 ➡[h] T2 →
    ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 →
@@ -165,7 +165,7 @@ qed-.
 
 fact cpr_conf_lpr_flat_beta (h):
    ∀p,G0,L0,V0,W0,T0. (
-      â\88\80G,L,T. â¦\83G0,L0,â\93\90V0.â\93\9b{p}W0.T0â¦\84 â\8a\90+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
+      â\88\80G,L,T. â¦\83G0,L0,â\93\90V0.â\93\9b{p}W0.T0â¦\84 â¬\82+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
    ) →
    ∀V1. ⦃G0,L0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⦃G0,L0⦄ ⊢ ⓛ{p}W0.T0 ➡[h] T1 →
    ∀V2. ⦃G0,L0⦄ ⊢ V0 ➡[h] V2 → ∀W2. ⦃G0,L0⦄ ⊢ W0 ➡[h] W2 → ∀T2. ⦃G0,L0.ⓛW0⦄ ⊢ T0 ➡[h] T2 →
@@ -187,7 +187,7 @@ qed-.
 *)
 fact cpr_conf_lpr_flat_theta (h):
    ∀p,G0,L0,V0,W0,T0. (
-      â\88\80G,L,T. â¦\83G0,L0,â\93\90V0.â\93\93{p}W0.T0â¦\84 â\8a\90+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
+      â\88\80G,L,T. â¦\83G0,L0,â\93\90V0.â\93\93{p}W0.T0â¦\84 â¬\82+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
    ) →
    ∀V1. ⦃G0,L0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⦃G0,L0⦄ ⊢ ⓓ{p}W0.T0 ➡[h] T1 →
    ∀V2. ⦃G0,L0⦄ ⊢ V0 ➡[h] V2 → ∀U2. ⬆*[1] V2 ≘ U2 →
@@ -212,7 +212,7 @@ qed-.
 
 fact cpr_conf_lpr_beta_beta (h):
    ∀p,G0,L0,V0,W0,T0. (
-      â\88\80G,L,T. â¦\83G0,L0,â\93\90V0.â\93\9b{p}W0.T0â¦\84 â\8a\90+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
+      â\88\80G,L,T. â¦\83G0,L0,â\93\90V0.â\93\9b{p}W0.T0â¦\84 â¬\82+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
    ) →
    ∀V1. ⦃G0,L0⦄ ⊢ V0 ➡[h] V1 → ∀W1. ⦃G0,L0⦄ ⊢ W0 ➡[h] W1 → ∀T1. ⦃G0,L0.ⓛW0⦄ ⊢ T0 ➡[h] T1 →
    ∀V2. ⦃G0,L0⦄ ⊢ V0 ➡[h] V2 → ∀W2. ⦃G0,L0⦄ ⊢ W0 ➡[h] W2 → ∀T2. ⦃G0,L0.ⓛW0⦄ ⊢ T0 ➡[h] T2 →
@@ -231,7 +231,7 @@ qed-.
 (* Basic_1: was: pr0_upsilon_upsilon *)
 fact cpr_conf_lpr_theta_theta (h):
    ∀p,G0,L0,V0,W0,T0. (
-      â\88\80G,L,T. â¦\83G0,L0,â\93\90V0.â\93\93{p}W0.T0â¦\84 â\8a\90+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
+      â\88\80G,L,T. â¦\83G0,L0,â\93\90V0.â\93\93{p}W0.T0â¦\84 â¬\82+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
    ) →
    ∀V1. ⦃G0,L0⦄ ⊢ V0 ➡[h] V1 → ∀U1. ⬆*[1] V1 ≘ U1 →
    ∀W1. ⦃G0,L0⦄ ⊢ W0 ➡[h] W1 → ∀T1. ⦃G0,L0.ⓓW0⦄ ⊢ T0 ➡[h] T1 →
index e6393d4aedfafc6c29fe5f6158323d98ebbd2cac..b73fe99b5fe3146b0c23af1de9058bea2ca388c5 100644 (file)
@@ -19,9 +19,9 @@ include "basic_2/rt_transition/lpx.ma".
 
 (* Properties with extended structural successor for closures ***************)
 
-lemma lpx_fqu_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma lpx_fqu_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                              ∀K1. ⦃G1,K1⦄ ⊢ ⬈[h] L1 →
-                             â\88\83â\88\83K2,T. â¦\83G1,K1â¦\84 â\8a¢ T1 â¬\88[h] T & â¦\83G1,K1,Tâ¦\84 â\8a\90[b] ⦃G2,K2,T2⦄ & ⦃G2,K2⦄ ⊢ ⬈[h] L2.
+                             â\88\83â\88\83K2,T. â¦\83G1,K1â¦\84 â\8a¢ T1 â¬\88[h] T & â¦\83G1,K1,Tâ¦\84 â¬\82[b] ⦃G2,K2,T2⦄ & ⦃G2,K2⦄ ⊢ ⬈[h] L2.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
 [ #I #G #K #V #K1 #H
   elim (lpx_inv_pair_dx … H) -H #K0 #V0 #HK0 #HV0 #H destruct
@@ -37,13 +37,13 @@ lemma lpx_fqu_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐[b] ⦃G2,L
 ]
 qed-.
 
-lemma fqu_lpx_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma fqu_lpx_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                              ∀K2. ⦃G2,L2⦄ ⊢ ⬈[h] K2 →
-                             â\88\83â\88\83K1,T. â¦\83G1,L1â¦\84 â\8a¢ â¬\88[h] K1 & â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] T & â¦\83G1,K1,Tâ¦\84 â\8a\90[b] ⦃G2,K2,T2⦄.
+                             â\88\83â\88\83K1,T. â¦\83G1,L1â¦\84 â\8a¢ â¬\88[h] K1 & â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] T & â¦\83G1,K1,Tâ¦\84 â¬\82[b] ⦃G2,K2,T2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
 [ /3 width=5 by lpx_bind_refl_dx, fqu_lref_O, ex3_2_intro/
 | /3 width=5 by cpx_pair_sn, fqu_pair_sn, ex3_2_intro/
-| #p #I #G2 #L2 #V2 #T2 #X #H
+| #p #I #G2 #L2 #V2 #T2 #Hb #X #H
   elim (lpx_inv_pair_sn … H) -H #K2 #W2 #HLK2 #HVW2 #H destruct
   /3 width=5 by cpx_pair_sn, fqu_bind_dx, ex3_2_intro/
 | #p #I #G2 #L2 #V2 #T2 #Hb #X #H
@@ -56,18 +56,18 @@ qed-.
 
 (* Properties with extended optional structural successor for closures ******)
 
-lemma lpx_fquq_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90⸮[b] ⦃G2,L2,T2⦄ →
+lemma lpx_fquq_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] ⦃G2,L2,T2⦄ →
                               ∀K1. ⦃G1,K1⦄ ⊢ ⬈[h] L1 →
-                              â\88\83â\88\83K2,T. â¦\83G1,K1â¦\84 â\8a¢ T1 â¬\88[h] T & â¦\83G1,K1,Tâ¦\84 â\8a\90⸮[b] ⦃G2,K2,T2⦄ & ⦃G2,K2⦄ ⊢ ⬈[h] L2.
+                              â\88\83â\88\83K2,T. â¦\83G1,K1â¦\84 â\8a¢ T1 â¬\88[h] T & â¦\83G1,K1,Tâ¦\84 â¬\82⸮[b] ⦃G2,K2,T2⦄ & ⦃G2,K2⦄ ⊢ ⬈[h] L2.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #HKL1 cases H -H
 [ #H12 elim (lpx_fqu_trans … H12 … HKL1) -L1 /3 width=5 by fqu_fquq, ex3_2_intro/
 | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
 ]
 qed-.
 
-lemma fquq_lpx_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90⸮[b] ⦃G2,L2,T2⦄ →
+lemma fquq_lpx_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] ⦃G2,L2,T2⦄ →
                               ∀K2. ⦃G2,L2⦄ ⊢ ⬈[h] K2 →
-                              â\88\83â\88\83K1,T. â¦\83G1,L1â¦\84 â\8a¢ â¬\88[h] K1 & â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] T & â¦\83G1,K1,Tâ¦\84 â\8a\90⸮[b] ⦃G2,K2,T2⦄.
+                              â\88\83â\88\83K1,T. â¦\83G1,L1â¦\84 â\8a¢ â¬\88[h] K1 & â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] T & â¦\83G1,K1,Tâ¦\84 â¬\82⸮[b] ⦃G2,K2,T2⦄.
 #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K2 #HLK2 cases H -H
 [ #H12 elim (fqu_lpx_trans … H12 … HLK2) /3 width=5 by fqu_fquq, ex3_2_intro/
 | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
index 6d9db8b65fcf09a7fa2771db590327d2e3423712..b610f09586a981a271454aaa4ecd7fbebecc2f85 100644 (file)
@@ -27,7 +27,7 @@ include "basic_2/rt_transition/rpx_fqup.ma".
 (* Note: This invalidates rpxs_cpx_conf: "∀h, G. s_r_confluent1 … (cpx h G) (rpxs h G)" *)
 lemma rpx_cpx_conf_fsge (h) (G): ∀L0,T0,T1. ⦃G,L0⦄ ⊢ T0 ⬈[h] T1 →
                                  ∀L2. ⦃G,L0⦄ ⊢⬈[h,T0] L2 → ⦃L2,T1⦄ ⊆ ⦃L0,T0⦄.
-#h #G0 #L0 #T0 @(fqup_wf_ind_eq (â\92») … G0 L0 T0) -G0 -L0 -T0
+#h #G0 #L0 #T0 @(fqup_wf_ind_eq (â\93\89) … G0 L0 T0) -G0 -L0 -T0
 #G #L #T #IH #G0 #L0 * *
 [ #s #HG #HL #HT #X #HX #Y #HY destruct -IH
   elim (cpx_inv_sort1 … HX) -HX #H destruct
index ae22b5b3c177c1aab1178a62a449b86a176b4fbf..39cf1ed8b9b2556eaa39ef72ac1e601900dd3ae6 100644 (file)
@@ -81,8 +81,8 @@ table {
           }
         ]
         [ { "unbound context-sensitive parallel rt-computation" * } {
-             [ [ "refinement for lenvs on selected entries" ] "lsubsx" + "( ? ⊢ ? ⊆ⓧ[?,?] ? )" "lsubsx_lfsx" + "lsubsx_lsubsx" * ]
-             [ [ "strongly normalizing for lenvs on referred entries" ] "rdsx" + "( ? ⊢ ⬈*[?,?] 𝐒⦃?⦄ )" "rdsx_length" + "rdsx_drops" + "rdsx_fqup" + "rdsx_cpxs" + "rdsx_csx" + "rdsx_rdsx" * ]
+             [ [ "compatibility for lenvs on selected entries" ] "jsx" + "( ? ⊢ ? ⊒[?,?] ? )" "jsx_rsx" + "jsx_jsx" * ]
+             [ [ "strongly normalizing for lenvs on referred entries" ] "rsx" + "( ? ⊢ ⬈*[?,?] 𝐒⦃?⦄ )" "rsx_length" + "rsx_drops" + "rsx_fqup" + "rsx_cpxs" + "rsx_csx" + "rsx_rsx" * ]
              [ [ "strongly normalizing for term vectors" ] "csx_vector" + "( ⦃?,?⦄ ⊢ ⬈*[?] 𝐒⦃?⦄ )" "csx_cnx_vector" + "csx_csx_vector" * ]
              [ [ "strongly normalizing for terms" ] "csx" + "( ⦃?,?⦄ ⊢ ⬈*[?] 𝐒⦃?⦄ )" "csx_simple" + "csx_simple_theq" + "csx_drops" + "csx_fqus" + "csx_lsubr" + "csx_rdeq" + "csx_fdeq" + "csx_aaa" + "csx_gcp" + "csx_gcr" + "csx_lpx" + "csx_cnx" + "csx_fpbq" + "csx_cpxs" + "csx_lpxs" + "csx_csx" * ]
              [ [ "for lenvs on all entries" ] "lpxs" + "( ⦃?,?⦄ ⊢ ⬈*[?] ? )" "lpxs_length" + "lpxs_drops" + "lpxs_rdeq" + "lpxs_fdeq" + "lpxs_aaa" + "lpxs_lpx" + "lpxs_cpxs" + "lpxs_lpxs" * ]
diff --git a/matita/matita/contribs/lambdadelta/static_2/etc/scl/clearsn_3.etc b/matita/matita/contribs/lambdadelta/static_2/etc/scl/clearsn_3.etc
new file mode 100644 (file)
index 0000000..d430b8d
--- /dev/null
@@ -0,0 +1,19 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
+
+notation "hvbox( L1 ⊐ⓧ [ break term 46 f ] break term 46 L2 )"
+   non associative with precedence 45
+   for @{ 'ClearSn $f $L1 $L2 }.
diff --git a/matita/matita/contribs/lambdadelta/static_2/etc/scl/scl.etc b/matita/matita/contribs/lambdadelta/static_2/etc/scl/scl.etc
new file mode 100644 (file)
index 0000000..9d7e924
--- /dev/null
@@ -0,0 +1,110 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "static_2/notation/relations/clearsn_3.ma".
+include "static_2/syntax/cext2.ma".
+include "static_2/relocation/sex.ma".
+
+(* CLEAR FOR LOCAL ENVIRONMENTS ON SELECTED ENTRIES *************************)
+
+definition ccl: relation3 lenv bind bind ≝ λL,I1,I2. BUnit Void = I2.
+
+definition scl: rtmap → relation lenv ≝ sex ccl (cext2 ceq).
+
+interpretation
+  "clear (local environment)"
+  'ClearSn f L1 L2 = (scl f L1 L2).
+
+(* Basic eliminators ********************************************************)
+
+lemma scl_ind (Q:rtmap→relation lenv): 
+      (∀f. Q f (⋆) (⋆)) →
+      (∀f,I,K1,K2. K1 ⊐ⓧ[f] K2 → Q f K1 K2 → Q (⫯f) (K1.ⓘ{I}) (K2.ⓘ{I})) →
+      (∀f,I,K1,K2. K1 ⊐ⓧ[f] K2 → Q f K1 K2 → Q (↑f) (K1.ⓘ{I}) (K2.ⓧ)) →
+      ∀f,L1,L2. L1 ⊐ⓧ[f] L2 → Q f L1 L2.
+#Q #IH1 #IH2 #IH3 #f #L1 #L2 #H elim H -f -L1 -L2 
+[ //
+| #f #I1 #I2 #K1 #K2 #HK #H #IH destruct /2 by/
+| #f #I1 #I2 #K1 #K2 #HK * #I [| #V1 #V2 #H ] #IH destruct /2 by/
+]
+qed-.
+
+(* Basic inversion lemmas ***************************************************)
+
+lemma scl_inv_atom_sn: ∀g,L2. ⋆ ⊐ⓧ[g] L2 → L2 = ⋆.
+/2 width=4 by sex_inv_atom1/ qed-.
+
+lemma scl_inv_push_sn: ∀f,I,K1,L2. K1.ⓘ{I} ⊐ⓧ[⫯f] L2 →
+                       ∃∃K2. K1 ⊐ⓧ[f] K2 & L2 = K2.ⓘ{I}.
+#f #I #K1 #L2 #H
+elim (sex_inv_push1 … H) -H #J #K2 #HK12 *
+/2 width=3 by ex2_intro/
+qed-.
+
+lemma scl_inv_next_sn: ∀f,I,K1,L2. K1.ⓘ{I} ⊐ⓧ[↑f] L2 →
+                       ∃∃K2. K1 ⊐ⓧ[f] K2 & L2 = K2.ⓧ.
+#f #I #K1 #L2 #H
+elim (sex_inv_next1 … H) -H
+/2 width=3 by ex2_intro/
+qed-.
+
+(* Advanced inversion lemmas ************************************************)
+
+lemma scl_inv_bind_sn_gen: ∀g,I,K1,L2. K1.ⓘ{I} ⊐ⓧ[g] L2 →
+                           ∨∨ ∃∃f,K2. K1 ⊐ⓧ[f] K2 & g = ⫯f & L2 = K2.ⓘ{I}
+                            | ∃∃f,K2. K1 ⊐ⓧ[f] K2 & g = ↑f & L2 = K2.ⓧ.
+#g #I #K1 #L2 #H
+elim (pn_split g) * #f #Hf destruct
+[ elim (scl_inv_push_sn … H) -H
+| elim (scl_inv_next_sn … H) -H
+]
+/3 width=5 by ex3_2_intro, or_intror, or_introl/
+qed-.
+
+(* Advanced forward lemmas **************************************************)
+
+lemma scl_fwd_bind_sn: ∀g,I1,K1,L2. K1.ⓘ{I1} ⊐ⓧ[g] L2 →
+                       ∃∃I2,K2. K1 ⊐ⓧ[⫱g] K2 & L2 = K2.ⓘ{I2}.
+#g #I1 #K1 #L2
+elim (pn_split g) * #f #Hf destruct #H
+[ elim (scl_inv_push_sn … H) -H
+| elim (scl_inv_next_sn … H) -H
+]
+/2 width=4 by ex2_2_intro/
+qed-.
+
+(* Basic properties *********************************************************)
+
+lemma scl_atom: ∀f. ⋆ ⊐ⓧ[f] ⋆.
+/by sex_atom/ qed.
+
+lemma scl_push: ∀f,K1,K2. K1 ⊐ⓧ[f] K2 → ∀I. K1.ⓘ{I} ⊐ⓧ[⫯f] K2.ⓘ{I}.
+#f #K1 #K2 #H * /3 width=1 by sex_push, ext2_unit, ext2_pair/
+qed.
+
+lemma scl_next: ∀f,K1,K2. K1 ⊐ⓧ[f] K2 → ∀I. K1.ⓘ{I} ⊐ⓧ[↑f] K2.ⓧ.
+/2 width=1 by sex_next/ qed.
+
+lemma scl_eq_repl_back: ∀L1,L2. eq_repl_back … (λf. L1 ⊐ⓧ[f] L2).
+/2 width=3 by sex_eq_repl_back/ qed-.
+
+lemma scl_eq_repl_fwd: ∀L1,L2. eq_repl_fwd … (λf. L1 ⊐ⓧ[f] L2).
+/2 width=3 by sex_eq_repl_fwd/ qed-.
+
+(* Advanced properties ******************************************************)
+
+lemma scl_refl: ∀f. 𝐈⦃f⦄ → reflexive … (scl f).
+#f #Hf #L elim L -L
+/3 width=3 by scl_eq_repl_back, scl_push, eq_push_inv_isid/
+qed.
diff --git a/matita/matita/contribs/lambdadelta/static_2/etc/scl/scl_scl.etc b/matita/matita/contribs/lambdadelta/static_2/etc/scl/scl_scl.etc
new file mode 100644 (file)
index 0000000..6ca737b
--- /dev/null
@@ -0,0 +1,36 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "static_2/relocation/scl.ma".
+
+(* CLEAR FOR LOCAL ENVIRONMENTS ON SELECTED ENTRIES *************************)
+
+(* Main properties **********************************************************)
+
+theorem scl_fix: ∀f,L1,L. L1 ⊐ⓧ[f] L →
+                 ∀L2. L ⊐ⓧ[f] L2 → L = L2.
+#f #L1 #L #H @(scl_ind … H) -f -L1 -L
+[ #f #L2 #H
+  >(scl_inv_atom_sn … H) -L2 //
+| #f #I #K1 #K2 #_ #IH #L2 #H
+  elim (scl_inv_push_sn … H) -H /3 width=1 by eq_f2/
+| #f #I #K1 #K2 #_ #IH #L2 #H
+  elim (scl_inv_next_sn … H) -H /3 width=1 by eq_f2/
+]
+qed-.
+
+theorem scl_trans: ∀f. Transitive … (scl f).
+#f #L1 #L #H1 #L2 #H2
+<(scl_fix … H1 … H2) -L2 //
+qed-.
diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/freeplus_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/freeplus_3.ma
new file mode 100644 (file)
index 0000000..19dc43e
--- /dev/null
@@ -0,0 +1,19 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
+
+notation "hvbox( L ⊢ 𝐅 + ⦃ break term 46 T ⦄ ≘ break term 46 f )"
+   non associative with precedence 45
+   for @{ 'FreePlus $L $T $f }.
diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/freestar_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/freestar_3.ma
deleted file mode 100644 (file)
index 02c3385..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-(**************************************************************************)
-(*       ___                                                              *)
-(*      ||M||                                                             *)
-(*      ||A||       A project by Andrea Asperti                           *)
-(*      ||T||                                                             *)
-(*      ||I||       Developers:                                           *)
-(*      ||T||         The HELM team.                                      *)
-(*      ||A||         http://helm.cs.unibo.it                             *)
-(*      \   /                                                             *)
-(*       \ /        This file is distributed under the terms of the       *)
-(*        v         GNU General Public License Version 2                  *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-
-notation "hvbox( L ⊢ 𝐅 * ⦃ break term 46 T ⦄ ≘ break term 46 f )"
-   non associative with precedence 45
-   for @{ 'FreeStar $L $T $f }.
index 413553ccd9c2bffe3a9a1a64c523aa073fa2246b..9847c85317702d4084c1f3ccc9073df93d77cab2 100644 (file)
@@ -14,6 +14,6 @@
 
 (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
 
-notation "hvbox( ⦃ term 46 L1, break term 46 f1 ⦄ ⫃ 𝐅* ⦃ break term 46 L2, break term 46 f2 ⦄ )"
+notation "hvbox( ⦃ term 46 L1, break term 46 f1 ⦄ ⫃ 𝐅+ ⦃ break term 46 L2, break term 46 f2 ⦄ )"
    non associative with precedence 45
    for @{ 'LRSubEqF $L1 $f1 $L2 $f2 }.
index 72533dc3c7427b903857edf601e4e4c186ca6a87..a8dfc7e72c7089ea42d1eae4a23decd1430f3b24 100644 (file)
@@ -14,6 +14,6 @@
 
 (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
 
-notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â\8a\90 ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )"
+notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â¬\82 ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )"
    non associative with precedence 45
    for @{ 'SupTerm $G1 $L1 $T1 $G2 $L2 $T2 }.
index 2e12296b42284154ed7fff78a51668d8e24c7be9..011caa06b7ed76b9ab6a40db6ae56f7028d7a429 100644 (file)
@@ -14,6 +14,6 @@
 
 (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
 
-notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â\8a\90 [ break term 46 b ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )"
+notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â¬\82 [ break term 46 b ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )"
    non associative with precedence 45
    for @{ 'SupTerm $b $G1 $L1 $T1 $G2 $L2 $T2 }.
index 62a8cbb0bfd3eecc6571ec9fe98123f355177c01..f52c205c37096fa3456d77247514f1cd331ef235 100644 (file)
@@ -14,6 +14,6 @@
 
 (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
 
-notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â\8a\90⸮ ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )"
+notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â¬\82⸮ ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )"
    non associative with precedence 45
    for @{ 'SupTermOpt $G1 $L1 $T1 $G2 $L2 $T2 }.
index dd6db78c2424dbb4c4a3a91cd253233d8f112702..60b22c90d4400747c57591934c5d913ed2469703 100644 (file)
@@ -14,6 +14,6 @@
 
 (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
 
-notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â\8a\90⸮ [ break term 46 b ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )"
+notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â¬\82⸮ [ break term 46 b ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )"
    non associative with precedence 45
    for @{ 'SupTermOpt $b $G1 $L1 $T1 $G2 $L2 $T2 }.
index 8a8a9587600e700ed9abaab7729c425057977dcf..5b60a957d2f824b14c382644a43d97718f1531cc 100644 (file)
@@ -14,6 +14,6 @@
 
 (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
 
-notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â\8a\90 + ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )"
+notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â¬\82 + ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )"
    non associative with precedence 45
    for @{ 'SupTermPlus $G1 $L1 $T1 $G2 $L2 $T2 }.
index 49b6472fe047fae21d6d5d827c69c9075f4604a0..d4b9a8669437861fe669c6c7889e0959f0538c1a 100644 (file)
@@ -14,6 +14,6 @@
 
 (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
 
-notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â\8a\90 + [ break term 46 b ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )"
+notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â¬\82 + [ break term 46 b ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )"
    non associative with precedence 45
    for @{ 'SupTermPlus $b $G1 $L1 $T1 $G2 $L2 $T2 }.
index 279b363e72981dae818c3a76a5c2fc8a55855aed..1a9c2442b81349762d4417238e5e398793db5f42 100644 (file)
@@ -14,6 +14,6 @@
 
 (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
 
-notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â\8a\90 * ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )"
+notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â¬\82 * ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )"
    non associative with precedence 45
    for @{ 'SupTermStar $G1 $L1 $T1 $G2 $L2 $T2 }.
index 8b0ac452c6c1d240d48fcd8ce512438cb14f721a..3d137035c24a911740ae914ab8ccc1b9f3706033 100644 (file)
@@ -14,6 +14,6 @@
 
 (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
 
-notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â\8a\90 * [ break term 46 b ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )"
+notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â¬\82 * [ break term 46 b ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )"
    non associative with precedence 45
    for @{ 'SupTermStar $b $G1 $L1 $T1 $G2 $L2 $T2 }.
index df964c8e92c59efe386f6224ef56a6a580fd964a..28cfb9ce0c5c928cfea1bb6f6b06a67af7c038c8 100644 (file)
@@ -30,55 +30,55 @@ interpretation "plus-iterated structural successor (closure)"
 
 (* Basic properties *********************************************************)
 
-lemma fqu_fqup: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
-                â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄.
+lemma fqu_fqup: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
+                â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄.
 /2 width=1 by tri_inj/ qed.
 
 lemma fqup_strap1: ∀b,G1,G,G2,L1,L,L2,T1,T,T2.
-                   â¦\83G1,L1,T1â¦\84 â\8a\90+[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
-                   â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄.
+                   â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
+                   â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄.
 /2 width=5 by tri_step/ qed.
 
 lemma fqup_strap2: ∀b,G1,G,G2,L1,L,L2,T1,T,T2.
-                   â¦\83G1,L1,T1â¦\84 â\8a\90[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄ →
-                   â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄.
+                   â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82+[b] ⦃G2,L2,T2⦄ →
+                   â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄.
 /2 width=5 by tri_TC_strap/ qed.
 
-lemma fqup_pair_sn: â\88\80b,I,G,L,V,T. â¦\83G,L,â\91¡{I}V.Tâ¦\84 â\8a\90+[b] ⦃G,L,V⦄.
+lemma fqup_pair_sn: â\88\80b,I,G,L,V,T. â¦\83G,L,â\91¡{I}V.Tâ¦\84 â¬\82+[b] ⦃G,L,V⦄.
 /2 width=1 by fqu_pair_sn, fqu_fqup/ qed.
 
-lemma fqup_bind_dx: ∀b,p,I,G,L,V,T. ⦃G,L,ⓑ{p,I}V.T⦄ ⊐+[b] ⦃G,L.ⓑ{I}V,T⦄.
-/2 width=1 by fqu_bind_dx, fqu_fqup/ qed.
+lemma fqup_bind_dx: ∀p,I,G,L,V,T. ⦃G,L,ⓑ{p,I}V.T⦄ ⬂+[Ⓣ] ⦃G,L.ⓑ{I}V,T⦄.
+/3 width=1 by fqu_bind_dx, fqu_fqup/ qed.
 
-lemma fqup_clear: â\88\80p,I,G,L,V,T. â¦\83G,L,â\93\91{p,I}V.Tâ¦\84 â\8a\90+[Ⓕ] ⦃G,L.ⓧ,T⦄.
+lemma fqup_clear: â\88\80p,I,G,L,V,T. â¦\83G,L,â\93\91{p,I}V.Tâ¦\84 â¬\82+[Ⓕ] ⦃G,L.ⓧ,T⦄.
 /3 width=1 by fqu_clear, fqu_fqup/ qed.
 
-lemma fqup_flat_dx: â\88\80b,I,G,L,V,T. â¦\83G,L,â\93\95{I}V.Tâ¦\84 â\8a\90+[b] ⦃G,L,T⦄.
+lemma fqup_flat_dx: â\88\80b,I,G,L,V,T. â¦\83G,L,â\93\95{I}V.Tâ¦\84 â¬\82+[b] ⦃G,L,T⦄.
 /2 width=1 by fqu_flat_dx, fqu_fqup/ qed.
 
-lemma fqup_flat_dx_pair_sn: â\88\80b,I1,I2,G,L,V1,V2,T. â¦\83G,L,â\93\95{I1}V1.â\91¡{I2}V2.Tâ¦\84 â\8a\90+[b] ⦃G,L,V2⦄.
+lemma fqup_flat_dx_pair_sn: â\88\80b,I1,I2,G,L,V1,V2,T. â¦\83G,L,â\93\95{I1}V1.â\91¡{I2}V2.Tâ¦\84 â¬\82+[b] ⦃G,L,V2⦄.
 /2 width=5 by fqu_pair_sn, fqup_strap1/ qed.
 
-lemma fqup_bind_dx_flat_dx: ∀b,p,G,I1,I2,L,V1,V2,T. ⦃G,L,ⓑ{p,I1}V1.ⓕ{I2}V2.T⦄ ⊐+[b] ⦃G,L.ⓑ{I1}V1,T⦄.
+lemma fqup_bind_dx_flat_dx: ∀p,G,I1,I2,L,V1,V2,T. ⦃G,L,ⓑ{p,I1}V1.ⓕ{I2}V2.T⦄ ⬂+[Ⓣ] ⦃G,L.ⓑ{I1}V1,T⦄.
 /2 width=5 by fqu_flat_dx, fqup_strap1/ qed.
 
-lemma fqup_flat_dx_bind_dx: ∀b,p,I1,I2,G,L,V1,V2,T. ⦃G,L,ⓕ{I1}V1.ⓑ{p,I2}V2.T⦄ ⊐+[b] ⦃G,L.ⓑ{I2}V2,T⦄.
-/2 width=5 by fqu_bind_dx, fqup_strap1/ qed.
+lemma fqup_flat_dx_bind_dx: ∀p,I1,I2,G,L,V1,V2,T. ⦃G,L,ⓕ{I1}V1.ⓑ{p,I2}V2.T⦄ ⬂+[Ⓣ] ⦃G,L.ⓑ{I2}V2,T⦄.
+/3 width=5 by fqu_bind_dx, fqup_strap1/ qed.
 
 (* Basic eliminators ********************************************************)
 
 lemma fqup_ind: ∀b,G1,L1,T1. ∀Q:relation3 ….
-                (â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ → Q G2 L2 T2) →
-                (â\88\80G,G2,L,L2,T,T2. â¦\83G1,L1,T1â¦\84 â\8a\90+[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ → Q G L T → Q G2 L2 T2) →
-                â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄ → Q G2 L2 T2.
+                (â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ → Q G2 L2 T2) →
+                (â\88\80G,G2,L,L2,T,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82[b] ⦃G2,L2,T2⦄ → Q G L T → Q G2 L2 T2) →
+                â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄ → Q G2 L2 T2.
 #b #G1 #L1 #T1 #Q #IH1 #IH2 #G2 #L2 #T2 #H
 @(tri_TC_ind … IH1 IH2 G2 L2 T2 H)
 qed-.
 
 lemma fqup_ind_dx: ∀b,G2,L2,T2. ∀Q:relation3 ….
-                   (â\88\80G1,L1,T1. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ → Q G1 L1 T1) →
-                   (â\88\80G1,G,L1,L,T1,T. â¦\83G1,L1,T1â¦\84 â\8a\90[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄ → Q G L T → Q G1 L1 T1) →
-                   â\88\80G1,L1,T1. â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄ → Q G1 L1 T1.
+                   (â\88\80G1,L1,T1. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ → Q G1 L1 T1) →
+                   (â\88\80G1,G,L1,L,T1,T. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82+[b] ⦃G2,L2,T2⦄ → Q G L T → Q G1 L1 T1) →
+                   â\88\80G1,L1,T1. â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄ → Q G1 L1 T1.
 #b #G2 #L2 #T2 #Q #IH1 #IH2 #G1 #L1 #T1 #H
 @(tri_TC_ind_dx … IH1 IH2 G1 L1 T1 H)
 qed-.
@@ -86,7 +86,7 @@ qed-.
 (* Advanced properties ******************************************************)
 
 lemma fqup_zeta (b) (p) (I) (G) (K) (V):
-                â\88\80T1,T2. â¬\86*[1]T2 â\89\98 T1 â\86\92 â¦\83G,K,â\93\91{p,I}V.T1â¦\84 â\8a\90+[b] ⦃G,K,T2⦄.
-/4 width=5 by fqup_strap2, fqu_fqup, fqu_drop/ qed.
+                â\88\80T1,T2. â¬\86*[1]T2 â\89\98 T1 â\86\92 â¦\83G,K,â\93\91{p,I}V.T1â¦\84 â¬\82+[b] ⦃G,K,T2⦄.
+* /4 width=5 by fqup_strap2, fqu_fqup, fqu_drop, fqu_clear, fqu_bind_dx/ qed.
 
 (* Basic_2A1: removed theorems 1: fqup_drop *)
index 37bd15ada9016789cd7ce90baff4b2e18bd8030a..c21d46c6026be363201aa91140a85b6e272829f8 100644 (file)
@@ -20,7 +20,7 @@ include "static_2/s_computation/fqup.ma".
 (* Properties with generic slicing for local environments *******************)
 
 lemma fqup_drops_succ: ∀b,G,K,T,i,L,U. ⬇*[↑i] L ≘ K → ⬆*[↑i] T ≘ U →
-                       â¦\83G,L,Uâ¦\84 â\8a\90+[b] ⦃G,K,T⦄.
+                       â¦\83G,L,Uâ¦\84 â¬\82+[b] ⦃G,K,T⦄.
 #b #G #K #T #i elim i -i
 [ #L #U #HLK #HTU elim (drops_inv_succ … HLK) -HLK
   #I #Y #HY #H destruct <(drops_fwd_isid … HY) -K //
@@ -33,7 +33,7 @@ lemma fqup_drops_succ: ∀b,G,K,T,i,L,U. ⬇*[↑i] L ≘ K → ⬆*[↑i] T ≘
 qed.
 
 lemma fqup_drops_strap1: ∀b,G1,G2,L1,K1,K2,T1,T2,U1,i. ⬇*[i] L1 ≘ K1 → ⬆*[i] T1 ≘ U1 →
-                         â¦\83G1,K1,T1â¦\84 â\8a\90[b] â¦\83G2,K2,T2â¦\84 â\86\92 â¦\83G1,L1,U1â¦\84 â\8a\90+[b] ⦃G2,K2,T2⦄.
+                         â¦\83G1,K1,T1â¦\84 â¬\82[b] â¦\83G2,K2,T2â¦\84 â\86\92 â¦\83G1,L1,U1â¦\84 â¬\82+[b] ⦃G2,K2,T2⦄.
 #b #G1 #G2 #L1 #K1 #K2 #T1 #T2 #U1 *
 [ #HLK1 #HTU1 #HT12
   >(drops_fwd_isid … HLK1) -L1 //
@@ -42,5 +42,5 @@ lemma fqup_drops_strap1: ∀b,G1,G2,L1,K1,K2,T1,T2,U1,i. ⬇*[i] L1 ≘ K1 → 
 ]
 qed-.
 
-lemma fqup_lref: â\88\80b,I,G,L,K,V,i. â¬\87*[i] L â\89\98 K.â\93\91{I}V â\86\92 â¦\83G,L,#iâ¦\84 â\8a\90+[b] ⦃G,K,V⦄.
+lemma fqup_lref: â\88\80b,I,G,L,K,V,i. â¬\87*[i] L â\89\98 K.â\93\91{I}V â\86\92 â¦\83G,L,#iâ¦\84 â¬\82+[b] ⦃G,K,V⦄.
 /2 width=6 by fqup_drops_strap1/ qed.
index c92721f84f7f525a61a2824ee441ab081e599877..94319671a3aba1cde2622705a1b51c62e28d72a1 100644 (file)
@@ -19,7 +19,7 @@ include "static_2/s_computation/fqup.ma".
 
 (* Forward lemmas with weight for closures **********************************)
 
-lemma fqup_fwd_fw: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄ →
+lemma fqup_fwd_fw: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄ →
                    ♯{G2,L2,T2} < ♯{G1,L1,T1}.
 #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
 /3 width=3 by fqu_fwd_fw, transitive_lt/
@@ -28,7 +28,7 @@ qed-.
 (* Advanced eliminators *****************************************************)
 
 lemma fqup_wf_ind: ∀b. ∀Q:relation3 …. (
-                      â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄ → Q G2 L2 T2) →
+                      â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄ → Q G2 L2 T2) →
                       Q G1 L1 T1
                    ) → ∀G1,L1,T1. Q G1 L1 T1.
 #b #Q #HQ @(f3_ind … fw) #x #IHx #G1 #L1 #T1 #H destruct
@@ -36,7 +36,7 @@ lemma fqup_wf_ind: ∀b. ∀Q:relation3 …. (
 qed-.
 
 lemma fqup_wf_ind_eq: ∀b. ∀Q:relation3 …. (
-                         â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄ → Q G2 L2 T2) →
+                         â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄ → Q G2 L2 T2) →
                          ∀G2,L2,T2. G1 = G2 → L1 = L2 → T1 = T2 → Q G2 L2 T2
                       ) → ∀G1,L1,T1. Q G1 L1 T1.
 #b #Q #HQ @(f3_ind … fw) #x #IHx #G1 #L1 #T1 #H destruct
index 1289e8487587df00115ccd5468e4778622cd40d6..d1183daff751761d5b9dc82127d237223f3bb4a6 100644 (file)
@@ -31,15 +31,15 @@ interpretation "star-iterated structural successor (closure)"
 (* Basic eliminators ********************************************************)
 
 lemma fqus_ind: ∀b,G1,L1,T1. ∀Q:relation3 …. Q G1 L1 T1 →
-                (â\88\80G,G2,L,L2,T,T2. â¦\83G1,L1,T1â¦\84 â\8a\90*[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â\8a\90⸮[b] ⦃G2,L2,T2⦄ → Q G L T → Q G2 L2 T2) →
-                â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ → Q G2 L2 T2.
+                (â\88\80G,G2,L,L2,T,T2. â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82⸮[b] ⦃G2,L2,T2⦄ → Q G L T → Q G2 L2 T2) →
+                â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ → Q G2 L2 T2.
 #b #G1 #L1 #T1 #R #IH1 #IH2 #G2 #L2 #T2 #H
 @(tri_TC_star_ind … IH1 IH2 G2 L2 T2 H) //
 qed-.
 
 lemma fqus_ind_dx: ∀b,G2,L2,T2. ∀Q:relation3 …. Q G2 L2 T2 →
-                   (â\88\80G1,G,L1,L,T1,T. â¦\83G1,L1,T1â¦\84 â\8a\90⸮[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ → Q G L T → Q G1 L1 T1) →
-                   â\88\80G1,L1,T1. â¦\83G1,L1,T1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ → Q G1 L1 T1.
+                   (â\88\80G1,G,L1,L,T1,T. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ → Q G L T → Q G1 L1 T1) →
+                   â\88\80G1,L1,T1. â¦\83G1,L1,T1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ → Q G1 L1 T1.
 #b #G2 #L2 #T2 #Q #IH1 #IH2 #G1 #L1 #T1 #H
 @(tri_TC_star_ind_dx … IH1 IH2 G1 L1 T1 H) //
 qed-.
@@ -49,78 +49,78 @@ qed-.
 lemma fqus_refl: ∀b. tri_reflexive … (fqus b).
 /2 width=1 by tri_inj/ qed.
 
-lemma fquq_fqus: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90⸮[b] ⦃G2,L2,T2⦄ →
-                 â¦\83G1,L1,T1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄.
+lemma fquq_fqus: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] ⦃G2,L2,T2⦄ →
+                 â¦\83G1,L1,T1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄.
 /2 width=1 by tri_inj/ qed.
 
-lemma fqus_strap1: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1,L1,T1â¦\84 â\8a\90*[b] ⦃G,L,T⦄ →
-                   â¦\83G,L,Tâ¦\84 â\8a\90⸮[b] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄.
+lemma fqus_strap1: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1,L1,T1â¦\84 â¬\82*[b] ⦃G,L,T⦄ →
+                   â¦\83G,L,Tâ¦\84 â¬\82⸮[b] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄.
 /2 width=5 by tri_step/ qed-.
 
-lemma fqus_strap2: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1,L1,T1â¦\84 â\8a\90⸮[b] ⦃G,L,T⦄ →
-                   â¦\83G,L,Tâ¦\84 â\8a\90*[b] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄.
+lemma fqus_strap2: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] ⦃G,L,T⦄ →
+                   â¦\83G,L,Tâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄.
 /2 width=5 by tri_TC_strap/ qed-.
 
 (* Basic inversion lemmas ***************************************************)
 
-lemma fqus_inv_fqu_sn: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
+lemma fqus_inv_fqu_sn: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
                        (∧∧ G1 = G2 & L1 = L2 & T1 = T2) ∨
-                       â\88\83â\88\83G,L,T. â¦\83G1,L1,T1â¦\84 â\8a\90[b] â¦\83G,L,Tâ¦\84 & â¦\83G,L,Tâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄.
+                       â\88\83â\88\83G,L,T. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G,L,Tâ¦\84 & â¦\83G,L,Tâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄.
 #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 @(fqus_ind_dx … H12) -G1 -L1 -T1 /3 width=1 by and3_intro, or_introl/
 #G1 #G #L1 #L #T1 #T * /3 width=5 by ex2_3_intro, or_intror/
 * #HG #HL #HT #_ destruct //
 qed-.
 
-lemma fqus_inv_sort1: â\88\80b,G1,G2,L1,L2,T2,s. â¦\83G1,L1,â\8b\86sâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
+lemma fqus_inv_sort1: â\88\80b,G1,G2,L1,L2,T2,s. â¦\83G1,L1,â\8b\86sâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
                       (∧∧ G1 = G2 & L1 = L2 & ⋆s = T2) ∨
-                      â\88\83â\88\83J,L. â¦\83G1,L,â\8b\86sâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ & L1 = L.ⓘ{J}.
+                      â\88\83â\88\83J,L. â¦\83G1,L,â\8b\86sâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ & L1 = L.ⓘ{J}.
 #b #G1 #G2 #L1 #L2 #T2 #s #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/
 #G #L #T #H elim (fqu_inv_sort1 … H) -H /3 width=4 by ex2_2_intro, or_intror/
 qed-.
 
-lemma fqus_inv_lref1: â\88\80b,G1,G2,L1,L2,T2,i. â¦\83G1,L1,#iâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
+lemma fqus_inv_lref1: â\88\80b,G1,G2,L1,L2,T2,i. â¦\83G1,L1,#iâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
                       ∨∨ ∧∧ G1 = G2 & L1 = L2 & #i = T2
-                       | â\88\83â\88\83J,L,V. â¦\83G1,L,Vâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ & L1 = L.ⓑ{J}V & i = 0
-                       | â\88\83â\88\83J,L,j. â¦\83G1,L,#jâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ & L1 = L.ⓘ{J} & i = ↑j.
+                       | â\88\83â\88\83J,L,V. â¦\83G1,L,Vâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ & L1 = L.ⓑ{J}V & i = 0
+                       | â\88\83â\88\83J,L,j. â¦\83G1,L,#jâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ & L1 = L.ⓘ{J} & i = ↑j.
 #b #G1 #G2 #L1 #L2 #T2 #i #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or3_intro0/
 #G #L #T #H elim (fqu_inv_lref1 … H) -H * /3 width=7 by or3_intro1, or3_intro2, ex3_4_intro, ex3_3_intro/
 qed-.
 
-lemma fqus_inv_gref1: â\88\80b,G1,G2,L1,L2,T2,l. â¦\83G1,L1,§lâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
+lemma fqus_inv_gref1: â\88\80b,G1,G2,L1,L2,T2,l. â¦\83G1,L1,§lâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
                       (∧∧ G1 = G2 & L1 = L2 & §l = T2) ∨
-                      â\88\83â\88\83J,L. â¦\83G1,L,§lâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ & L1 = L.ⓘ{J}.
+                      â\88\83â\88\83J,L. â¦\83G1,L,§lâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ & L1 = L.ⓘ{J}.
 #b #G1 #G2 #L1 #L2 #T2 #l #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/
 #G #L #T #H elim (fqu_inv_gref1 … H) -H /3 width=4 by ex2_2_intro, or_intror/
 qed-.
 
-lemma fqus_inv_bind1: â\88\80b,p,I,G1,G2,L1,L2,V1,T1,T2. â¦\83G1,L1,â\93\91{p,I}V1.T1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
+lemma fqus_inv_bind1: â\88\80b,p,I,G1,G2,L1,L2,V1,T1,T2. â¦\83G1,L1,â\93\91{p,I}V1.T1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
                       ∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓑ{p,I}V1.T1 = T2
-                       | â¦\83G1,L1,V1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄
-                       | â¦\83G1,L1.â\93\91{I}V1,T1â¦\84 â\8a\90*[b] â¦\83G2,L2,T2â¦\84
-                       | â¦\83G1,L1.â\93§,T1â¦\84 â\8a\90*[b] â¦\83G2,L2,T2â¦\84 â\88§ b = Ⓕ
-                       | â\88\83â\88\83J,L,T. â¦\83G1,L,Tâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ & ⬆*[1] T ≘ ⓑ{p,I}V1.T1 & L1 = L.ⓘ{J}.
+                       | â¦\83G1,L1,V1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄
+                       | â\88§â\88§ â¦\83G1,L1.â\93\91{I}V1,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 & b = â\93\89 
+                       | â\88§â\88§ â¦\83G1,L1.â\93§,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 & b = Ⓕ
+                       | â\88\83â\88\83J,L,T. â¦\83G1,L,Tâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ & ⬆*[1] T ≘ ⓑ{p,I}V1.T1 & L1 = L.ⓘ{J}.
 #b #p #I #G1 #G2 #L1 #L2 #V1 #T1 #T2 #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or5_intro0/
 #G #L #T #H elim (fqu_inv_bind1 … H) -H *
-[4: #J ] #H1 #H2 #H3 [4: #Hb ] #H destruct
+[4: #J ] #H1 #H2 #H3 [3,4: #Hb ] #H destruct
 /3 width=6 by or5_intro1, or5_intro2, or5_intro3, or5_intro4, ex3_3_intro, conj/
 qed-.
 
 
-lemma fqus_inv_bind1_true: â\88\80p,I,G1,G2,L1,L2,V1,T1,T2. â¦\83G1,L1,â\93\91{p,I}V1.T1â¦\84 â\8a\90* ⦃G2,L2,T2⦄ →
+lemma fqus_inv_bind1_true: â\88\80p,I,G1,G2,L1,L2,V1,T1,T2. â¦\83G1,L1,â\93\91{p,I}V1.T1â¦\84 â¬\82* ⦃G2,L2,T2⦄ →
                            ∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓑ{p,I}V1.T1 = T2
-                               | â¦\83G1,L1,V1â¦\84 â\8a\90* ⦃G2,L2,T2⦄
-                               | â¦\83G1,L1.â\93\91{I}V1,T1â¦\84 â\8a\90* ⦃G2,L2,T2⦄
-                               | â\88\83â\88\83J,L,T. â¦\83G1,L,Tâ¦\84 â\8a\90* ⦃G2,L2,T2⦄ & ⬆*[1] T ≘ ⓑ{p,I}V1.T1 & L1 = L.ⓘ{J}.
-#p #I #G1 #G2 #L1 #L2 #V1 #T1 #T2 #H elim (fqus_inv_bind1 … H) -H [1,4: * ]
-/3 width=1 by and3_intro, or4_intro0, or4_intro1, or4_intro2, or4_intro3, ex3_3_intro/
+                               | â¦\83G1,L1,V1â¦\84 â¬\82* ⦃G2,L2,T2⦄
+                               | â¦\83G1,L1.â\93\91{I}V1,T1â¦\84 â¬\82* ⦃G2,L2,T2⦄
+                               | â\88\83â\88\83J,L,T. â¦\83G1,L,Tâ¦\84 â¬\82* ⦃G2,L2,T2⦄ & ⬆*[1] T ≘ ⓑ{p,I}V1.T1 & L1 = L.ⓘ{J}.
+#p #I #G1 #G2 #L1 #L2 #V1 #T1 #T2 #H elim (fqus_inv_bind1 … H) -H [1,3,4: * ]
+/3 width=1 by and3_intro, or4_intro0, or4_intro1, or4_intro2, or4_intro3/
 #_ #H destruct
 qed-.
 
-lemma fqus_inv_flat1: â\88\80b,I,G1,G2,L1,L2,V1,T1,T2. â¦\83G1,L1,â\93\95{I}V1.T1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
+lemma fqus_inv_flat1: â\88\80b,I,G1,G2,L1,L2,V1,T1,T2. â¦\83G1,L1,â\93\95{I}V1.T1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
                       ∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓕ{I}V1.T1 = T2
-                       | â¦\83G1,L1,V1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄
-                       | â¦\83G1,L1,T1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄
-                       | â\88\83â\88\83J,L,T. â¦\83G1,L,Tâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ & ⬆*[1] T ≘ ⓕ{I}V1.T1 & L1 = L.ⓘ{J}.
+                       | â¦\83G1,L1,V1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄
+                       | â¦\83G1,L1,T1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄
+                       | â\88\83â\88\83J,L,T. â¦\83G1,L,Tâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ & ⬆*[1] T ≘ ⓕ{I}V1.T1 & L1 = L.ⓘ{J}.
 #b #I #G1 #G2 #L1 #L2 #V1 #T1 #T2 #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or4_intro0/
 #G #L #T #H elim (fqu_inv_flat1 … H) -H *
 [3: #J ] #H1 #H2 #H3 #H destruct
@@ -129,35 +129,35 @@ qed-.
 
 (* Advanced inversion lemmas ************************************************)
 
-lemma fqus_inv_atom1: â\88\80b,I,G1,G2,L2,T2. â¦\83G1,â\8b\86\93ª{I}â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
+lemma fqus_inv_atom1: â\88\80b,I,G1,G2,L2,T2. â¦\83G1,â\8b\86\93ª{I}â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
                       ∧∧ G1 = G2 & ⋆ = L2 & ⓪{I} = T2.
 #b #I #G1 #G2 #L2 #T2 #H elim (fqus_inv_fqu_sn … H) -H * /2 width=1 by and3_intro/
 #G #L #T #H elim (fqu_inv_atom1 … H)
 qed-.
 
-lemma fqus_inv_sort1_bind: â\88\80b,I,G1,G2,L1,L2,T2,s. â¦\83G1,L1.â\93\98{I},â\8b\86sâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
-                           (â\88§â\88§ G1 = G2 & L1.â\93\98{I} = L2 & â\8b\86s = T2) â\88¨ â¦\83G1,L1,â\8b\86sâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄.
+lemma fqus_inv_sort1_bind: â\88\80b,I,G1,G2,L1,L2,T2,s. â¦\83G1,L1.â\93\98{I},â\8b\86sâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
+                           (â\88§â\88§ G1 = G2 & L1.â\93\98{I} = L2 & â\8b\86s = T2) â\88¨ â¦\83G1,L1,â\8b\86sâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄.
 #b #I #G1 #G2 #L1 #L2 #T2 #s #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/
 #G #L #T #H elim (fqu_inv_sort1_bind … H) -H
 #H1 #H2 #H3 #H destruct /2 width=1 by or_intror/
 qed-.
 
-lemma fqus_inv_zero1_pair: â\88\80b,I,G1,G2,L1,L2,V1,T2. â¦\83G1,L1.â\93\91{I}V1,#0â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
-                           (â\88§â\88§ G1 = G2 & L1.â\93\91{I}V1 = L2 & #0 = T2) â\88¨ â¦\83G1,L1,V1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄.
+lemma fqus_inv_zero1_pair: â\88\80b,I,G1,G2,L1,L2,V1,T2. â¦\83G1,L1.â\93\91{I}V1,#0â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
+                           (â\88§â\88§ G1 = G2 & L1.â\93\91{I}V1 = L2 & #0 = T2) â\88¨ â¦\83G1,L1,V1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄.
 #b #I #G1 #G2 #L1 #L2 #V1 #T2 #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/
 #G #L #T #H elim (fqu_inv_zero1_pair … H) -H
 #H1 #H2 #H3 #H destruct /2 width=1 by or_intror/
 qed-.
 
-lemma fqus_inv_lref1_bind: â\88\80b,I,G1,G2,L1,L2,T2,i. â¦\83G1,L1.â\93\98{I},#â\86\91iâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
-                           (â\88§â\88§ G1 = G2 & L1.â\93\98{I} = L2 & #(â\86\91i) = T2) â\88¨ â¦\83G1,L1,#iâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄.
+lemma fqus_inv_lref1_bind: â\88\80b,I,G1,G2,L1,L2,T2,i. â¦\83G1,L1.â\93\98{I},#â\86\91iâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
+                           (â\88§â\88§ G1 = G2 & L1.â\93\98{I} = L2 & #(â\86\91i) = T2) â\88¨ â¦\83G1,L1,#iâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄.
 #b #I #G1 #G2 #L1 #L2 #T2 #i #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/
 #G #L #T #H elim (fqu_inv_lref1_bind … H) -H
 #H1 #H2 #H3 #H destruct /2 width=1 by or_intror/
 qed-.
 
-lemma fqus_inv_gref1_bind: â\88\80b,I,G1,G2,L1,L2,T2,l. â¦\83G1,L1.â\93\98{I},§lâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
-                           (â\88§â\88§ G1 = G2 & L1.â\93\98{I} = L2 & Â§l = T2) â\88¨ â¦\83G1,L1,§lâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄.
+lemma fqus_inv_gref1_bind: â\88\80b,I,G1,G2,L1,L2,T2,l. â¦\83G1,L1.â\93\98{I},§lâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
+                           (â\88§â\88§ G1 = G2 & L1.â\93\98{I} = L2 & Â§l = T2) â\88¨ â¦\83G1,L1,§lâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄.
 #b #I #G1 #G2 #L1 #L2 #T2 #l #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/
 #G #L #T #H elim (fqu_inv_gref1_bind … H) -H
 #H1 #H2 #H3 #H destruct /2 width=1 by or_intror/
index 7c0f79cbad119ed8fd4a02d318cb6f92b08b78c6..24ba92a09c499df96a40bc98178744e5ad180d94 100644 (file)
@@ -20,7 +20,7 @@ include "static_2/s_computation/fqus_fqup.ma".
 (* Properties with generic slicing for local environments *******************)
 
 lemma fqus_drops: ∀b,G,L,K,T,U,i. ⬇*[i] L ≘ K → ⬆*[i] T ≘ U →
-                  â¦\83G,L,Uâ¦\84 â\8a\90*[b] ⦃G,K,T⦄.
+                  â¦\83G,L,Uâ¦\84 â¬\82*[b] ⦃G,K,T⦄.
 #b #G #L #K #T #U * /3 width=3 by fqup_drops_succ, fqup_fqus/
 #HLK #HTU <(lifts_fwd_isid … HTU) -U // <(drops_fwd_isid … HLK) -K //
 qed.
index f5f521dd52508de91ceaa6d956794199f1bbc11c..f59fd10aac770645ef49e9a87567e84c7ae54bb9 100644 (file)
@@ -19,14 +19,14 @@ include "static_2/s_computation/fqus.ma".
 
 (* Alternative definition with plus-iterated supclosure *********************)
 
-lemma fqup_fqus: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90+[b] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄.
+lemma fqup_fqus: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄.
 #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
 /3 width=5 by fqus_strap1, fquq_fqus, fqu_fquq/
 qed.
 
 (* Basic_2A1: was: fqus_inv_gen *)
-lemma fqus_inv_fqup: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
-                     â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄ ∨ (∧∧ G1 = G2 & L1 = L2 & T1 = T2).
+lemma fqus_inv_fqup: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
+                     â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄ ∨ (∧∧ G1 = G2 & L1 = L2 & T1 = T2).
 #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -G2 -L2 -T2 //
 #G #G2 #L #L2 #T #T2 #_ *
 [ #H2 * /3 width=5 by fqup_strap1, or_introl/
@@ -37,38 +37,38 @@ qed-.
 
 (* Advanced properties ******************************************************)
 
-lemma fqus_strap1_fqu: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1,L1,T1â¦\84 â\8a\90*[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
-                       â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄.
+lemma fqus_strap1_fqu: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
+                       â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄.
 #b #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 elim (fqus_inv_fqup … H1) -H1
 [ /2 width=5 by fqup_strap1/
 | * /2 width=1 by fqu_fqup/
 ]
 qed-.
 
-lemma fqus_strap2_fqu: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
-                       â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄.
+lemma fqus_strap2_fqu: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
+                       â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄.
 #b #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 elim (fqus_inv_fqup … H2) -H2
 [ /2 width=5 by fqup_strap2/
 | * /2 width=1 by fqu_fqup/
 ]
 qed-.
 
-lemma fqus_fqup_trans: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1,L1,T1â¦\84 â\8a\90*[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄ →
-                       â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄.
+lemma fqus_fqup_trans: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82+[b] ⦃G2,L2,T2⦄ →
+                       â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄.
 #b #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 @(fqup_ind … H2) -H2 -G2 -L2 -T2
 /2 width=5 by fqus_strap1_fqu, fqup_strap1/
 qed-.
 
-lemma fqup_fqus_trans: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G,L,T⦄ →
-                       â¦\83G,L,Tâ¦\84 â\8a\90*[b] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄.
+lemma fqup_fqus_trans: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G,L,T⦄ →
+                       â¦\83G,L,Tâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄.
 #b #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 @(fqup_ind_dx … H1) -H1 -G1 -L1 -T1
 /3 width=5 by fqus_strap2_fqu, fqup_strap2/
 qed-.
 
 (* Advanced inversion lemmas for plus-iterated supclosure *******************)
 
-lemma fqup_inv_step_sn: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90+[b] ⦃G2,L2,T2⦄ →
-                        â\88\83â\88\83G,L,T. â¦\83G1,L1,T1â¦\84 â\8a\90[b] â¦\83G,L,Tâ¦\84 & â¦\83G,L,Tâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄.
+lemma fqup_inv_step_sn: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] ⦃G2,L2,T2⦄ →
+                        â\88\83â\88\83G,L,T. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G,L,Tâ¦\84 & â¦\83G,L,Tâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄.
 #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1 /2 width=5 by ex2_3_intro/
 #G1 #G #L1 #L #T1 #T #H1 #_ * /4 width=9 by fqus_strap2, fqu_fquq, ex2_3_intro/
 qed-.
index 02be24fc73a90535cdb1b893dd51e747fd512a14..72c46008f1e9f68dabe5418e37b5eb36c64bd103 100644 (file)
@@ -19,7 +19,7 @@ include "static_2/s_computation/fqus.ma".
 
 (* Forward lemmas with weight for closures **********************************)
 
-lemma fqus_fwd_fw: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
+lemma fqus_fwd_fw: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
                    ♯{G2,L2,T2} ≤ ♯{G1,L1,T1}.
 #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -L2 -T2
 /3 width=3 by fquq_fwd_fw, transitive_le/
@@ -27,7 +27,7 @@ qed-.
 
 (* Advanced inversion lemmas ************************************************)
 
-lemma fqus_inv_refl_atom3: â\88\80b,I,G,L,X. â¦\83G,L,â\93ª{I}â¦\84 â\8a\90*[b] ⦃G,L,X⦄ → ⓪{I} = X.
+lemma fqus_inv_refl_atom3: â\88\80b,I,G,L,X. â¦\83G,L,â\93ª{I}â¦\84 â¬\82*[b] ⦃G,L,X⦄ → ⓪{I} = X.
 #b #I #G #L #X #H elim (fqus_inv_fqu_sn … H) -H * //
 #G0 #L0 #T0 #H1 #H2 lapply (fqu_fwd_fw … H1) lapply (fqus_fwd_fw … H2) -H2 -H1
 #H2 #H1 lapply (le_to_lt_to_lt … H2 H1) -G0 -L0 -T0
index bff7b2fe9e2561c7f349a58c358153d219d45d58..19dd4d45d0ab14148dbe2405d4f50b2b57ca9615 100644 (file)
@@ -28,7 +28,7 @@ include "static_2/relocation/lifts.ma".
 inductive fqu (b:bool): tri_relation genv lenv term ≝
 | fqu_lref_O : ∀I,G,L,V. fqu b G (L.ⓑ{I}V) (#0) G L V
 | fqu_pair_sn: ∀I,G,L,V,T. fqu b G L (②{I}V.T) G L V
-| fqu_bind_dx: ∀p,I,G,L,V,T. fqu b G L (ⓑ{p,I}V.T) G (L.ⓑ{I}V) T
+| fqu_bind_dx: ∀p,I,G,L,V,T. b = Ⓣ → fqu b G L (ⓑ{p,I}V.T) G (L.ⓑ{I}V) T
 | fqu_clear  : ∀p,I,G,L,V,T. b = Ⓕ → fqu b G L (ⓑ{p,I}V.T) G (L.ⓧ) T
 | fqu_flat_dx: ∀I,G,L,V,T. fqu b G L (ⓕ{I}V.T) G L T
 | fqu_drop   : ∀I,G,L,T,U. ⬆*[1] T ≘ U → fqu b G (L.ⓘ{I}) U G L T
@@ -44,24 +44,24 @@ interpretation
 
 (* Basic properties *********************************************************)
 
-lemma fqu_sort: â\88\80b,I,G,L,s. â¦\83G,L.â\93\98{I},â\8b\86sâ¦\84 â\8a\90[b] ⦃G,L,⋆s⦄.
+lemma fqu_sort: â\88\80b,I,G,L,s. â¦\83G,L.â\93\98{I},â\8b\86sâ¦\84 â¬\82[b] ⦃G,L,⋆s⦄.
 /2 width=1 by fqu_drop/ qed.
 
-lemma fqu_lref_S: â\88\80b,I,G,L,i. â¦\83G,L.â\93\98{I},#â\86\91iâ¦\84 â\8a\90[b] ⦃G,L,#i⦄.
+lemma fqu_lref_S: â\88\80b,I,G,L,i. â¦\83G,L.â\93\98{I},#â\86\91iâ¦\84 â¬\82[b] ⦃G,L,#i⦄.
 /2 width=1 by fqu_drop/ qed.
 
-lemma fqu_gref: â\88\80b,I,G,L,l. â¦\83G,L.â\93\98{I},§lâ¦\84 â\8a\90[b] ⦃G,L,§l⦄.
+lemma fqu_gref: â\88\80b,I,G,L,l. â¦\83G,L.â\93\98{I},§lâ¦\84 â¬\82[b] ⦃G,L,§l⦄.
 /2 width=1 by fqu_drop/ qed.
 
 (* Basic inversion lemmas ***************************************************)
 
-fact fqu_inv_sort1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+fact fqu_inv_sort1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                         ∀s. T1 = ⋆s →
                         ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & T2 = ⋆s.
 #b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2
 [ #I #G #L #T #s #H destruct
 | #I #G #L #V #T #s #H destruct
-| #p #I #G #L #V #T #s #H destruct
+| #p #I #G #L #V #T #_ #s #H destruct
 | #p #I #G #L #V #T #_ #s #H destruct
 | #I #G #L #V #T #s #H destruct
 | #I #G #L #T #U #HI12 #s #H destruct
@@ -69,18 +69,18 @@ fact fqu_inv_sort1_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐[b] ⦃G2,L2,T
 ]
 qed-.
 
-lemma fqu_inv_sort1: â\88\80b,G1,G2,L1,L2,T2,s. â¦\83G1,L1,â\8b\86sâ¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma fqu_inv_sort1: â\88\80b,G1,G2,L1,L2,T2,s. â¦\83G1,L1,â\8b\86sâ¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                      ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & T2 = ⋆s.
 /2 width=4 by fqu_inv_sort1_aux/ qed-.
 
-fact fqu_inv_lref1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+fact fqu_inv_lref1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                         ∀i. T1 = #i →
                         (∃∃J,V. G1 = G2 & L1 = L2.ⓑ{J}V & T2 = V & i = 0) ∨
                         ∃∃J,j. G1 = G2 & L1 = L2.ⓘ{J} & T2 = #j & i = ↑j.
 #b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2
 [ #I #G #L #T #i #H destruct /3 width=4 by ex4_2_intro, or_introl/
 | #I #G #L #V #T #i #H destruct
-| #p #I #G #L #V #T #i #H destruct
+| #p #I #G #L #V #T #_ #i #H destruct
 | #p #I #G #L #V #T #_ #i #H destruct
 | #I #G #L #V #T #i #H destruct
 | #I #G #L #T #U #HI12 #i #H destruct
@@ -88,18 +88,18 @@ fact fqu_inv_lref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐[b] ⦃G2,L2,T
 ]
 qed-.
 
-lemma fqu_inv_lref1: â\88\80b,G1,G2,L1,L2,T2,i. â¦\83G1,L1,#iâ¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma fqu_inv_lref1: â\88\80b,G1,G2,L1,L2,T2,i. â¦\83G1,L1,#iâ¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                      (∃∃J,V. G1 = G2 & L1 = L2.ⓑ{J}V & T2 = V & i = 0) ∨
                      ∃∃J,j. G1 = G2 & L1 = L2.ⓘ{J} & T2 = #j & i = ↑j.
 /2 width=4 by fqu_inv_lref1_aux/ qed-.
 
-fact fqu_inv_gref1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+fact fqu_inv_gref1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                         ∀l. T1 = §l →
                         ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & T2 = §l.
 #b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2
 [ #I #G #L #T #l #H destruct
 | #I #G #L #V #T #l #H destruct
-| #p #I #G #L #V #T #l #H destruct
+| #p #I #G #L #V #T #_ #l #H destruct
 | #p #I #G #L #V #T #_ #l #H destruct
 | #I #G #L #V #T #s #H destruct
 | #I #G #L #T #U #HI12 #l #H destruct
@@ -107,43 +107,44 @@ fact fqu_inv_gref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐[b] ⦃G2,L2,T
 ]
 qed-.
 
-lemma fqu_inv_gref1: â\88\80b,G1,G2,L1,L2,T2,l. â¦\83G1,L1,§lâ¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma fqu_inv_gref1: â\88\80b,G1,G2,L1,L2,T2,l. â¦\83G1,L1,§lâ¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                      ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & T2 = §l.
 /2 width=4 by fqu_inv_gref1_aux/ qed-.
 
-fact fqu_inv_bind1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+fact fqu_inv_bind1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                         ∀p,I,V1,U1. T1 = ⓑ{p,I}V1.U1 →
                         ∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2
-                         | ∧∧ G1 = G2 & L1.ⓑ{I}V1 = L2 & U1 = T2
+                         | ∧∧ G1 = G2 & L1.ⓑ{I}V1 = L2 & U1 = T2 & b = Ⓣ
                          | ∧∧ G1 = G2 & L1.ⓧ = L2 & U1 = T2 & b = Ⓕ
                          | ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & ⬆*[1] T2 ≘ ⓑ{p,I}V1.U1.
 #b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2
 [ #I #G #L #T #q #J #V0 #U0 #H destruct
 | #I #G #L #V #T #q #J #V0 #U0 #H destruct /3 width=1 by and3_intro, or4_intro0/
-| #p #I #G #L #V #T #q #J #V0 #U0 #H destruct /3 width=1 by and3_intro, or4_intro1/
+| #p #I #G #L #V #T #Hb #q #J #V0 #U0 #H destruct /3 width=1 by and4_intro, or4_intro1/
 | #p #I #G #L #V #T #Hb #q #J #V0 #U0 #H destruct /3 width=1 by and4_intro, or4_intro2/
 | #I #G #L #V #T #q #J #V0 #U0 #H destruct
 | #I #G #L #T #U #HTU #q #J #V0 #U0 #H destruct /3 width=2 by or4_intro3, ex3_intro/
 ]
 qed-.
 
-lemma fqu_inv_bind1: â\88\80b,p,I,G1,G2,L1,L2,V1,U1,T2. â¦\83G1,L1,â\93\91{p,I}V1.U1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma fqu_inv_bind1: â\88\80b,p,I,G1,G2,L1,L2,V1,U1,T2. â¦\83G1,L1,â\93\91{p,I}V1.U1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                      ∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2
-                      | ∧∧ G1 = G2 & L1.ⓑ{I}V1 = L2 & U1 = T2
+                      | ∧∧ G1 = G2 & L1.ⓑ{I}V1 = L2 & U1 = T2 & b = Ⓣ
                       | ∧∧ G1 = G2 & L1.ⓧ = L2 & U1 = T2 & b = Ⓕ
                       | ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & ⬆*[1] T2 ≘ ⓑ{p,I}V1.U1.
 /2 width=4 by fqu_inv_bind1_aux/ qed-.
 
-lemma fqu_inv_bind1_true: â\88\80p,I,G1,G2,L1,L2,V1,U1,T2. â¦\83G1,L1,â\93\91{p,I}V1.U1â¦\84 â\8a\90 ⦃G2,L2,T2⦄ →
+lemma fqu_inv_bind1_true: â\88\80p,I,G1,G2,L1,L2,V1,U1,T2. â¦\83G1,L1,â\93\91{p,I}V1.U1â¦\84 â¬\82 ⦃G2,L2,T2⦄ →
                           ∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2
                            | ∧∧ G1 = G2 & L1.ⓑ{I}V1 = L2 & U1 = T2
                            | ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & ⬆*[1] T2 ≘ ⓑ{p,I}V1.U1.
 #p #I #G1 #G2 #L1 #L2 #V1 #U1 #T2 #H elim (fqu_inv_bind1 … H) -H
-/3 width=1 by or3_intro0, or3_intro1, or3_intro2/
-* #_ #_ #_ #H destruct
+/3 width=1 by or3_intro0, or3_intro2/
+* #HG #HL #HU #H destruct
+/3 width=1 by and3_intro, or3_intro1/
 qed-.
 
-fact fqu_inv_flat1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+fact fqu_inv_flat1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                         ∀I,V1,U1. T1 = ⓕ{I}V1.U1 →
                         ∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2
                          | ∧∧ G1 = G2 & L1 = L2 & U1 = T2
@@ -151,14 +152,14 @@ fact fqu_inv_flat1_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐[b] ⦃G2,L2,T
 #b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2
 [ #I #G #L #T #J #V0 #U0 #H destruct
 | #I #G #L #V #T #J #V0 #U0 #H destruct /3 width=1 by and3_intro, or3_intro0/
-| #p #I #G #L #V #T #J #V0 #U0 #H destruct
+| #p #I #G #L #V #T #_ #J #V0 #U0 #H destruct
 | #p #I #G #L #V #T #_ #J #V0 #U0 #H destruct
 | #I #G #L #V #T #J #V0 #U0 #H destruct /3 width=1 by and3_intro, or3_intro1/
 | #I #G #L #T #U #HTU #J #V0 #U0 #H destruct /3 width=2 by or3_intro2, ex3_intro/
 ]
 qed-.
 
-lemma fqu_inv_flat1: â\88\80b,I,G1,G2,L1,L2,V1,U1,T2. â¦\83G1,L1,â\93\95{I}V1.U1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma fqu_inv_flat1: â\88\80b,I,G1,G2,L1,L2,V1,U1,T2. â¦\83G1,L1,â\93\95{I}V1.U1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                      ∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2
                       | ∧∧ G1 = G2 & L1 = L2 & U1 = T2
                       | ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & ⬆*[1] T2 ≘ ⓕ{I}V1.U1.
@@ -166,31 +167,31 @@ lemma fqu_inv_flat1: ∀b,I,G1,G2,L1,L2,V1,U1,T2. ⦃G1,L1,ⓕ{I}V1.U1⦄ ⊐[b]
 
 (* Advanced inversion lemmas ************************************************)
 
-lemma fqu_inv_atom1: â\88\80b,I,G1,G2,L2,T2. â¦\83G1,â\8b\86\93ª{I}â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ → ⊥.
+lemma fqu_inv_atom1: â\88\80b,I,G1,G2,L2,T2. â¦\83G1,â\8b\86\93ª{I}â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ → ⊥.
 #b * #x #G1 #G2 #L2 #T2 #H
 [ elim (fqu_inv_sort1 … H) | elim (fqu_inv_lref1 … H) * | elim (fqu_inv_gref1 … H) ] -H
 #I [2: #V |3: #i ] #_ #H destruct
 qed-.
 
-lemma fqu_inv_sort1_bind: â\88\80b,I,G1,G2,K,L2,T2,s. â¦\83G1,K.â\93\98{I},â\8b\86sâ¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma fqu_inv_sort1_bind: â\88\80b,I,G1,G2,K,L2,T2,s. â¦\83G1,K.â\93\98{I},â\8b\86sâ¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                           ∧∧ G1 = G2 & L2 = K & T2 = ⋆s.
 #b #I #G1 #G2 #K #L2 #T2 #s #H elim (fqu_inv_sort1 … H) -H
 #Z #X #H1 #H2 destruct /2 width=1 by and3_intro/
 qed-.
 
-lemma fqu_inv_zero1_pair: â\88\80b,I,G1,G2,K,L2,V,T2. â¦\83G1,K.â\93\91{I}V,#0â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma fqu_inv_zero1_pair: â\88\80b,I,G1,G2,K,L2,V,T2. â¦\83G1,K.â\93\91{I}V,#0â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                           ∧∧ G1 = G2 & L2 = K & T2 = V.
 #b #I #G1 #G2 #K #L2 #V #T2 #H elim (fqu_inv_lref1 … H) -H *
 #Z #X #H1 #H2 #H3 #H4 destruct /2 width=1 by and3_intro/
 qed-.
 
-lemma fqu_inv_lref1_bind: â\88\80b,I,G1,G2,K,L2,T2,i. â¦\83G1,K.â\93\98{I},#(â\86\91i)â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma fqu_inv_lref1_bind: â\88\80b,I,G1,G2,K,L2,T2,i. â¦\83G1,K.â\93\98{I},#(â\86\91i)â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                           ∧∧ G1 = G2 & L2 = K & T2 = #i.
 #b #I #G1 #G2 #K #L2 #T2 #i #H elim (fqu_inv_lref1 … H) -H *
 #Z #X #H1 #H2 #H3 #H4 destruct /2 width=1 by and3_intro/
 qed-.
 
-lemma fqu_inv_gref1_bind: â\88\80b,I,G1,G2,K,L2,T2,l. â¦\83G1,K.â\93\98{I},§lâ¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma fqu_inv_gref1_bind: â\88\80b,I,G1,G2,K,L2,T2,l. â¦\83G1,K.â\93\98{I},§lâ¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                           ∧∧ G1 = G2 & L2 = K & T2 = §l.
 #b #I #G1 #G2 #K #L2 #T2 #l #H elim (fqu_inv_gref1 … H) -H
 #Z #H1 #H2 #H3 destruct /2 width=1 by and3_intro/
index c2aa1a8296fcf5c6851408327f1304ade6fc7640..e9d8fcbfc7e34232b96d09eca65b4a18efc331d4 100644 (file)
@@ -19,13 +19,13 @@ include "static_2/s_transition/fqu.ma".
 
 (* Forward lemmas with length for local environments ************************)
 
-fact fqu_fwd_length_lref1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+fact fqu_fwd_length_lref1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                                ∀i. T1 = #i → |L2| < |L1|.
 #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 // [2,3: #p]
-#I #G #L #V #T [2: #_ ] #j #H destruct
+#I #G #L #V #T [1,2: #_ ] #j #H destruct
 qed-.
 
-lemma fqu_fwd_length_lref1: â\88\80b,G1,G2,L1,L2,T2,i. â¦\83G1,L1,#iâ¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma fqu_fwd_length_lref1: â\88\80b,G1,G2,L1,L2,T2,i. â¦\83G1,L1,#iâ¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                             |L2| < |L1|.
 /2 width=8 by fqu_fwd_length_lref1_aux/
 qed-.
index 7d5e2e87df237170a9d227438eeca8255e837ffd..fa341e42574f7dd833fe55181e3622d5c8c2baae 100644 (file)
@@ -19,7 +19,7 @@ include "static_2/s_transition/fqu_length.ma".
 
 (* Inversion lemmas with context-free sort-irrelevant equivalence for terms *)
 
-fact fqu_inv_tdeq_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+fact fqu_inv_tdeq_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                        G1 = G2 → |L1| = |L2| → T1 ≛ T2 → ⊥.
 #b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2
 [1: #I #G #L #V #_ #H elim (succ_inv_refl_sn … H)
@@ -29,7 +29,7 @@ fact fqu_inv_tdeq_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐[b] ⦃G2,L2,T2
 qed-.
 
 (* Basic_2A1: uses: fqu_inv_eq *)
-lemma fqu_inv_tdeq: â\88\80b,G,L1,L2,T1,T2. â¦\83G,L1,T1â¦\84 â\8a\90[b] ⦃G,L2,T2⦄ →
+lemma fqu_inv_tdeq: â\88\80b,G,L1,L2,T1,T2. â¦\83G,L1,T1â¦\84 â¬\82[b] ⦃G,L2,T2⦄ →
                     |L1| = |L2| → T1 ≛ T2 → ⊥.
 #b #G #L1 #L2 #T1 #T2 #H
 @(fqu_inv_tdeq_aux … H) // (**) (* full auto fails *)
index 2c19e9244f57609dabcd09e7a6cd7f83fd89b9aa..3b9964b46ce54263e3fcf1f84b371a1e845771ed 100644 (file)
@@ -20,7 +20,7 @@ include "static_2/s_transition/fqu.ma".
 
 (* Forward lemmas with weight for closures **********************************)
 
-lemma fqu_fwd_fw: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ →
+lemma fqu_fwd_fw: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ →
                   ♯{G2,L2,T2} < ♯{G1,L1,T1}.
 #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 //
 #I #I1 #I2 #G #L #HI12 normalize in ⊢ (?%%); -I1
@@ -30,7 +30,7 @@ qed-.
 (* Advanced eliminators *****************************************************)
 
 lemma fqu_wf_ind: ∀b. ∀Q:relation3 …. (
-                     â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] ⦃G2,L2,T2⦄ → Q G2 L2 T2) →
+                     â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] ⦃G2,L2,T2⦄ → Q G2 L2 T2) →
                                 Q G1 L1 T1
                              ) → ∀G1,L1,T1. Q G1 L1 T1.
 #b #Q #HQ @(f3_ind … fw) #x #IHx #G1 #L1 #T1 #H destruct /4 width=2 by fqu_fwd_fw/
index 426c815183b87261541306078f46e7c4ae7521ab..d7736ab2013177b4cf901392a7e59e8fb36e67ef 100644 (file)
@@ -37,7 +37,7 @@ interpretation
 lemma fquq_refl: ∀b. tri_reflexive … (fquq b).
 // qed.
 
-lemma fqu_fquq: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90[b] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\8a\90⸮[b] ⦃G2,L2,T2⦄.
+lemma fqu_fquq: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] ⦃G2,L2,T2⦄.
 /2 width=1 by or_introl/ qed.
 
 (* Basic_2A1: removed theorems 8:
index 2e11ace14a7cc3445c1f8ba9042fd4917d6db652..3985a6c9ebb43f3df2dd709d8424078244a1be48 100644 (file)
@@ -19,7 +19,7 @@ include "static_2/s_transition/fquq.ma".
 
 (* Forward lemmas with length for local environments ************************)
 
-lemma fquq_fwd_length_lref1: â\88\80b,G1,G2,L1,L2,T2,i. â¦\83G1,L1,#iâ¦\84 â\8a\90⸮[b] ⦃G2,L2,T2⦄ →
+lemma fquq_fwd_length_lref1: â\88\80b,G1,G2,L1,L2,T2,i. â¦\83G1,L1,#iâ¦\84 â¬\82⸮[b] ⦃G2,L2,T2⦄ →
                              |L2| ≤ |L1|.
 #b #G1 #G2 #L1 #L2 #T2 #i #H elim H -H [2: * ]
 /3 width=6 by fqu_fwd_length_lref1, lt_to_le/
index f9293ec6820b9990abb93e957de687a6a1364163..3aab7facead4414bcb8c8c633d392b787cfd9ce3 100644 (file)
@@ -19,7 +19,7 @@ include "static_2/s_transition/fquq.ma".
 
 (* Forward lemmas with weight for closures **********************************)
 
-lemma fquq_fwd_fw: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90⸮[b] ⦃G2,L2,T2⦄ →
+lemma fquq_fwd_fw: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] ⦃G2,L2,T2⦄ →
                    ♯{G2,L2,T2} ≤ ♯{G1,L1,T1}.
 #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -H [2: * ]
 /3 width=2 by fqu_fwd_fw, lt_to_le/
index d3b9d83cbbbb574253dd33422b157b40f37e64a6..4ba7d8c56eec86d048aaf56f17da8b5502c1e378 100644 (file)
@@ -19,7 +19,7 @@ include "static_2/static/aaa_drops.ma".
 
 (* Properties on supclosure *************************************************)
 
-lemma aaa_fqu_conf: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90 ⦃G2,L2,T2⦄ →
+lemma aaa_fqu_conf: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82 ⦃G2,L2,T2⦄ →
                     ∀A1. ⦃G1,L1⦄ ⊢ T1 ⁝ A1 → ∃A2. ⦃G2,L2⦄ ⊢ T2 ⁝ A2.
 #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
 [ #I #G #L #T #A #H elim (aaa_inv_zero … H) -H
@@ -30,7 +30,7 @@ lemma aaa_fqu_conf: ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐ ⦃G2,L2,T2⦄ →
   | elim (aaa_inv_appl … H)
   | elim (aaa_inv_cast … H)
   ] -H /2 width=2 by ex_intro/
-| #p * #G #L #V #T #X #H
+| #p * #G #L #V #T #_ #X #H
   [ elim (aaa_inv_abbr … H)
   | elim (aaa_inv_abst … H)
   ] -H /2 width=2 by ex_intro/
@@ -43,20 +43,20 @@ lemma aaa_fqu_conf: ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⊐ ⦃G2,L2,T2⦄ →
 ]
 qed-.
 
-lemma aaa_fquq_conf: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90⸮ ⦃G2,L2,T2⦄ →
+lemma aaa_fquq_conf: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮ ⦃G2,L2,T2⦄ →
                      ∀A1. ⦃G1,L1⦄ ⊢ T1 ⁝ A1 → ∃A2. ⦃G2,L2⦄ ⊢ T2 ⁝ A2.
 #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -H /2 width=6 by aaa_fqu_conf/
 * #H1 #H2 #H3 destruct /2 width=2 by ex_intro/
 qed-.
 
-lemma aaa_fqup_conf: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90+ ⦃G2,L2,T2⦄ →
+lemma aaa_fqup_conf: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82+ ⦃G2,L2,T2⦄ →
                      ∀A1. ⦃G1,L1⦄ ⊢ T1 ⁝ A1 → ∃A2. ⦃G2,L2⦄ ⊢ T2 ⁝ A2.
 #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
 [2: #G #G2 #L #L2 #T #T2 #_ #H2 #IH1 #A #HA elim (IH1 … HA) -IH1 -A ]
 /2 width=6 by aaa_fqu_conf/
 qed-.
 
-lemma aaa_fqus_conf: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\8a\90* ⦃G2,L2,T2⦄ →
+lemma aaa_fqus_conf: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82* ⦃G2,L2,T2⦄ →
                      ∀A1. ⦃G1,L1⦄ ⊢ T1 ⁝ A1 → ∃A2. ⦃G2,L2⦄ ⊢ T2 ⁝ A2.
 #G1 #G2 #L1 #L2 #T1 #T2 #H elim(fqus_inv_fqup … H) -H /2 width=6 by aaa_fqup_conf/
 * #H1 #H2 #H3 destruct /2 width=2 by ex_intro/
index 26ae320e7094f548c9f00494c49ccb0a970318c7..ce0dda0d051658cd62af6194761e0409b23b0e06 100644 (file)
@@ -20,8 +20,8 @@ include "static_2/static/fdeq.ma".
 (* Properties with star-iterated structural successor for closures **********)
 
 lemma fdeq_fqus_trans: ∀b,G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ≛ ⦃G,L,T⦄ →
-                       â\88\80G2,L2,T2. â¦\83G,L,Tâ¦\84 â\8a\90*[b] ⦃G2,L2,T2⦄ →
-                       â\88\83â\88\83G,L0,T0. â¦\83G1,L1,T1â¦\84 â\8a\90*[b] ⦃G,L0,T0⦄ & ⦃G,L0,T0⦄ ≛ ⦃G2,L2,T2⦄.
+                       â\88\80G2,L2,T2. â¦\83G,L,Tâ¦\84 â¬\82*[b] ⦃G2,L2,T2⦄ →
+                       â\88\83â\88\83G,L0,T0. â¦\83G1,L1,T1â¦\84 â¬\82*[b] ⦃G,L0,T0⦄ & ⦃G,L0,T0⦄ ≛ ⦃G2,L2,T2⦄.
 #b #G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H2
 elim(fdeq_inv_gen_dx … H1) -H1 #HG #HL1 #HT1 destruct
 elim (rdeq_fqus_trans … H2 … HL1) -L #L #T0 #H2 #HT02 #HL2
index 054003f831a0538deb8b716e7e22b3de61ae5321..a312c25256552dbf99cd59ef32a61603f7a5cded 100644 (file)
@@ -13,7 +13,7 @@
 (**************************************************************************)
 
 include "ground_2/relocation/rtmap_sor.ma".
-include "static_2/notation/relations/freestar_3.ma".
+include "static_2/notation/relations/freeplus_3.ma".
 include "static_2/syntax/lenv.ma".
 
 (* CONTEXT-SENSITIVE FREE VARIABLES *****************************************)
@@ -35,11 +35,11 @@ inductive frees: relation3 lenv term rtmap ≝
 
 interpretation
    "context-sensitive free variables (term)"
-   'FreeStar L T f = (frees L T f).
+   'FreePlus L T f = (frees L T f).
 
 (* Basic inversion lemmas ***************************************************)
 
-fact frees_inv_sort_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≘ f → ∀x. X = ⋆x → 𝐈⦃f⦄.
+fact frees_inv_sort_aux: ∀f,L,X. L ⊢ 𝐅+⦃X⦄ ≘ f → ∀x. X = ⋆x → 𝐈⦃f⦄.
 #L #X #f #H elim H -f -L -X //
 [ #f #i #_ #x #H destruct
 | #f #_ #L #V #_ #_ #x #H destruct
@@ -50,11 +50,12 @@ fact frees_inv_sort_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≘ f → ∀x. X = ⋆x 
 ]
 qed-.
 
-lemma frees_inv_sort: ∀f,L,s. L ⊢ 𝐅*⦃⋆s⦄ ≘ f → 𝐈⦃f⦄.
+lemma frees_inv_sort: ∀f,L,s. L ⊢ 𝐅+⦃⋆s⦄ ≘ f → 𝐈⦃f⦄.
 /2 width=5 by frees_inv_sort_aux/ qed-.
 
-fact frees_inv_atom_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≘ f → ∀i. L = ⋆ → X = #i →
-                         ∃∃g. 𝐈⦃g⦄ & f = ⫯*[i]↑g.
+fact frees_inv_atom_aux:
+     ∀f,L,X. L ⊢ 𝐅+⦃X⦄ ≘ f → ∀i. L = ⋆ → X = #i →
+     ∃∃g. 𝐈⦃g⦄ & f = ⫯*[i]↑g.
 #f #L #X #H elim H -f -L -X
 [ #f #L #s #_ #j #_ #H destruct
 | #f #i #Hf #j #_ #H destruct /2 width=3 by ex2_intro/
@@ -67,11 +68,12 @@ fact frees_inv_atom_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≘ f → ∀i. L = ⋆ 
 ]
 qed-.
 
-lemma frees_inv_atom: ∀f,i. ⋆ ⊢ 𝐅*⦃#i⦄ ≘ f → ∃∃g. 𝐈⦃g⦄ & f = ⫯*[i]↑g.
+lemma frees_inv_atom: ∀f,i. ⋆ ⊢ 𝐅+⦃#i⦄ ≘ f → ∃∃g. 𝐈⦃g⦄ & f = ⫯*[i]↑g.
 /2 width=5 by frees_inv_atom_aux/ qed-.
 
-fact frees_inv_pair_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≘ f → ∀I,K,V. L = K.ⓑ{I}V → X = #0 →
-                         ∃∃g. K ⊢ 𝐅*⦃V⦄ ≘ g & f = ↑g.
+fact frees_inv_pair_aux:
+     ∀f,L,X. L ⊢ 𝐅+⦃X⦄ ≘ f → ∀I,K,V. L = K.ⓑ{I}V → X = #0 →
+     ∃∃g. K ⊢ 𝐅+⦃V⦄ ≘ g & f = ↑g.
 #f #L #X * -f -L -X
 [ #f #L #s #_ #Z #Y #X #_ #H destruct
 | #f #i #_ #Z #Y #X #H destruct
@@ -84,11 +86,12 @@ fact frees_inv_pair_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≘ f → ∀I,K,V. L = K.
 ]
 qed-.
 
-lemma frees_inv_pair: ∀f,I,K,V. K.ⓑ{I}V ⊢ 𝐅*⦃#0⦄ ≘ f → ∃∃g. K ⊢ 𝐅*⦃V⦄ ≘ g & f = ↑g.
+lemma frees_inv_pair: ∀f,I,K,V. K.ⓑ{I}V ⊢ 𝐅+⦃#0⦄ ≘ f → ∃∃g. K ⊢ 𝐅+⦃V⦄ ≘ g & f = ↑g.
 /2 width=6 by frees_inv_pair_aux/ qed-.
 
-fact frees_inv_unit_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≘ f → ∀I,K. L = K.ⓤ{I} → X = #0 →
-                         ∃∃g. 𝐈⦃g⦄ & f = ↑g.
+fact frees_inv_unit_aux:
+     ∀f,L,X. L ⊢ 𝐅+⦃X⦄ ≘ f → ∀I,K. L = K.ⓤ{I} → X = #0 →
+     ∃∃g. 𝐈⦃g⦄ & f = ↑g.
 #f #L #X * -f -L -X
 [ #f #L #s #_ #Z #Y #_ #H destruct
 | #f #i #_ #Z #Y #H destruct
@@ -101,11 +104,12 @@ fact frees_inv_unit_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≘ f → ∀I,K. L = K.
 ]
 qed-.
 
-lemma frees_inv_unit: ∀f,I,K. K.ⓤ{I} ⊢ 𝐅*⦃#0⦄ ≘ f → ∃∃g. 𝐈⦃g⦄ & f = ↑g.
+lemma frees_inv_unit: ∀f,I,K. K.ⓤ{I} ⊢ 𝐅+⦃#0⦄ ≘ f → ∃∃g. 𝐈⦃g⦄ & f = ↑g.
 /2 width=7 by frees_inv_unit_aux/ qed-.
 
-fact frees_inv_lref_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≘ f → ∀I,K,j. L = K.ⓘ{I} → X = #(↑j) →
-                         ∃∃g. K ⊢ 𝐅*⦃#j⦄ ≘ g & f = ⫯g.
+fact frees_inv_lref_aux:
+     ∀f,L,X. L ⊢ 𝐅+⦃X⦄ ≘ f → ∀I,K,j. L = K.ⓘ{I} → X = #(↑j) →
+     ∃∃g. K ⊢ 𝐅+⦃#j⦄ ≘ g & f = ⫯g.
 #f #L #X * -f -L -X
 [ #f #L #s #_ #Z #Y #j #_ #H destruct
 | #f #i #_ #Z #Y #j #H destruct
@@ -118,11 +122,12 @@ fact frees_inv_lref_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≘ f → ∀I,K,j. L = K.
 ]
 qed-.
 
-lemma frees_inv_lref: ∀f,I,K,i. K.ⓘ{I} ⊢ 𝐅*⦃#(↑i)⦄ ≘ f →
-                      ∃∃g. K ⊢ 𝐅*⦃#i⦄ ≘ g & f = ⫯g.
+lemma frees_inv_lref:
+      ∀f,I,K,i. K.ⓘ{I} ⊢ 𝐅+⦃#(↑i)⦄ ≘ f →
+      ∃∃g. K ⊢ 𝐅+⦃#i⦄ ≘ g & f = ⫯g.
 /2 width=6 by frees_inv_lref_aux/ qed-.
 
-fact frees_inv_gref_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≘ f → ∀x. X = §x → 𝐈⦃f⦄.
+fact frees_inv_gref_aux: ∀f,L,X. L ⊢ 𝐅+⦃X⦄ ≘ f → ∀x. X = §x → 𝐈⦃f⦄.
 #f #L #X #H elim H -f -L -X //
 [ #f #i #_ #x #H destruct
 | #f #_ #L #V #_ #_ #x #H destruct
@@ -133,11 +138,12 @@ fact frees_inv_gref_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≘ f → ∀x. X = §x 
 ]
 qed-.
 
-lemma frees_inv_gref: ∀f,L,l. L ⊢ 𝐅*⦃§l⦄ ≘ f → 𝐈⦃f⦄.
+lemma frees_inv_gref: ∀f,L,l. L ⊢ 𝐅+⦃§l⦄ ≘ f → 𝐈⦃f⦄.
 /2 width=5 by frees_inv_gref_aux/ qed-.
 
-fact frees_inv_bind_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≘ f → ∀p,I,V,T. X = ⓑ{p,I}V.T →
-                         ∃∃f1,f2. L ⊢ 𝐅*⦃V⦄ ≘ f1 & L.ⓑ{I}V ⊢ 𝐅*⦃T⦄ ≘ f2 & f1 ⋓ ⫱f2 ≘ f.
+fact frees_inv_bind_aux:
+     ∀f,L,X. L ⊢ 𝐅+⦃X⦄ ≘ f → ∀p,I,V,T. X = ⓑ{p,I}V.T →
+     ∃∃f1,f2. L ⊢ 𝐅+⦃V⦄ ≘ f1 & L.ⓑ{I}V ⊢ 𝐅+⦃T⦄ ≘ f2 & f1 ⋓ ⫱f2 ≘ f.
 #f #L #X * -f -L -X
 [ #f #L #s #_ #q #J #W #U #H destruct
 | #f #i #_ #q #J #W #U #H destruct
@@ -150,12 +156,13 @@ fact frees_inv_bind_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≘ f → ∀p,I,V,T. X =
 ]
 qed-.
 
-lemma frees_inv_bind: ∀f,p,I,L,V,T. L ⊢ 𝐅*⦃ⓑ{p,I}V.T⦄ ≘ f →
-                      ∃∃f1,f2. L ⊢ 𝐅*⦃V⦄ ≘ f1 & L.ⓑ{I}V ⊢ 𝐅*⦃T⦄ ≘ f2 & f1 ⋓ ⫱f2 ≘ f.
+lemma frees_inv_bind:
+      ∀f,p,I,L,V,T. L ⊢ 𝐅+⦃ⓑ{p,I}V.T⦄ ≘ f →
+      ∃∃f1,f2. L ⊢ 𝐅+⦃V⦄ ≘ f1 & L.ⓑ{I}V ⊢ 𝐅+⦃T⦄ ≘ f2 & f1 ⋓ ⫱f2 ≘ f.
 /2 width=4 by frees_inv_bind_aux/ qed-.
 
-fact frees_inv_flat_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≘ f → ∀I,V,T. X = ⓕ{I}V.T →
-                         ∃∃f1,f2. L ⊢ 𝐅*⦃V⦄ ≘ f1 & L ⊢ 𝐅*⦃T⦄ ≘ f2 & f1 ⋓ f2 ≘ f.
+fact frees_inv_flat_aux: ∀f,L,X. L ⊢ 𝐅+⦃X⦄ ≘ f → ∀I,V,T. X = ⓕ{I}V.T →
+                         ∃∃f1,f2. L ⊢ 𝐅+⦃V⦄ ≘ f1 & L ⊢ 𝐅+⦃T⦄ ≘ f2 & f1 ⋓ f2 ≘ f.
 #f #L #X * -f -L -X
 [ #f #L #s #_ #J #W #U #H destruct
 | #f #i #_ #J #W #U #H destruct
@@ -168,13 +175,14 @@ fact frees_inv_flat_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≘ f → ∀I,V,T. X = 
 ]
 qed-.
 
-lemma frees_inv_flat: ∀f,I,L,V,T. L ⊢ 𝐅*⦃ⓕ{I}V.T⦄ ≘ f →
-                      ∃∃f1,f2. L ⊢ 𝐅*⦃V⦄ ≘ f1 & L ⊢ 𝐅*⦃T⦄ ≘ f2 & f1 ⋓ f2 ≘ f.
+lemma frees_inv_flat:
+      ∀f,I,L,V,T. L ⊢ 𝐅+⦃ⓕ{I}V.T⦄ ≘ f →
+      ∃∃f1,f2. L ⊢ 𝐅+⦃V⦄ ≘ f1 & L ⊢ 𝐅+⦃T⦄ ≘ f2 & f1 ⋓ f2 ≘ f.
 /2 width=4 by frees_inv_flat_aux/ qed-.
 
 (* Basic properties ********************************************************)
 
-lemma frees_eq_repl_back: ∀L,T. eq_repl_back … (λf. L ⊢ 𝐅*⦃T⦄ ≘ f).
+lemma frees_eq_repl_back: ∀L,T. eq_repl_back … (λf. L ⊢ 𝐅+⦃T⦄ ≘ f).
 #L #T #f1 #H elim H -f1 -L -T
 [ /3 width=3 by frees_sort, isid_eq_repl_back/
 | #f1 #i #Hf1 #g2 #H
@@ -195,11 +203,11 @@ lemma frees_eq_repl_back: ∀L,T. eq_repl_back … (λf. L ⊢ 𝐅*⦃T⦄ ≘
 ]
 qed-.
 
-lemma frees_eq_repl_fwd: ∀L,T. eq_repl_fwd … (λf. L ⊢ 𝐅*⦃T⦄ ≘ f).
+lemma frees_eq_repl_fwd: ∀L,T. eq_repl_fwd … (λf. L ⊢ 𝐅+⦃T⦄ ≘ f).
 #L #T @eq_repl_sym /2 width=3 by frees_eq_repl_back/
 qed-.
 
-lemma frees_lref_push: ∀f,i. ⋆ ⊢ 𝐅*⦃#i⦄ ≘ f → ⋆ ⊢ 𝐅*⦃#↑i⦄ ≘ ⫯f.
+lemma frees_lref_push: ∀f,i. ⋆ ⊢ 𝐅+⦃#i⦄ ≘ f → ⋆ ⊢ 𝐅+⦃#↑i⦄ ≘ ⫯f.
 #f #i #H
 elim (frees_inv_atom … H) -H #g #Hg #H destruct
 /2 width=1 by frees_atom/
@@ -207,7 +215,7 @@ qed.
 
 (* Forward lemmas with test for finite colength *****************************)
 
-lemma frees_fwd_isfin: ∀f,L,T. L ⊢ 𝐅*⦃T⦄ ≘ f → 𝐅⦃f⦄.
+lemma frees_fwd_isfin: ∀f,L,T. L ⊢ 𝐅+⦃T⦄ ≘ f → 𝐅⦃f⦄.
 #f #L #T #H elim H -f -L -T
 /4 width=5 by sor_isfin, isfin_isid, isfin_tl, isfin_pushs, isfin_push, isfin_next/
 qed-.
index ce8d3480824fa6d7940439df86d12ede35205b87..42523bb395637591e9c0e89d191d2384241f50fe 100644 (file)
@@ -19,7 +19,7 @@ include "static_2/static/frees.ma".
 
 (* Properties with append for local environments ****************************)
 
-lemma frees_append_void: ∀f,K,T. K ⊢ 𝐅*⦃T⦄ ≘ f → ⓧ.K ⊢ 𝐅*⦃T⦄ ≘ f.
+lemma frees_append_void: ∀f,K,T. K ⊢ 𝐅+⦃T⦄ ≘ f → ⓧ.K ⊢ 𝐅+⦃T⦄ ≘ f.
 #f #K #T #H elim H -f -K -T
 [ /2 width=1 by frees_sort/
 | #f * /3 width=1 by frees_atom, frees_unit, frees_lref/
@@ -34,8 +34,9 @@ qed.
 
 (* Inversion lemmas with append for local environments **********************)
 
-fact frees_inv_append_void_aux: ∀f,L,T. L ⊢ 𝐅*⦃T⦄ ≘ f →
-                                ∀K. L = ⓧ.K → K ⊢ 𝐅*⦃T⦄ ≘ f.
+fact frees_inv_append_void_aux:
+     ∀f,L,T. L ⊢ 𝐅+⦃T⦄ ≘ f →
+     ∀K. L = ⓧ.K → K ⊢ 𝐅+⦃T⦄ ≘ f.
 #f #L #T #H elim H -f -L -T
 [ /2 width=1 by frees_sort/
 | #f #i #_ #K #H 
@@ -55,5 +56,5 @@ fact frees_inv_append_void_aux: ∀f,L,T. L ⊢ 𝐅*⦃T⦄ ≘ f →
 ]
 qed-.
 
-lemma frees_inv_append_void: ∀f,K,T. ⓧ.K  ⊢ 𝐅*⦃T⦄ ≘ f → K ⊢ 𝐅*⦃T⦄ ≘ f.
+lemma frees_inv_append_void: ∀f,K,T. ⓧ.K  ⊢ 𝐅+⦃T⦄ ≘ f → K ⊢ 𝐅+⦃T⦄ ≘ f.
 /2 width=3 by frees_inv_append_void_aux/ qed-.
index 8a9fc3ce09798bdb3b4ffa4f6a43afda9e2d8aed..d936eda8129ec6a1f5a4458a27af71560157493f 100644 (file)
@@ -20,8 +20,9 @@ include "static_2/static/frees_fqup.ma".
 
 (* Advanced properties ******************************************************)
 
-lemma frees_atom_drops: ∀b,L,i. ⬇*[b,𝐔❴i❵] L ≘ ⋆ →
-                        ∀f. 𝐈⦃f⦄ → L ⊢ 𝐅*⦃#i⦄ ≘ ⫯*[i]↑f.
+lemma frees_atom_drops: 
+      ∀b,L,i. ⬇*[b,𝐔❴i❵] L ≘ ⋆ →
+      ∀f. 𝐈⦃f⦄ → L ⊢ 𝐅+⦃#i⦄ ≘ ⫯*[i]↑f.
 #b #L elim L -L /2 width=1 by frees_atom/
 #L #I #IH *
 [ #H lapply (drops_fwd_isid … H ?) -H // #H destruct
@@ -29,16 +30,18 @@ lemma frees_atom_drops: ∀b,L,i. ⬇*[b,𝐔❴i❵] L ≘ ⋆ →
 ]
 qed.
 
-lemma frees_pair_drops: ∀f,K,V. K ⊢ 𝐅*⦃V⦄ ≘ f → 
-                        ∀i,I,L. ⬇*[i] L ≘ K.ⓑ{I}V → L ⊢ 𝐅*⦃#i⦄ ≘ ⫯*[i] ↑f.
+lemma frees_pair_drops:
+      ∀f,K,V. K ⊢ 𝐅+⦃V⦄ ≘ f → 
+      ∀i,I,L. ⬇*[i] L ≘ K.ⓑ{I}V → L ⊢ 𝐅+⦃#i⦄ ≘ ⫯*[i] ↑f.
 #f #K #V #Hf #i elim i -i
 [ #I #L #H lapply (drops_fwd_isid … H ?) -H /2 width=1 by frees_pair/
 | #i #IH #I #L #H elim (drops_inv_succ … H) -H /3 width=2 by frees_lref/
 ]
 qed.
 
-lemma frees_unit_drops: ∀f.  𝐈⦃f⦄ → ∀I,K,i,L. ⬇*[i] L ≘ K.ⓤ{I} →
-                       L ⊢ 𝐅*⦃#i⦄ ≘ ⫯*[i] ↑f.
+lemma frees_unit_drops:
+      ∀f.  𝐈⦃f⦄ → ∀I,K,i,L. ⬇*[i] L ≘ K.ⓤ{I} →
+      L ⊢ 𝐅+⦃#i⦄ ≘ ⫯*[i] ↑f.
 #f #Hf #I #K #i elim i -i
 [ #L #H lapply (drops_fwd_isid … H ?) -H /2 width=1 by frees_unit/
 | #i #IH #Y #H elim (drops_inv_succ … H) -H
@@ -46,16 +49,18 @@ lemma frees_unit_drops: ∀f.  𝐈⦃f⦄ → ∀I,K,i,L. ⬇*[i] L ≘ K.ⓤ{I
 ]
 qed.
 (*
-lemma frees_sort_pushs: ∀f,K,s. K ⊢ 𝐅*⦃⋆s⦄ ≘ f →
-                        ∀i,L. ⬇*[i] L ≘ K → L ⊢ 𝐅*⦃⋆s⦄ ≘ ⫯*[i] f.
+lemma frees_sort_pushs:
+      ∀f,K,s. K ⊢ 𝐅+⦃⋆s⦄ ≘ f →
+      ∀i,L. ⬇*[i] L ≘ K → L ⊢ 𝐅+⦃⋆s⦄ ≘ ⫯*[i] f.
 #f #K #s #Hf #i elim i -i
 [ #L #H lapply (drops_fwd_isid … H ?) -H //
 | #i #IH #L #H elim (drops_inv_succ … H) -H /3 width=1 by frees_sort/
 ]
 qed.
 *)
-lemma frees_lref_pushs: ∀f,K,j. K ⊢ 𝐅*⦃#j⦄ ≘ f →
-                        ∀i,L. ⬇*[i] L ≘ K → L ⊢ 𝐅*⦃#(i+j)⦄ ≘ ⫯*[i] f.
+lemma frees_lref_pushs:
+      ∀f,K,j. K ⊢ 𝐅+⦃#j⦄ ≘ f →
+      ∀i,L. ⬇*[i] L ≘ K → L ⊢ 𝐅+⦃#(i+j)⦄ ≘ ⫯*[i] f.
 #f #K #j #Hf #i elim i -i
 [ #L #H lapply (drops_fwd_isid … H ?) -H //
 | #i #IH #L #H elim (drops_inv_succ … H) -H
@@ -63,8 +68,9 @@ lemma frees_lref_pushs: ∀f,K,j. K ⊢ 𝐅*⦃#j⦄ ≘ f →
 ]
 qed.
 (*
-lemma frees_gref_pushs: ∀f,K,l. K ⊢ 𝐅*⦃§l⦄ ≘ f →
-                        ∀i,L. ⬇*[i] L ≘ K → L ⊢ 𝐅*⦃§l⦄ ≘ ⫯*[i] f.
+lemma frees_gref_pushs:
+      ∀f,K,l. K ⊢ 𝐅+⦃§l⦄ ≘ f →
+      ∀i,L. ⬇*[i] L ≘ K → L ⊢ 𝐅+⦃§l⦄ ≘ ⫯*[i] f.
 #f #K #l #Hf #i elim i -i
 [ #L #H lapply (drops_fwd_isid … H ?) -H //
 | #i #IH #L #H elim (drops_inv_succ … H) -H /3 width=1 by frees_gref/
@@ -73,11 +79,11 @@ qed.
 *)
 (* Advanced inversion lemmas ************************************************)
 
-lemma frees_inv_lref_drops: ∀L,i,f. L ⊢ 𝐅*⦃#i⦄ ≘ f →
-                            ∨∨ ∃∃g. ⬇*[Ⓕ,𝐔❴i❵] L ≘ ⋆ & 𝐈⦃g⦄ & f = ⫯*[i] ↑g
-                             | ∃∃g,I,K,V. K ⊢ 𝐅*⦃V⦄ ≘ g &
-                                          ⬇*[i] L ≘ K.ⓑ{I}V & f = ⫯*[i] ↑g
-                             | ∃∃g,I,K. ⬇*[i] L ≘ K.ⓤ{I} & 𝐈⦃g⦄ & f = ⫯*[i] ↑g.
+lemma frees_inv_lref_drops:
+      ∀L,i,f. L ⊢ 𝐅+⦃#i⦄ ≘ f →
+      ∨∨ ∃∃g. ⬇*[Ⓕ,𝐔❴i❵] L ≘ ⋆ & 𝐈⦃g⦄ & f = ⫯*[i] ↑g
+       | ∃∃g,I,K,V. K ⊢ 𝐅+⦃V⦄ ≘ g & ⬇*[i] L ≘ K.ⓑ{I}V & f = ⫯*[i] ↑g
+       | ∃∃g,I,K. ⬇*[i] L ≘ K.ⓤ{I} & 𝐈⦃g⦄ & f = ⫯*[i] ↑g.
 #L elim L -L
 [ #i #g | #L #I #IH * [ #g cases I -I [ #I | #I #V ] -IH | #i #g ] ] #H
 [ elim (frees_inv_atom … H) -H #f #Hf #H destruct
@@ -97,9 +103,10 @@ qed-.
 
 (* Properties with generic slicing for local environments *******************)
 
-lemma frees_lifts: ∀b,f1,K,T. K ⊢ 𝐅*⦃T⦄ ≘ f1 →
-                   ∀f,L. ⬇*[b,f] L ≘ K → ∀U. ⬆*[f] T ≘ U →
-                   ∀f2. f ~⊚ f1 ≘ f2 → L ⊢ 𝐅*⦃U⦄ ≘ f2.
+lemma frees_lifts:
+      ∀b,f1,K,T. K ⊢ 𝐅+⦃T⦄ ≘ f1 →
+      ∀f,L. ⬇*[b,f] L ≘ K → ∀U. ⬆*[f] T ≘ U →
+      ∀f2. f ~⊚ f1 ≘ f2 → L ⊢ 𝐅+⦃U⦄ ≘ f2.
 #b #f1 #K #T #H lapply (frees_fwd_isfin … H) elim H -f1 -K -T
 [ #f1 #K #s #Hf1 #_ #f #L #HLK #U #H2 #f2 #H3
   lapply (coafter_isid_inv_dx … H3 … Hf1) -f1 #Hf2
@@ -154,48 +161,54 @@ lemma frees_lifts: ∀b,f1,K,T. K ⊢ 𝐅*⦃T⦄ ≘ f1 →
 ]
 qed-.
 
-lemma frees_lifts_SO: ∀b,L,K. ⬇*[b,𝐔❴1❵] L ≘ K → ∀T,U. ⬆*[1] T ≘ U →
-                      ∀f. K ⊢ 𝐅*⦃T⦄ ≘ f → L ⊢ 𝐅*⦃U⦄ ≘ ⫯f.
+lemma frees_lifts_SO:
+      ∀b,L,K. ⬇*[b,𝐔❴1❵] L ≘ K → ∀T,U. ⬆*[1] T ≘ U →
+      ∀f. K ⊢ 𝐅+⦃T⦄ ≘ f → L ⊢ 𝐅+⦃U⦄ ≘ ⫯f.
 #b #L #K #HLK #T #U #HTU #f #Hf
 @(frees_lifts b … Hf … HTU) //  (**) (* auto fails *)
 qed.
 
 (* Forward lemmas with generic slicing for local environments ***************)
 
-lemma frees_fwd_coafter: ∀b,f2,L,U. L ⊢ 𝐅*⦃U⦄ ≘ f2 →
-                         ∀f,K. ⬇*[b,f] L ≘ K → ∀T. ⬆*[f] T ≘ U →
-                         ∀f1. K ⊢ 𝐅*⦃T⦄ ≘ f1 → f ~⊚ f1 ≘ f2.
+lemma frees_fwd_coafter:
+      ∀b,f2,L,U. L ⊢ 𝐅+⦃U⦄ ≘ f2 →
+      ∀f,K. ⬇*[b,f] L ≘ K → ∀T. ⬆*[f] T ≘ U →
+      ∀f1. K ⊢ 𝐅+⦃T⦄ ≘ f1 → f ~⊚ f1 ≘ f2.
 /4 width=11 by frees_lifts, frees_mono, coafter_eq_repl_back0/ qed-.
 
 (* Inversion lemmas with generic slicing for local environments *************)
 
-lemma frees_inv_lifts_ex: ∀b,f2,L,U. L ⊢ 𝐅*⦃U⦄ ≘ f2 →
-                          ∀f,K. ⬇*[b,f] L ≘ K → ∀T. ⬆*[f] T ≘ U →
-                          ∃∃f1. f ~⊚ f1 ≘ f2 & K ⊢ 𝐅*⦃T⦄ ≘ f1.
+lemma frees_inv_lifts_ex:
+      ∀b,f2,L,U. L ⊢ 𝐅+⦃U⦄ ≘ f2 →
+      ∀f,K. ⬇*[b,f] L ≘ K → ∀T. ⬆*[f] T ≘ U →
+      ∃∃f1. f ~⊚ f1 ≘ f2 & K ⊢ 𝐅+⦃T⦄ ≘ f1.
 #b #f2 #L #U #Hf2 #f #K #HLK #T elim (frees_total K T)
 /3 width=9 by frees_fwd_coafter, ex2_intro/
 qed-.
 
-lemma frees_inv_lifts_SO: ∀b,f,L,U. L ⊢ 𝐅*⦃U⦄ ≘ f →
-                          ∀K. ⬇*[b,𝐔❴1❵] L ≘ K → ∀T. ⬆*[1] T ≘ U →
-                          K ⊢ 𝐅*⦃T⦄ ≘ ⫱f.
+lemma frees_inv_lifts_SO:
+      ∀b,f,L,U. L ⊢ 𝐅+⦃U⦄ ≘ f →
+      ∀K. ⬇*[b,𝐔❴1❵] L ≘ K → ∀T. ⬆*[1] T ≘ U →
+      K ⊢ 𝐅+⦃T⦄ ≘ ⫱f.
 #b #f #L #U #H #K #HLK #T #HTU elim(frees_inv_lifts_ex … H … HLK … HTU) -b -L -U
 #f1 #Hf #Hf1 elim (coafter_inv_nxx … Hf) -Hf
 /3 width=5 by frees_eq_repl_back, coafter_isid_inv_sn/
 qed-.
 
-lemma frees_inv_lifts: ∀b,f2,L,U. L ⊢ 𝐅*⦃U⦄ ≘ f2 →
-                       ∀f,K. ⬇*[b,f] L ≘ K → ∀T. ⬆*[f] T ≘ U →
-                       ∀f1. f ~⊚ f1 ≘ f2 → K ⊢ 𝐅*⦃T⦄ ≘ f1.
+lemma frees_inv_lifts:
+      ∀b,f2,L,U. L ⊢ 𝐅+⦃U⦄ ≘ f2 →
+      ∀f,K. ⬇*[b,f] L ≘ K → ∀T. ⬆*[f] T ≘ U →
+      ∀f1. f ~⊚ f1 ≘ f2 → K ⊢ 𝐅+⦃T⦄ ≘ f1.
 #b #f2 #L #U #H #f #K #HLK #T #HTU #f1 #Hf2 elim (frees_inv_lifts_ex … H … HLK … HTU) -b -L -U
 /3 width=7 by frees_eq_repl_back, coafter_inj/
 qed-.
 
 (* Note: this is used by rex_conf and might be modified *)
-lemma frees_inv_drops_next: ∀f1,L1,T1. L1 ⊢ 𝐅*⦃T1⦄ ≘ f1 →
-                            ∀I2,L2,V2,n. ⬇*[n] L1 ≘ L2.ⓑ{I2}V2 →
-                            ∀g1. ↑g1 = ⫱*[n] f1 →
-                            ∃∃g2. L2 ⊢ 𝐅*⦃V2⦄ ≘ g2 & g2 ⊆ g1.
+lemma frees_inv_drops_next:
+      ∀f1,L1,T1. L1 ⊢ 𝐅+⦃T1⦄ ≘ f1 →
+      ∀I2,L2,V2,n. ⬇*[n] L1 ≘ L2.ⓑ{I2}V2 →
+      ∀g1. ↑g1 = ⫱*[n] f1 →
+      ∃∃g2. L2 ⊢ 𝐅+⦃V2⦄ ≘ g2 & g2 ⊆ g1.
 #f1 #L1 #T1 #H elim H -f1 -L1 -T1
 [ #f1 #L1 #s #Hf1 #I2 #L2 #V2 #n #_ #g1 #H1 -I2 -L1 -s
   lapply (isid_tls n … Hf1) -Hf1 <H1 -f1 #Hf1
index abaf4ff15945e715dcbe7d2c48e23b758488048f..feb74eb263f4fc3d49639e1d98d91c8c9b114005 100644 (file)
@@ -20,7 +20,7 @@ include "static_2/static/lsubf_lsubr.ma".
 (* Advanced properties ******************************************************)
 
 (* Note: this replaces lemma 1400 concluding the "big tree" theorem *)
-lemma frees_total: ∀L,T. ∃f. L ⊢ 𝐅*⦃T⦄ ≘ f.
+lemma frees_total: ∀L,T. ∃f. L ⊢ 𝐅+⦃T⦄ ≘ f.
 #L #T @(fqup_wf_ind_eq (Ⓣ) … (⋆) L T) -L -T
 #G0 #L0 #T0 #IH #G #L * *
 [ /3 width=2 by frees_sort, ex_intro/
@@ -51,8 +51,9 @@ qed-.
 
 (* Advanced main properties *************************************************)
 
-theorem frees_bind_void: ∀f1,L,V. L ⊢ 𝐅*⦃V⦄ ≘ f1 → ∀f2,T. L.ⓧ ⊢ 𝐅*⦃T⦄ ≘ f2 →
-                         ∀f. f1 ⋓ ⫱f2 ≘ f → ∀p,I. L ⊢ 𝐅*⦃ⓑ{p,I}V.T⦄ ≘ f.
+theorem frees_bind_void:
+        ∀f1,L,V. L ⊢ 𝐅+⦃V⦄ ≘ f1 → ∀f2,T. L.ⓧ ⊢ 𝐅+⦃T⦄ ≘ f2 →
+        ∀f. f1 ⋓ ⫱f2 ≘ f → ∀p,I. L ⊢ 𝐅+⦃ⓑ{p,I}V.T⦄ ≘ f.
 #f1 #L #V #Hf1 #f2 #T #Hf2 #f #Hf #p #I
 elim (frees_total (L.ⓑ{I}V) T) #f0 #Hf0
 lapply (lsubr_lsubf … Hf2 … Hf0) -Hf2 /2 width=5 by lsubr_unit/ #H02
@@ -78,8 +79,9 @@ qed-.
 
 (* Advanced inversion lemmas ************************************************)
 
-lemma frees_inv_bind_void: ∀f,p,I,L,V,T. L ⊢ 𝐅*⦃ⓑ{p,I}V.T⦄ ≘ f →
-                           ∃∃f1,f2. L ⊢ 𝐅*⦃V⦄ ≘ f1 & L.ⓧ ⊢ 𝐅*⦃T⦄ ≘ f2 & f1 ⋓ ⫱f2 ≘ f.
+lemma frees_inv_bind_void:
+      ∀f,p,I,L,V,T. L ⊢ 𝐅+⦃ⓑ{p,I}V.T⦄ ≘ f →
+      ∃∃f1,f2. L ⊢ 𝐅+⦃V⦄ ≘ f1 & L.ⓧ ⊢ 𝐅+⦃T⦄ ≘ f2 & f1 ⋓ ⫱f2 ≘ f.
 #f #p #I #L #V #T #H
 elim (frees_inv_bind … H) -H #f1 #f2 #Hf1 #Hf2 #Hf
 elim (frees_total (L.ⓧ) T) #f0 #Hf0
@@ -100,31 +102,31 @@ elim (pn_split f0) * #g0 #H destruct
 ]
 qed-.
 
-lemma frees_ind_void: ∀Q:relation3 ….
-                      (
-                         ∀f,L,s. 𝐈⦃f⦄ →  Q L (⋆s) f
-                      ) → (
-                         ∀f,i. 𝐈⦃f⦄ →  Q (⋆) (#i) (⫯*[i]↑f)
-                      ) → (
-                         ∀f,I,L,V.
-                         L ⊢ 𝐅*⦃V⦄ ≘ f →  Q L V f→ Q (L.ⓑ{I}V) (#O) (↑f) 
-                      ) → (
-                         ∀f,I,L. 𝐈⦃f⦄ →  Q (L.ⓤ{I}) (#O) (↑f)
-                      ) → (
-                         ∀f,I,L,i.
-                         L ⊢ 𝐅*⦃#i⦄ ≘ f →  Q L (#i) f → Q (L.ⓘ{I}) (#(↑i)) (⫯f)
-                      ) → (
-                         ∀f,L,l. 𝐈⦃f⦄ →  Q L (§l) f
-                      ) → (
-                         ∀f1,f2,f,p,I,L,V,T.
-                         L ⊢ 𝐅*⦃V⦄ ≘ f1 → L.ⓧ ⊢𝐅*⦃T⦄≘ f2 → f1 ⋓ ⫱f2 ≘ f →
-                         Q L V f1 → Q (L.ⓧ) T f2 → Q L (ⓑ{p,I}V.T) f
-                      ) → (
-                         ∀f1,f2,f,I,L,V,T.
-                         L ⊢ 𝐅*⦃V⦄ ≘ f1 → L ⊢𝐅*⦃T⦄ ≘ f2 → f1 ⋓ f2 ≘ f →
-                         Q L V f1 → Q L T f2 → Q L (ⓕ{I}V.T) f
-                      ) →
-                      ∀L,T,f. L ⊢ 𝐅*⦃T⦄ ≘ f →  Q L T f.
+lemma frees_ind_void (Q:relation3 …):
+      (
+        ∀f,L,s. 𝐈⦃f⦄ →  Q L (⋆s) f
+      ) → (
+        ∀f,i. 𝐈⦃f⦄ →  Q (⋆) (#i) (⫯*[i]↑f)
+      ) → (
+        ∀f,I,L,V.
+        L ⊢ 𝐅+⦃V⦄ ≘ f →  Q L V f→ Q (L.ⓑ{I}V) (#O) (↑f) 
+      ) → (
+        ∀f,I,L. 𝐈⦃f⦄ →  Q (L.ⓤ{I}) (#O) (↑f)
+      ) → (
+        ∀f,I,L,i.
+        L ⊢ 𝐅+⦃#i⦄ ≘ f →  Q L (#i) f → Q (L.ⓘ{I}) (#(↑i)) (⫯f)
+      ) → (
+        ∀f,L,l. 𝐈⦃f⦄ →  Q L (§l) f
+      ) → (
+        ∀f1,f2,f,p,I,L,V,T.
+        L ⊢ 𝐅+⦃V⦄ ≘ f1 → L.ⓧ ⊢𝐅+⦃T⦄≘ f2 → f1 ⋓ ⫱f2 ≘ f →
+        Q L V f1 → Q (L.ⓧ) T f2 → Q L (ⓑ{p,I}V.T) f
+      ) → (
+        ∀f1,f2,f,I,L,V,T.
+        L ⊢ 𝐅+⦃V⦄ ≘ f1 → L ⊢𝐅+⦃T⦄ ≘ f2 → f1 ⋓ f2 ≘ f →
+        Q L V f1 → Q L T f2 → Q L (ⓕ{I}V.T) f
+      ) →
+      ∀L,T,f. L ⊢ 𝐅+⦃T⦄ ≘ f →  Q L T f.
 #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #L #T
 @(fqup_wf_ind_eq (Ⓕ) … (⋆) L T) -L -T #G0 #L0 #T0 #IH #G #L * *
 [ #s #HG #HL #HT #f #H destruct -IH
index c612ce7c7284918f5f30bf1f519e1c0ea11d8875..d694ca4554f251d2cd55ad587a790e916ad15f53 100644 (file)
@@ -18,7 +18,7 @@ include "static_2/static/frees.ma".
 
 (* Main inversion lemmas ****************************************************)
 
-theorem frees_mono: ∀f1,L,T. L ⊢ 𝐅*⦃T⦄ ≘ f1 → ∀f2. L ⊢ 𝐅*⦃T⦄ ≘ f2 → f1 ≡ f2.
+theorem frees_mono: ∀f1,L,T. L ⊢ 𝐅+⦃T⦄ ≘ f1 → ∀f2. L ⊢ 𝐅+⦃T⦄ ≘ f2 → f1 ≡ f2.
 #f1 #L #T #H elim H -f1 -L -T
 [ /3 width=3 by frees_inv_sort, isid_inv_eq_repl/
 | #f1 #i #Hf1 #g2 #H
index 51c334d1073d0e21b1014979e6278d39730e92da..8fe83413ac5f3dac716226ec25f1bf917788e44e 100644 (file)
@@ -20,7 +20,7 @@ include "static_2/static/frees.ma".
 (* FREE VARIABLES INCLUSION FOR RESTRICTED CLOSURES *************************)
 
 definition fsle: bi_relation lenv term ≝ λL1,T1,L2,T2.
-                 ∃∃n1,n2,f1,f2. L1 ⊢ 𝐅*⦃T1⦄ ≘ f1 & L2 ⊢ 𝐅*⦃T2⦄ ≘ f2 &
+                 ∃∃n1,n2,f1,f2. L1 ⊢ 𝐅+⦃T1⦄ ≘ f1 & L2 ⊢ 𝐅+⦃T2⦄ ≘ f2 &
                                 L1 ≋ⓧ*[n1,n2] L2 & ⫱*[n1]f1 ⊆ ⫱*[n2]f2.
 
 interpretation "free variables inclusion (restricted closure)"
index 580051ceacbf72758f6723c22050235edce0eb94..588182317cdf7db2a2614bd0b2d76aac30b45061 100644 (file)
@@ -19,10 +19,10 @@ include "static_2/static/fsle_fqup.ma".
 
 (* Advanced inversion lemmas ************************************************)
 
-lemma fsle_frees_trans: ∀L1,L2,T1,T2. ⦃L1,T1⦄ ⊆ ⦃L2,T2⦄ →
-                        ∀f2. L2 ⊢ 𝐅*⦃T2⦄ ≘ f2 →
-                        ∃∃n1,n2,f1. L1 ⊢ 𝐅*⦃T1⦄ ≘ f1 &
-                                    L1 ≋ⓧ*[n1,n2] L2 & ⫱*[n1]f1 ⊆ ⫱*[n2]f2.
+lemma fsle_frees_trans: 
+      ∀L1,L2,T1,T2. ⦃L1,T1⦄ ⊆ ⦃L2,T2⦄ →
+      ∀f2. L2 ⊢ 𝐅+⦃T2⦄ ≘ f2 →
+      ∃∃n1,n2,f1. L1 ⊢ 𝐅+⦃T1⦄ ≘ f1 & L1 ≋ⓧ*[n1,n2] L2 & ⫱*[n1]f1 ⊆ ⫱*[n2]f2.
 #L1 #L2 #T1 #T2 * #n1 #n2 #f1 #g2 #Hf1 #Hg2 #HL #Hn #f2 #Hf2
 lapply (frees_mono … Hg2 … Hf2) -Hg2 -Hf2 #Hgf2
 lapply (tls_eq_repl n2 … Hgf2) -Hgf2 #Hgf2
@@ -30,19 +30,21 @@ lapply (sle_eq_repl_back2 … Hn … Hgf2) -g2
 /2 width=6 by ex3_3_intro/
 qed-.
 
-lemma fsle_frees_trans_eq: ∀L1,L2. |L1| = |L2| →
-                           ∀T1,T2. ⦃L1,T1⦄ ⊆ ⦃L2,T2⦄ → ∀f2. L2 ⊢ 𝐅*⦃T2⦄ ≘ f2 →
-                           ∃∃f1. L1 ⊢ 𝐅*⦃T1⦄ ≘ f1 & f1 ⊆ f2.
+lemma fsle_frees_trans_eq:
+      ∀L1,L2. |L1| = |L2| →
+      ∀T1,T2. ⦃L1,T1⦄ ⊆ ⦃L2,T2⦄ → ∀f2. L2 ⊢ 𝐅+⦃T2⦄ ≘ f2 →
+      ∃∃f1. L1 ⊢ 𝐅+⦃T1⦄ ≘ f1 & f1 ⊆ f2.
 #L1 #L2 #H1L #T1 #T2 #H2L #f2 #Hf2
 elim (fsle_frees_trans … H2L … Hf2) -T2 #n1 #n2 #f1 #Hf1 #H2L #Hf12
 elim (lveq_inj_length … H2L) // -L2 #H1 #H2 destruct
 /2 width=3 by ex2_intro/
 qed-.
 
-lemma fsle_inv_frees_eq: ∀L1,L2. |L1| = |L2| →
-                         ∀T1,T2. ⦃L1,T1⦄ ⊆ ⦃L2,T2⦄ →
-                         ∀f1. L1 ⊢ 𝐅*⦃T1⦄ ≘ f1 → ∀f2. L2 ⊢ 𝐅*⦃T2⦄ ≘ f2 →
-                         f1 ⊆ f2.
+lemma fsle_inv_frees_eq:
+      ∀L1,L2. |L1| = |L2| →
+      ∀T1,T2. ⦃L1,T1⦄ ⊆ ⦃L2,T2⦄ →
+      ∀f1. L1 ⊢ 𝐅+⦃T1⦄ ≘ f1 → ∀f2. L2 ⊢ 𝐅+⦃T2⦄ ≘ f2 →
+      f1 ⊆ f2.
 #L1 #L2 #H1L #T1 #T2 #H2L #f1 #Hf1 #f2 #Hf2
 elim (fsle_frees_trans_eq … H2L … Hf2) // -L2 -T2
 /3 width=6 by frees_mono, sle_eq_repl_back1/
@@ -50,8 +52,9 @@ qed-.
 
 (* Main properties **********************************************************)
 
-theorem fsle_trans_sn: ∀L1,L2,T1,T. ⦃L1,T1⦄ ⊆ ⦃L2,T⦄ →
-                       ∀T2. ⦃L2,T⦄ ⊆ ⦃L2,T2⦄ → ⦃L1,T1⦄ ⊆ ⦃L2,T2⦄.
+theorem fsle_trans_sn:
+        ∀L1,L2,T1,T. ⦃L1,T1⦄ ⊆ ⦃L2,T⦄ →
+        ∀T2. ⦃L2,T⦄ ⊆ ⦃L2,T2⦄ → ⦃L1,T1⦄ ⊆ ⦃L2,T2⦄.
 #L1 #L2 #T1 #T
 * #m1 #m0 #g1 #g0 #Hg1 #Hg0 #Hm #Hg
 #T2
@@ -62,8 +65,9 @@ lapply (sle_eq_repl_back1 … Hf … Hfg0) -f0
 /4 width=10 by sle_tls, sle_trans, ex4_4_intro/
 qed-.
 
-theorem fsle_trans_dx: ∀L1,T1,T. ⦃L1,T1⦄ ⊆ ⦃L1,T⦄ →
-                       ∀L2,T2. ⦃L1,T⦄ ⊆ ⦃L2,T2⦄ → ⦃L1,T1⦄ ⊆ ⦃L2,T2⦄.
+theorem fsle_trans_dx:
+        ∀L1,T1,T. ⦃L1,T1⦄ ⊆ ⦃L1,T⦄ →
+        ∀L2,T2. ⦃L1,T⦄ ⊆ ⦃L2,T2⦄ → ⦃L1,T1⦄ ⊆ ⦃L2,T2⦄.
 #L1 #T1 #T
 * #m1 #m0 #g1 #g0 #Hg1 #Hg0 #Hm #Hg
 #L2 #T2
@@ -74,8 +78,9 @@ lapply (sle_eq_repl_back2 … Hg … Hgf0) -g0
 /4 width=10 by sle_tls, sle_trans, ex4_4_intro/
 qed-.
 
-theorem fsle_trans_rc: ∀L1,L,T1,T. |L1| = |L| → ⦃L1,T1⦄ ⊆ ⦃L,T⦄ →
-                       ∀L2,T2. |L| = |L2| → ⦃L,T⦄ ⊆ ⦃L2,T2⦄ → ⦃L1,T1⦄ ⊆ ⦃L2,T2⦄.
+theorem fsle_trans_rc:
+        ∀L1,L,T1,T. |L1| = |L| → ⦃L1,T1⦄ ⊆ ⦃L,T⦄ →
+        ∀L2,T2. |L| = |L2| → ⦃L,T⦄ ⊆ ⦃L2,T2⦄ → ⦃L1,T1⦄ ⊆ ⦃L2,T2⦄.
 #L1 #L #T1 #T #HL1
 * #m1 #m0 #g1 #g0 #Hg1 #Hg0 #Hm #Hg
 #L2 #T2 #HL2
@@ -87,9 +92,10 @@ lapply (sle_eq_repl_back2 … Hg … Hgf0) -g0
 /3 width=10 by lveq_length_eq, sle_trans, ex4_4_intro/
 qed-.
 
-theorem fsle_bind_sn_ge: ∀L1,L2. |L2| ≤ |L1| →
-                         ∀V1,T1,T. ⦃L1,V1⦄ ⊆ ⦃L2,T⦄ → ⦃L1.ⓧ,T1⦄ ⊆ ⦃L2,T⦄ →
-                         ∀p,I. ⦃L1,ⓑ{p,I}V1.T1⦄ ⊆ ⦃L2,T⦄.
+theorem fsle_bind_sn_ge:
+        ∀L1,L2. |L2| ≤ |L1| →
+        ∀V1,T1,T. ⦃L1,V1⦄ ⊆ ⦃L2,T⦄ → ⦃L1.ⓧ,T1⦄ ⊆ ⦃L2,T⦄ →
+        ∀p,I. ⦃L1,ⓑ{p,I}V1.T1⦄ ⊆ ⦃L2,T⦄.
 #L1 #L2 #HL #V1 #T1 #T * #n1 #x #f1 #g #Hf1 #Hg #H1n1 #H2n1 #H #p #I
 elim (fsle_frees_trans … H … Hg) -H #n2 #n #f2 #Hf2 #H1n2 #H2n2
 elim (lveq_inj_void_sn_ge … H1n1 … H1n2) -H1n2 // #H1 #H2 #H3 destruct
@@ -98,8 +104,9 @@ elim (sor_isfin_ex f1 (⫱f2)) /3 width=3 by frees_fwd_isfin, isfin_tl/ #f #Hf #
 /4 width=12 by frees_bind_void, sor_inv_sle, sor_tls, ex4_4_intro/
 qed.
 
-theorem fsle_flat_sn: ∀L1,L2,V1,T1,T. ⦃L1,V1⦄ ⊆ ⦃L2,T⦄ → ⦃L1,T1⦄ ⊆ ⦃L2,T⦄ →
-                      ∀I. ⦃L1,ⓕ{I}V1.T1⦄ ⊆ ⦃L2,T⦄.
+theorem fsle_flat_sn:
+        ∀L1,L2,V1,T1,T. ⦃L1,V1⦄ ⊆ ⦃L2,T⦄ → ⦃L1,T1⦄ ⊆ ⦃L2,T⦄ →
+        ∀I. ⦃L1,ⓕ{I}V1.T1⦄ ⊆ ⦃L2,T⦄.
 #L1 #L2 #V1 #T1 #T * #n1 #x #f1 #g #Hf1 #Hg #H1n1 #H2n1 #H #I
 elim (fsle_frees_trans … H … Hg) -H #n2 #n #f2 #Hf2 #H1n2 #H2n2
 elim (lveq_inj … H1n1 … H1n2) -H1n2 #H1 #H2 destruct
@@ -107,9 +114,10 @@ elim (sor_isfin_ex f1 f2) /2 width=3 by frees_fwd_isfin/ #f #Hf #_
 /4 width=12 by frees_flat, sor_inv_sle, sor_tls, ex4_4_intro/
 qed.
 
-theorem fsle_bind_eq: ∀L1,L2. |L1| = |L2| → ∀V1,V2. ⦃L1,V1⦄ ⊆ ⦃L2,V2⦄ →
-                      ∀I2,T1,T2. ⦃L1.ⓧ,T1⦄ ⊆ ⦃L2.ⓑ{I2}V2,T2⦄ →
-                      ∀p,I1. ⦃L1,ⓑ{p,I1}V1.T1⦄ ⊆ ⦃L2,ⓑ{p,I2}V2.T2⦄.
+theorem fsle_bind_eq:
+        ∀L1,L2. |L1| = |L2| → ∀V1,V2. ⦃L1,V1⦄ ⊆ ⦃L2,V2⦄ →
+        ∀I2,T1,T2. ⦃L1.ⓧ,T1⦄ ⊆ ⦃L2.ⓑ{I2}V2,T2⦄ →
+        ∀p,I1. ⦃L1,ⓑ{p,I1}V1.T1⦄ ⊆ ⦃L2,ⓑ{p,I2}V2.T2⦄.
 #L1 #L2 #HL #V1 #V2
 * #n1 #m1 #f1 #g1 #Hf1 #Hg1 #H1L #Hfg1 #I2 #T1 #T2
 * #n2 #m2 #f2 #g2 #Hf2 #Hg2 #H2L #Hfg2 #p #I1
@@ -120,9 +128,10 @@ elim (sor_isfin_ex g1 (⫱g2)) /3 width=3 by frees_fwd_isfin, isfin_tl/ #g #Hg #
 /4 width=15 by frees_bind_void, frees_bind, monotonic_sle_sor, sle_tl, ex4_4_intro/
 qed.
 
-theorem fsle_bind: ∀L1,L2,V1,V2. ⦃L1,V1⦄ ⊆ ⦃L2,V2⦄ →
-                   ∀I1,I2,T1,T2. ⦃L1.ⓑ{I1}V1,T1⦄ ⊆ ⦃L2.ⓑ{I2}V2,T2⦄ →
-                   ∀p. ⦃L1,ⓑ{p,I1}V1.T1⦄ ⊆ ⦃L2,ⓑ{p,I2}V2.T2⦄.
+theorem fsle_bind:
+        ∀L1,L2,V1,V2. ⦃L1,V1⦄ ⊆ ⦃L2,V2⦄ →
+        ∀I1,I2,T1,T2. ⦃L1.ⓑ{I1}V1,T1⦄ ⊆ ⦃L2.ⓑ{I2}V2,T2⦄ →
+        ∀p. ⦃L1,ⓑ{p,I1}V1.T1⦄ ⊆ ⦃L2,ⓑ{p,I2}V2.T2⦄.
 #L1 #L2 #V1 #V2
 * #n1 #m1 #f1 #g1 #Hf1 #Hg1 #H1L #Hfg1 #I1 #I2 #T1 #T2
 * #n2 #m2 #f2 #g2 #Hf2 #Hg2 #H2L #Hfg2 #p
@@ -133,7 +142,8 @@ elim (sor_isfin_ex g1 (⫱g2)) /3 width=3 by frees_fwd_isfin, isfin_tl/ #g #Hg #
 /4 width=15 by frees_bind, monotonic_sle_sor, sle_tl, ex4_4_intro/
 qed.
 
-theorem fsle_flat: ∀L1,L2,V1,V2. ⦃L1,V1⦄ ⊆ ⦃L2,V2⦄ →
-                   ∀T1,T2. ⦃L1,T1⦄ ⊆ ⦃L2,T2⦄ →
-                   ∀I1,I2. ⦃L1,ⓕ{I1}V1.T1⦄ ⊆ ⦃L2,ⓕ{I2}V2.T2⦄.
+theorem fsle_flat:
+        ∀L1,L2,V1,V2. ⦃L1,V1⦄ ⊆ ⦃L2,V2⦄ →
+        ∀T1,T2. ⦃L1,T1⦄ ⊆ ⦃L2,T2⦄ →
+        ∀I1,I2. ⦃L1,ⓕ{I1}V1.T1⦄ ⊆ ⦃L2,ⓕ{I2}V2.T2⦄.
 /3 width=1 by fsle_flat_sn, fsle_flat_dx_dx, fsle_flat_dx_sn/ qed-.
index 7056a8ec6fca39b8613a2db0ed5d4722214647db..e2ac985dc19f77c1e57615eb95eb1e71acbfe4c0 100644 (file)
@@ -24,9 +24,9 @@ inductive lsubf: relation4 lenv rtmap lenv rtmap ≝
               lsubf (L1.ⓘ{I1}) (⫯f1) (L2.ⓘ{I2}) (⫯f2)
 | lsubf_bind: ∀f1,f2,I,L1,L2. lsubf L1 f1 L2 f2 →
               lsubf (L1.ⓘ{I}) (↑f1) (L2.ⓘ{I}) (↑f2)
-| lsubf_beta: ∀f,f0,f1,f2,L1,L2,W,V. L1 ⊢ 𝐅*⦃V⦄ ≘ f → f0 ⋓ f ≘ f1 →
+| lsubf_beta: ∀f,f0,f1,f2,L1,L2,W,V. L1 ⊢ 𝐅+⦃V⦄ ≘ f → f0 ⋓ f ≘ f1 →
               lsubf L1 f0 L2 f2 → lsubf (L1.ⓓⓝW.V) (↑f1) (L2.ⓛW) (↑f2)
-| lsubf_unit: ∀f,f0,f1,f2,I1,I2,L1,L2,V. L1 ⊢ 𝐅*⦃V⦄ ≘ f → f0 ⋓ f ≘ f1 →
+| lsubf_unit: ∀f,f0,f1,f2,I1,I2,L1,L2,V. L1 ⊢ 𝐅+⦃V⦄ ≘ f → f0 ⋓ f ≘ f1 →
               lsubf L1 f0 L2 f2 → lsubf (L1.ⓑ{I1}V) (↑f1) (L2.ⓤ{I2}) (↑f2)
 .
 
@@ -36,8 +36,9 @@ interpretation
 
 (* Basic inversion lemmas ***************************************************)
 
-fact lsubf_inv_atom1_aux: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ → L1 = ⋆ →
-                          f1 ≡ f2 ∧ L2 = ⋆.
+fact lsubf_inv_atom1_aux:
+     ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → L1 = ⋆ →
+     ∧∧ f1 ≡ f2 & L2 = ⋆.
 #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2
 [ /2 width=1 by conj/
 | #f1 #f2 #I1 #I2 #L1 #L2 #_ #H destruct
@@ -47,12 +48,13 @@ fact lsubf_inv_atom1_aux: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ → L
 ]
 qed-.
 
-lemma lsubf_inv_atom1: ∀f1,f2,L2. ⦃⋆,f1⦄ ⫃𝐅* ⦃L2,f2⦄ → f1 ≡ f2 ∧ L2 = ⋆.
+lemma lsubf_inv_atom1: ∀f1,f2,L2. ⦃⋆,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → ∧∧ f1 ≡ f2 & L2 = ⋆.
 /2 width=3 by lsubf_inv_atom1_aux/ qed-.
 
-fact lsubf_inv_push1_aux: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ →
-                          ∀g1,I1,K1. f1 = ⫯g1 → L1 = K1.ⓘ{I1} →
-                          ∃∃g2,I2,K2. ⦃K1,g1⦄ ⫃𝐅* ⦃K2,g2⦄ & f2 = ⫯g2 & L2 = K2.ⓘ{I2}.
+fact lsubf_inv_push1_aux:
+     ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ →
+     ∀g1,I1,K1. f1 = ⫯g1 → L1 = K1.ⓘ{I1} →
+     ∃∃g2,I2,K2. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f2 = ⫯g2 & L2 = K2.ⓘ{I2}.
 #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2
 [ #f1 #f2 #_ #g1 #J1 #K1 #_ #H destruct
 | #f1 #f2 #I1 #I2 #L1 #L2 #H12 #g1 #J1 #K1 #H1 #H2 destruct
@@ -63,19 +65,20 @@ fact lsubf_inv_push1_aux: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ →
 ]
 qed-.
 
-lemma lsubf_inv_push1: ∀g1,f2,I1,K1,L2. ⦃K1.ⓘ{I1},⫯g1⦄ ⫃𝐅* ⦃L2,f2⦄ →
-                       ∃∃g2,I2,K2. ⦃K1,g1⦄ ⫃𝐅* ⦃K2,g2⦄ & f2 = ⫯g2 & L2 = K2.ⓘ{I2}.
+lemma lsubf_inv_push1:
+      ∀g1,f2,I1,K1,L2. ⦃K1.ⓘ{I1},⫯g1⦄ ⫃𝐅+ ⦃L2,f2⦄ →
+      ∃∃g2,I2,K2. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f2 = ⫯g2 & L2 = K2.ⓘ{I2}.
 /2 width=6 by lsubf_inv_push1_aux/ qed-.
 
-fact lsubf_inv_pair1_aux: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ →
-                          ∀g1,I,K1,X. f1 = ↑g1 → L1 = K1.ⓑ{I}X →
-                          ∨∨ ∃∃g2,K2. ⦃K1,g1⦄ ⫃𝐅* ⦃K2,g2⦄ & f2 = ↑g2 & L2 = K2.ⓑ{I}X
-                           | ∃∃g,g0,g2,K2,W,V. ⦃K1,g0⦄ ⫃𝐅* ⦃K2,g2⦄ & 
-                                               K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 &
-                                               I = Abbr & X = ⓝW.V & L2 = K2.ⓛW
-                           | ∃∃g,g0,g2,J,K2. ⦃K1,g0⦄ ⫃𝐅* ⦃K2,g2⦄ & 
-                                             K1 ⊢ 𝐅*⦃X⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 &
-                                             L2 = K2.ⓤ{J}.
+fact lsubf_inv_pair1_aux:
+     ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ →
+     ∀g1,I,K1,X. f1 = ↑g1 → L1 = K1.ⓑ{I}X →
+     ∨∨ ∃∃g2,K2. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f2 = ↑g2 & L2 = K2.ⓑ{I}X
+      | ∃∃g,g0,g2,K2,W,V. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ & 
+          K1 ⊢ 𝐅+⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 &
+          I = Abbr & X = ⓝW.V & L2 = K2.ⓛW
+      | ∃∃g,g0,g2,J,K2. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ & 
+          K1 ⊢ 𝐅+⦃X⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 & L2 = K2.ⓤ{J}.
 #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2
 [ #f1 #f2 #_ #g1 #J #K1 #X #_ #H destruct
 | #f1 #f2 #I1 #I2 #L1 #L2 #H12 #g1 #J #K1 #X #H elim (discr_push_next … H)
@@ -88,19 +91,20 @@ fact lsubf_inv_pair1_aux: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ →
 ]
 qed-.
 
-lemma lsubf_inv_pair1: ∀g1,f2,I,K1,L2,X. ⦃K1.ⓑ{I}X,↑g1⦄ ⫃𝐅* ⦃L2,f2⦄ →
-                       ∨∨ ∃∃g2,K2. ⦃K1,g1⦄ ⫃𝐅* ⦃K2,g2⦄ & f2 = ↑g2 & L2 = K2.ⓑ{I}X
-                        | ∃∃g,g0,g2,K2,W,V. ⦃K1,g0⦄ ⫃𝐅* ⦃K2,g2⦄ & 
-                                            K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 &
-                                            I = Abbr & X = ⓝW.V & L2 = K2.ⓛW
-                        | ∃∃g,g0,g2,J,K2. ⦃K1,g0⦄ ⫃𝐅* ⦃K2,g2⦄ & 
-                                          K1 ⊢ 𝐅*⦃X⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 &
-                                          L2 = K2.ⓤ{J}.
+lemma lsubf_inv_pair1:
+      ∀g1,f2,I,K1,L2,X. ⦃K1.ⓑ{I}X,↑g1⦄ ⫃𝐅+ ⦃L2,f2⦄ →
+      ∨∨ ∃∃g2,K2. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f2 = ↑g2 & L2 = K2.ⓑ{I}X
+       | ∃∃g,g0,g2,K2,W,V. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ & 
+           K1 ⊢ 𝐅+⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 &
+           I = Abbr & X = ⓝW.V & L2 = K2.ⓛW
+       | ∃∃g,g0,g2,J,K2. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ & 
+           K1 ⊢ 𝐅+⦃X⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 & L2 = K2.ⓤ{J}.
 /2 width=5 by lsubf_inv_pair1_aux/ qed-.
 
-fact lsubf_inv_unit1_aux: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ →
-                          ∀g1,I,K1. f1 = ↑g1 → L1 = K1.ⓤ{I} →
-                          ∃∃g2,K2. ⦃K1,g1⦄ ⫃𝐅* ⦃K2,g2⦄ & f2 = ↑g2 & L2 = K2.ⓤ{I}.
+fact lsubf_inv_unit1_aux:
+     ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ →
+     ∀g1,I,K1. f1 = ↑g1 → L1 = K1.ⓤ{I} →
+     ∃∃g2,K2. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f2 = ↑g2 & L2 = K2.ⓤ{I}.
 #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2
 [ #f1 #f2 #_ #g1 #J #K1 #_ #H destruct
 | #f1 #f2 #I1 #I2 #L1 #L2 #H12 #g1 #J #K1 #H elim (discr_push_next … H)
@@ -111,12 +115,14 @@ fact lsubf_inv_unit1_aux: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ →
 ]
 qed-.
 
-lemma lsubf_inv_unit1: ∀g1,f2,I,K1,L2. ⦃K1.ⓤ{I},↑g1⦄ ⫃𝐅* ⦃L2,f2⦄ →
-                       ∃∃g2,K2. ⦃K1,g1⦄ ⫃𝐅* ⦃K2,g2⦄ & f2 = ↑g2 & L2 = K2.ⓤ{I}.
+lemma lsubf_inv_unit1:
+      ∀g1,f2,I,K1,L2. ⦃K1.ⓤ{I},↑g1⦄ ⫃𝐅+ ⦃L2,f2⦄ →
+      ∃∃g2,K2. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f2 = ↑g2 & L2 = K2.ⓤ{I}.
 /2 width=5 by lsubf_inv_unit1_aux/ qed-.
 
-fact lsubf_inv_atom2_aux: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ → L2 = ⋆ →
-                          f1 ≡ f2 ∧ L1 = ⋆.
+fact lsubf_inv_atom2_aux:
+     ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → L2 = ⋆ →
+     ∧∧ f1 ≡ f2 & L1 = ⋆.
 #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2
 [ /2 width=1 by conj/
 | #f1 #f2 #I1 #I2 #L1 #L2 #_ #H destruct
@@ -126,12 +132,13 @@ fact lsubf_inv_atom2_aux: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ → L
 ]
 qed-.
 
-lemma lsubf_inv_atom2: ∀f1,f2,L1. ⦃L1,f1⦄ ⫃𝐅* ⦃⋆,f2⦄ → f1 ≡ f2 ∧ L1 = ⋆.
+lemma lsubf_inv_atom2: ∀f1,f2,L1. ⦃L1,f1⦄ ⫃𝐅+ ⦃⋆,f2⦄ → ∧∧f1 ≡ f2 & L1 = ⋆.
 /2 width=3 by lsubf_inv_atom2_aux/ qed-.
 
-fact lsubf_inv_push2_aux: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ →
-                          ∀g2,I2,K2. f2 = ⫯g2 → L2 = K2.ⓘ{I2} →
-                          ∃∃g1,I1,K1. ⦃K1,g1⦄ ⫃𝐅* ⦃K2,g2⦄ & f1 = ⫯g1 & L1 = K1.ⓘ{I1}.
+fact lsubf_inv_push2_aux:
+     ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ →
+     ∀g2,I2,K2. f2 = ⫯g2 → L2 = K2.ⓘ{I2} →
+     ∃∃g1,I1,K1. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f1 = ⫯g1 & L1 = K1.ⓘ{I1}.
 #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2
 [ #f1 #f2 #_ #g2 #J2 #K2 #_ #H destruct
 | #f1 #f2 #I1 #I2 #L1 #L2 #H12 #g2 #J2 #K2 #H1 #H2 destruct
@@ -142,16 +149,18 @@ fact lsubf_inv_push2_aux: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ →
 ]
 qed-.
 
-lemma lsubf_inv_push2: ∀f1,g2,I2,L1,K2. ⦃L1,f1⦄ ⫃𝐅* ⦃K2.ⓘ{I2},⫯g2⦄ →
-                       ∃∃g1,I1,K1. ⦃K1,g1⦄ ⫃𝐅* ⦃K2,g2⦄ & f1 = ⫯g1 & L1 = K1.ⓘ{I1}.
+lemma lsubf_inv_push2:
+      ∀f1,g2,I2,L1,K2. ⦃L1,f1⦄ ⫃𝐅+ ⦃K2.ⓘ{I2},⫯g2⦄ →
+      ∃∃g1,I1,K1. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f1 = ⫯g1 & L1 = K1.ⓘ{I1}.
 /2 width=6 by lsubf_inv_push2_aux/ qed-.
 
-fact lsubf_inv_pair2_aux: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ →
-                          ∀g2,I,K2,W. f2 = ↑g2 → L2 = K2.ⓑ{I}W →
-                          ∨∨ ∃∃g1,K1. ⦃K1,g1⦄ ⫃𝐅* ⦃K2,g2⦄ & f1 = ↑g1 & L1 = K1.ⓑ{I}W
-                           | ∃∃g,g0,g1,K1,V. ⦃K1,g0⦄ ⫃𝐅* ⦃K2,g2⦄ &
-                                             K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 &
-                                             I = Abst & L1 = K1.ⓓⓝW.V.
+fact lsubf_inv_pair2_aux:
+     ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ →
+     ∀g2,I,K2,W. f2 = ↑g2 → L2 = K2.ⓑ{I}W →
+     ∨∨ ∃∃g1,K1. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f1 = ↑g1 & L1 = K1.ⓑ{I}W
+      | ∃∃g,g0,g1,K1,V. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ &
+          K1 ⊢ 𝐅+⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 &
+          I = Abst & L1 = K1.ⓓⓝW.V.
 #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2
 [ #f1 #f2 #_ #g2 #J #K2 #X #_ #H destruct
 | #f1 #f2 #I1 #I2 #L1 #L2 #H12 #g2 #J #K2 #X #H elim (discr_push_next … H)
@@ -163,19 +172,20 @@ fact lsubf_inv_pair2_aux: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ →
 ]
 qed-.
 
-lemma lsubf_inv_pair2: ∀f1,g2,I,L1,K2,W. ⦃L1,f1⦄ ⫃𝐅* ⦃K2.ⓑ{I}W,↑g2⦄ →
-                       ∨∨ ∃∃g1,K1. ⦃K1,g1⦄ ⫃𝐅* ⦃K2,g2⦄ & f1 = ↑g1 & L1 = K1.ⓑ{I}W
-                        | ∃∃g,g0,g1,K1,V. ⦃K1,g0⦄ ⫃𝐅* ⦃K2,g2⦄ &
-                                          K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 &
-                                          I = Abst & L1 = K1.ⓓⓝW.V.
+lemma lsubf_inv_pair2:
+      ∀f1,g2,I,L1,K2,W. ⦃L1,f1⦄ ⫃𝐅+ ⦃K2.ⓑ{I}W,↑g2⦄ →
+      ∨∨ ∃∃g1,K1. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f1 = ↑g1 & L1 = K1.ⓑ{I}W
+       | ∃∃g,g0,g1,K1,V. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ &
+           K1 ⊢ 𝐅+⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 &
+           I = Abst & L1 = K1.ⓓⓝW.V.
 /2 width=5 by lsubf_inv_pair2_aux/ qed-.
 
-fact lsubf_inv_unit2_aux: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ →
-                          ∀g2,I,K2. f2 = ↑g2 → L2 = K2.ⓤ{I} →
-                          ∨∨ ∃∃g1,K1. ⦃K1,g1⦄ ⫃𝐅* ⦃K2,g2⦄ & f1 = ↑g1 & L1 = K1.ⓤ{I}
-                           | ∃∃g,g0,g1,J,K1,V. ⦃K1,g0⦄ ⫃𝐅* ⦃K2,g2⦄ & 
-                                               K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 &
-                                               L1 = K1.ⓑ{J}V.
+fact lsubf_inv_unit2_aux:
+     ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ →
+     ∀g2,I,K2. f2 = ↑g2 → L2 = K2.ⓤ{I} →
+     ∨∨ ∃∃g1,K1. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f1 = ↑g1 & L1 = K1.ⓤ{I}
+      | ∃∃g,g0,g1,J,K1,V. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ & 
+          K1 ⊢ 𝐅+⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 & L1 = K1.ⓑ{J}V.
 #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2
 [ #f1 #f2 #_ #g2 #J #K2 #_ #H destruct
 | #f1 #f2 #I1 #I2 #L1 #L2 #H12 #g2 #J #K2 #H elim (discr_push_next … H)
@@ -187,27 +197,29 @@ fact lsubf_inv_unit2_aux: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ →
 ]
 qed-.
 
-lemma lsubf_inv_unit2: ∀f1,g2,I,L1,K2. ⦃L1,f1⦄ ⫃𝐅* ⦃K2.ⓤ{I},↑g2⦄ →
-                       ∨∨ ∃∃g1,K1. ⦃K1,g1⦄ ⫃𝐅* ⦃K2,g2⦄ & f1 = ↑g1 & L1 = K1.ⓤ{I}
-                        | ∃∃g,g0,g1,J,K1,V. ⦃K1,g0⦄ ⫃𝐅* ⦃K2,g2⦄ & 
-                                            K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 &
-                                            L1 = K1.ⓑ{J}V.
+lemma lsubf_inv_unit2:
+      ∀f1,g2,I,L1,K2. ⦃L1,f1⦄ ⫃𝐅+ ⦃K2.ⓤ{I},↑g2⦄ →
+      ∨∨ ∃∃g1,K1. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f1 = ↑g1 & L1 = K1.ⓤ{I}
+       | ∃∃g,g0,g1,J,K1,V. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ & 
+           K1 ⊢ 𝐅+⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 & L1 = K1.ⓑ{J}V.
 /2 width=5 by lsubf_inv_unit2_aux/ qed-.
 
 (* Advanced inversion lemmas ************************************************)
 
-lemma lsubf_inv_atom: ∀f1,f2. ⦃⋆,f1⦄ ⫃𝐅* ⦃⋆,f2⦄ → f1 ≡ f2.
+lemma lsubf_inv_atom: ∀f1,f2. ⦃⋆,f1⦄ ⫃𝐅+ ⦃⋆,f2⦄ → f1 ≡ f2.
 #f1 #f2 #H elim (lsubf_inv_atom1 … H) -H //
 qed-.
 
-lemma lsubf_inv_push_sn: ∀g1,f2,I1,I2,K1,K2. ⦃K1.ⓘ{I1},⫯g1⦄ ⫃𝐅* ⦃K2.ⓘ{I2},f2⦄ →
-                         ∃∃g2. ⦃K1,g1⦄ ⫃𝐅* ⦃K2,g2⦄ & f2 = ⫯g2.
+lemma lsubf_inv_push_sn:
+      ∀g1,f2,I1,I2,K1,K2. ⦃K1.ⓘ{I1},⫯g1⦄ ⫃𝐅+ ⦃K2.ⓘ{I2},f2⦄ →
+      ∃∃g2. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f2 = ⫯g2.
 #g1 #f2 #I #K1 #K2 #X #H elim (lsubf_inv_push1 … H) -H
 #g2 #I #Y #H0 #H2 #H destruct /2 width=3 by ex2_intro/
 qed-.
 
-lemma lsubf_inv_bind_sn: ∀g1,f2,I,K1,K2. ⦃K1.ⓘ{I},↑g1⦄ ⫃𝐅* ⦃K2.ⓘ{I},f2⦄ →
-                         ∃∃g2. ⦃K1,g1⦄ ⫃𝐅* ⦃K2,g2⦄ & f2 = ↑g2.
+lemma lsubf_inv_bind_sn:
+      ∀g1,f2,I,K1,K2. ⦃K1.ⓘ{I},↑g1⦄ ⫃𝐅+ ⦃K2.ⓘ{I},f2⦄ →
+      ∃∃g2. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f2 = ↑g2.
 #g1 #f2 * #I [2: #X ] #K1 #K2 #H
 [ elim (lsubf_inv_pair1 … H) -H *
   [ #z2 #Y2 #H2 #H #H0 destruct /2 width=3 by ex2_intro/
@@ -219,8 +231,9 @@ lemma lsubf_inv_bind_sn: ∀g1,f2,I,K1,K2. ⦃K1.ⓘ{I},↑g1⦄ ⫃𝐅* ⦃K2.
 ]
 qed-.
 
-lemma lsubf_inv_beta_sn: ∀g1,f2,K1,K2,V,W. ⦃K1.ⓓⓝW.V,↑g1⦄ ⫃𝐅* ⦃K2.ⓛW,f2⦄ →
-                         ∃∃g,g0,g2. ⦃K1,g0⦄ ⫃𝐅* ⦃K2,g2⦄ & K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2.
+lemma lsubf_inv_beta_sn:
+      ∀g1,f2,K1,K2,V,W. ⦃K1.ⓓⓝW.V,↑g1⦄ ⫃𝐅+ ⦃K2.ⓛW,f2⦄ →
+      ∃∃g,g0,g2. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ & K1 ⊢ 𝐅+⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2.
 #g1 #f2 #K1 #K2 #V #W #H elim (lsubf_inv_pair1 … H) -H *
 [ #z2 #Y2 #_ #_ #H destruct
 | #z #z0 #z2 #Y2 #X0 #X #H02 #Hz #Hg1 #H #_ #H0 #H1 destruct
@@ -229,8 +242,9 @@ lemma lsubf_inv_beta_sn: ∀g1,f2,K1,K2,V,W. ⦃K1.ⓓⓝW.V,↑g1⦄ ⫃𝐅* 
 ]
 qed-.
 
-lemma lsubf_inv_unit_sn: ∀g1,f2,I,J,K1,K2,V. ⦃K1.ⓑ{I}V,↑g1⦄ ⫃𝐅* ⦃K2.ⓤ{J},f2⦄ →
-                         ∃∃g,g0,g2. ⦃K1,g0⦄ ⫃𝐅* ⦃K2,g2⦄ & K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2.
+lemma lsubf_inv_unit_sn:
+      ∀g1,f2,I,J,K1,K2,V. ⦃K1.ⓑ{I}V,↑g1⦄ ⫃𝐅+ ⦃K2.ⓤ{J},f2⦄ →
+      ∃∃g,g0,g2. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ & K1 ⊢ 𝐅+⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2.
 #g1 #f2 #I #J #K1 #K2 #V #H elim (lsubf_inv_pair1 … H) -H *
 [ #z2 #Y2 #_ #_ #H destruct
 | #z #z0 #z2 #Y2 #X0 #X #_ #_ #_ #_ #_ #_ #H destruct
@@ -239,7 +253,7 @@ lemma lsubf_inv_unit_sn: ∀g1,f2,I,J,K1,K2,V. ⦃K1.ⓑ{I}V,↑g1⦄ ⫃𝐅* 
 ]
 qed-.
 
-lemma lsubf_inv_refl: ∀L,f1,f2. ⦃L,f1⦄ ⫃𝐅* ⦃L,f2⦄ → f1 ≡ f2.
+lemma lsubf_inv_refl: ∀L,f1,f2. ⦃L,f1⦄ ⫃𝐅+ ⦃L,f2⦄ → f1 ≡ f2.
 #L elim L -L /2 width=1 by lsubf_inv_atom/
 #L #I #IH #f1 #f2 #H12
 elim (pn_split f1) * #g1 #H destruct
@@ -249,15 +263,15 @@ qed-.
 
 (* Basic forward lemmas *****************************************************)
 
-lemma lsubf_fwd_bind_tl: ∀f1,f2,I,L1,L2.
-                         ⦃L1.ⓘ{I},f1⦄ ⫃𝐅* ⦃L2.ⓘ{I},f2⦄ → ⦃L1,⫱f1⦄ ⫃𝐅* ⦃L2,⫱f2⦄.
+lemma lsubf_fwd_bind_tl:
+      ∀f1,f2,I,L1,L2. ⦃L1.ⓘ{I},f1⦄ ⫃𝐅+ ⦃L2.ⓘ{I},f2⦄ → ⦃L1,⫱f1⦄ ⫃𝐅+ ⦃L2,⫱f2⦄.
 #f1 #f2 #I #L1 #L2 #H
 elim (pn_split f1) * #g1 #H0 destruct
 [ elim (lsubf_inv_push_sn … H) | elim (lsubf_inv_bind_sn … H) ] -H
 #g2 #H12 #H destruct //
 qed-.
 
-lemma lsubf_fwd_isid_dx: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ → 𝐈⦃f2⦄ → 𝐈⦃f1⦄.
+lemma lsubf_fwd_isid_dx: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → 𝐈⦃f2⦄ → 𝐈⦃f1⦄.
 #f1 #f2 #L1 #L2 #H elim H -f1 -f2 -L1 -L2
 [ /2 width=3 by isid_eq_repl_fwd/
 | /4 width=3 by isid_inv_push, isid_push/
@@ -267,7 +281,7 @@ lemma lsubf_fwd_isid_dx: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ → 
 ]
 qed-.
 
-lemma lsubf_fwd_isid_sn: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ → 𝐈⦃f1⦄ → 𝐈⦃f2⦄.
+lemma lsubf_fwd_isid_sn: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → 𝐈⦃f1⦄ → 𝐈⦃f2⦄.
 #f1 #f2 #L1 #L2 #H elim H -f1 -f2 -L1 -L2
 [ /2 width=3 by isid_eq_repl_back/
 | /4 width=3 by isid_inv_push, isid_push/
@@ -277,22 +291,22 @@ lemma lsubf_fwd_isid_sn: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ → 
 ]
 qed-.
 
-lemma lsubf_fwd_sle: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ → f2 ⊆ f1.
+lemma lsubf_fwd_sle: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → f2 ⊆ f1.
 #f1 #f2 #L1 #L2 #H elim H -f1 -f2 -L1 -L2
 /3 width=5 by sor_inv_sle_sn_trans, sle_next, sle_push, sle_refl_eq, eq_sym/
 qed-.
 
 (* Basic properties *********************************************************)
 
-axiom lsubf_eq_repl_back1: ∀f2,L1,L2. eq_repl_back … (λf1. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄).
+axiom lsubf_eq_repl_back1: ∀f2,L1,L2. eq_repl_back … (λf1. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄).
 
-lemma lsubf_eq_repl_fwd1: ∀f2,L1,L2. eq_repl_fwd … (λf1. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄).
+lemma lsubf_eq_repl_fwd1: ∀f2,L1,L2. eq_repl_fwd … (λf1. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄).
 #f2 #L1 #L2 @eq_repl_sym /2 width=3 by lsubf_eq_repl_back1/
 qed-.
 
-axiom lsubf_eq_repl_back2: ∀f1,L1,L2. eq_repl_back … (λf2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄).
+axiom lsubf_eq_repl_back2: ∀f1,L1,L2. eq_repl_back … (λf2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄).
 
-lemma lsubf_eq_repl_fwd2: ∀f1,L1,L2. eq_repl_fwd … (λf2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄).
+lemma lsubf_eq_repl_fwd2: ∀f1,L1,L2. eq_repl_fwd … (λf2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄).
 #f1 #L1 #L2 @eq_repl_sym /2 width=3 by lsubf_eq_repl_back2/
 qed-.
 
@@ -302,19 +316,21 @@ lemma lsubf_refl: bi_reflexive … lsubf.
 /2 width=1 by lsubf_push, lsubf_bind/
 qed.
 
-lemma lsubf_refl_eq: ∀f1,f2,L. f1 ≡ f2 → ⦃L,f1⦄ ⫃𝐅* ⦃L,f2⦄.
+lemma lsubf_refl_eq: ∀f1,f2,L. f1 ≡ f2 → ⦃L,f1⦄ ⫃𝐅+ ⦃L,f2⦄.
 /2 width=3 by lsubf_eq_repl_back2/ qed.
 
-lemma lsubf_bind_tl_dx: ∀g1,f2,I,L1,L2. ⦃L1,g1⦄ ⫃𝐅* ⦃L2,⫱f2⦄ →
-                        ∃∃f1. ⦃L1.ⓘ{I},f1⦄ ⫃𝐅* ⦃L2.ⓘ{I},f2⦄ & g1 = ⫱f1.
+lemma lsubf_bind_tl_dx:
+      ∀g1,f2,I,L1,L2. ⦃L1,g1⦄ ⫃𝐅+ ⦃L2,⫱f2⦄ →
+      ∃∃f1. ⦃L1.ⓘ{I},f1⦄ ⫃𝐅+ ⦃L2.ⓘ{I},f2⦄ & g1 = ⫱f1.
 #g1 #f2 #I #L1 #L2 #H
 elim (pn_split f2) * #g2 #H2 destruct
 @ex2_intro [1,2,4,5: /2 width=2 by lsubf_push, lsubf_bind/ ] // (**) (* constructor needed *)
 qed-.
 
-lemma lsubf_beta_tl_dx: ∀f,f0,g1,L1,V. L1 ⊢ 𝐅*⦃V⦄ ≘ f → f0 ⋓ f ≘ g1 →
-                        ∀f2,L2,W. ⦃L1,f0⦄ ⫃𝐅* ⦃L2,⫱f2⦄ →
-                        ∃∃f1. ⦃L1.ⓓⓝW.V,f1⦄ ⫃𝐅* ⦃L2.ⓛW,f2⦄ & ⫱f1 ⊆ g1.
+lemma lsubf_beta_tl_dx:
+      ∀f,f0,g1,L1,V. L1 ⊢ 𝐅+⦃V⦄ ≘ f → f0 ⋓ f ≘ g1 →
+      ∀f2,L2,W. ⦃L1,f0⦄ ⫃𝐅+ ⦃L2,⫱f2⦄ →
+      ∃∃f1. ⦃L1.ⓓⓝW.V,f1⦄ ⫃𝐅+ ⦃L2.ⓛW,f2⦄ & ⫱f1 ⊆ g1.
 #f #f0 #g1 #L1 #V #Hf #Hg1 #f2
 elim (pn_split f2) * #x2 #H2 #L2 #W #HL12 destruct
 [ /3 width=4 by lsubf_push, sor_inv_sle_sn, ex2_intro/
@@ -323,9 +339,10 @@ elim (pn_split f2) * #x2 #H2 #L2 #W #HL12 destruct
 qed-.
 
 (* Note: this might be moved *)
-lemma lsubf_inv_sor_dx: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ →
-                        ∀f2l,f2r. f2l⋓f2r ≘ f2 →
-                        ∃∃f1l,f1r. ⦃L1,f1l⦄ ⫃𝐅* ⦃L2,f2l⦄ & ⦃L1,f1r⦄ ⫃𝐅* ⦃L2,f2r⦄ & f1l⋓f1r ≘ f1.
+lemma lsubf_inv_sor_dx:
+      ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ →
+      ∀f2l,f2r. f2l⋓f2r ≘ f2 →
+      ∃∃f1l,f1r. ⦃L1,f1l⦄ ⫃𝐅+ ⦃L2,f2l⦄ & ⦃L1,f1r⦄ ⫃𝐅+ ⦃L2,f2r⦄ & f1l⋓f1r ≘ f1.
 #f1 #f2 #L1 #L2 #H elim H -f1 -f2 -L1 -L2
 [ /3 width=7 by sor_eq_repl_fwd3, ex3_2_intro/
 | #g1 #g2 #I1 #I2 #L1 #L2 #_ #IH #f2l #f2r #H
index 713f79c7df827a3cc9e7a35ccc2b67246ced54b6..963893a24aef7195bd4b776d563423921d3578b7 100644 (file)
@@ -18,8 +18,9 @@ include "static_2/static/lsubf.ma".
 
 (* Properties with context-sensitive free variables *************************)
 
-lemma lsubf_frees_trans: ∀f2,L2,T. L2 ⊢ 𝐅*⦃T⦄ ≘ f2 →
-                         ∀f1,L1. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ → L1 ⊢ 𝐅*⦃T⦄ ≘ f1.
+lemma lsubf_frees_trans:
+      ∀f2,L2,T. L2 ⊢ 𝐅+⦃T⦄ ≘ f2 →
+      ∀f1,L1. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → L1 ⊢ 𝐅+⦃T⦄ ≘ f1.
 #f2 #L2 #T #H elim H -f2 -L2 -T
 [ /3 width=5 by lsubf_fwd_isid_dx, frees_sort/
 | #f2 #i #Hf2 #g1 #Y1 #H
index bed259cf545a803167ff72e5bdf33e8d255c873d..63173fbf7f0feaa436d7991a30de304928b1e61c 100644 (file)
@@ -19,9 +19,10 @@ include "static_2/static/lsubf.ma".
 
 (* Main properties **********************************************************)
 
-theorem lsubf_sor: ∀K,L,g1,f1. ⦃K,g1⦄ ⫃𝐅* ⦃L,f1⦄ →
-                   ∀g2,f2. ⦃K,g2⦄ ⫃𝐅* ⦃L,f2⦄ →
-                   ∀g. g1 ⋓ g2 ≘ g → ∀f. f1 ⋓ f2 ≘ f → ⦃K,g⦄ ⫃𝐅* ⦃L,f⦄.
+theorem lsubf_sor:
+        ∀K,L,g1,f1. ⦃K,g1⦄ ⫃𝐅+ ⦃L,f1⦄ →
+        ∀g2,f2. ⦃K,g2⦄ ⫃𝐅+ ⦃L,f2⦄ →
+        ∀g. g1 ⋓ g2 ≘ g → ∀f. f1 ⋓ f2 ≘ f → ⦃K,g⦄ ⫃𝐅+ ⦃L,f⦄.
 #K elim K -K
 [ #L #g1 #f1 #H1 #g2 #f2 #H2 #g #Hg #f #Hf
   elim (lsubf_inv_atom1 … H1) -H1 #H1 #H destruct
index 0b0124fee7fed6a399a115abb3ac01bcf1321151..88d2ad9ba4f2ce542d15ce0d2a4f1acae487c134 100644 (file)
@@ -19,8 +19,8 @@ include "static_2/static/lsubf_lsubf.ma".
 
 (* Forward lemmas with restricted refinement for local environments *********)
 
-lemma lsubf_fwd_lsubr_isdiv: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄ →
-                             𝛀⦃f1⦄ → 𝛀⦃f2⦄ → L1 ⫃ L2.
+lemma lsubf_fwd_lsubr_isdiv: 
+      ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → 𝛀⦃f1⦄ → 𝛀⦃f2⦄ → L1 ⫃ L2.
 #f1 #f2 #L1 #L2 #H elim H -f1 -f2 -L1 -L2
 /4 width=3 by lsubr_bind, isdiv_inv_next/
 [ #f1 #f2 #I1 #I2 #L1 #L2 #_ #_ #H
@@ -32,8 +32,8 @@ qed-.
 
 (* Properties with restricted refinement for local environments *************)
 
-lemma lsubr_lsubf_isid: ∀L1,L2. L1 ⫃ L2 →
-                        ∀f1,f2. 𝐈⦃f1⦄ → 𝐈⦃f2⦄ → ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄.
+lemma lsubr_lsubf_isid:
+      ∀L1,L2. L1 ⫃ L2 → ∀f1,f2. 𝐈⦃f1⦄ → 𝐈⦃f2⦄ → ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄.
 #L1 #L2 #H elim H -L1 -L2
 [ /3 width=1 by lsubf_atom, isid_inv_eq_repl/
 | #I #L1 #L2 | #L1 #L2 #V #W | #I1 #I2 #L1 #L2 #V
@@ -44,8 +44,9 @@ elim (isid_inv_gen … Hf2) -Hf2 #g2 #Hg2 #H destruct
 /3 width=1 by lsubf_push/
 qed.
 
-lemma lsubr_lsubf: ∀f2,L2,T. L2 ⊢ 𝐅*⦃T⦄ ≘ f2 → ∀L1. L1 ⫃ L2 →
-                   ∀f1. L1 ⊢ 𝐅*⦃T⦄ ≘ f1 → ⦃L1,f1⦄ ⫃𝐅* ⦃L2,f2⦄.
+lemma lsubr_lsubf:
+      ∀f2,L2,T. L2 ⊢ 𝐅+⦃T⦄ ≘ f2 → ∀L1. L1 ⫃ L2 →
+      ∀f1. L1 ⊢ 𝐅+⦃T⦄ ≘ f1 → ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄.
 #f2 #L2 #T #H elim H -f2 -L2 -T
 [ #f2 #L2 #s #Hf2 #L1 #HL12 #f1 #Hf1
   lapply (frees_inv_sort … Hf1) -Hf1 /2 width=1 by lsubr_lsubf_isid/
index 8388e6875da0c987fbe132906d6ae9bba7258c25..2e155d1ee3680677e3591429dba64fe49610c166 100644 (file)
@@ -31,8 +31,8 @@ interpretation
 
 (* Basic properties ***********************************************************)
 
-lemma frees_tdeq_conf_rdeq: ∀f,L1,T1. L1 ⊢ 𝐅*⦃T1⦄ ≘ f → ∀T2. T1 ≛ T2 →
-                            ∀L2. L1 ≛[f] L2 → L2 ⊢ 𝐅*⦃T2⦄ ≘ f.
+lemma frees_tdeq_conf_rdeq: ∀f,L1,T1. L1 ⊢ 𝐅+⦃T1⦄ ≘ f → ∀T2. T1 ≛ T2 →
+                            ∀L2. L1 ≛[f] L2 → L2 ⊢ 𝐅+⦃T2⦄ ≘ f.
 #f #L1 #T1 #H elim H -f -L1 -T1
 [ #f #L1 #s1 #Hf #X #H1 #L2 #_
   elim (tdeq_inv_sort1 … H1) -H1 #s2 #H destruct
@@ -65,12 +65,12 @@ lemma frees_tdeq_conf_rdeq: ∀f,L1,T1. L1 ⊢ 𝐅*⦃T1⦄ ≘ f → ∀T2. T1
 ]
 qed-.
 
-lemma frees_tdeq_conf: ∀f,L,T1. L ⊢ 𝐅*⦃T1⦄ ≘ f →
-                       ∀T2. T1 ≛ T2 → L ⊢ 𝐅*⦃T2⦄ ≘ f.
+lemma frees_tdeq_conf: ∀f,L,T1. L ⊢ 𝐅+⦃T1⦄ ≘ f →
+                       ∀T2. T1 ≛ T2 → L ⊢ 𝐅+⦃T2⦄ ≘ f.
 /4 width=7 by frees_tdeq_conf_rdeq, sex_refl, ext2_refl/ qed-.
 
-lemma frees_rdeq_conf: ∀f,L1,T. L1 ⊢ 𝐅*⦃T⦄ ≘ f →
-                       ∀L2. L1 ≛[f] L2 → L2 ⊢ 𝐅*⦃T⦄ ≘ f.
+lemma frees_rdeq_conf: ∀f,L1,T. L1 ⊢ 𝐅+⦃T⦄ ≘ f →
+                       ∀L2. L1 ≛[f] L2 → L2 ⊢ 𝐅+⦃T⦄ ≘ f.
 /2 width=7 by frees_tdeq_conf_rdeq, tdeq_refl/ qed-.
 
 lemma tdeq_rex_conf (R): s_r_confluent1 … cdeq (rex R).
index bbd8a38212232c4a918cbf637c0a23bbb140f37a..d698643907a3f39eec559c3283dbbbfdbc278947 100644 (file)
@@ -21,16 +21,16 @@ include "static_2/static/rdeq_rdeq.ma".
 
 (* Properties with extended structural successor for closures ***************)
 
-lemma fqu_tdeq_conf: â\88\80b,G1,G2,L1,L2,U1,T1. â¦\83G1,L1,U1â¦\84 â\8a\90[b] ⦃G2,L2,T1⦄ →
+lemma fqu_tdeq_conf: â\88\80b,G1,G2,L1,L2,U1,T1. â¦\83G1,L1,U1â¦\84 â¬\82[b] ⦃G2,L2,T1⦄ →
                      ∀U2. U1 ≛ U2 →
-                     â\88\83â\88\83L,T2. â¦\83G1,L1,U2â¦\84 â\8a\90[b] ⦃G2,L,T2⦄ & L2 ≛[T1] L & T1 ≛ T2.
+                     â\88\83â\88\83L,T2. â¦\83G1,L1,U2â¦\84 â¬\82[b] ⦃G2,L,T2⦄ & L2 ≛[T1] L & T1 ≛ T2.
 #b #G1 #G2 #L1 #L2 #U1 #T1 #H elim H -G1 -G2 -L1 -L2 -U1 -T1
 [ #I #G #L #W #X #H >(tdeq_inv_lref1 … H) -X
   /2 width=5 by fqu_lref_O, ex3_2_intro/
 | #I #G #L #W1 #U1 #X #H
   elim (tdeq_inv_pair1 … H) -H #W2 #U2 #HW12 #_ #H destruct
   /2 width=5 by fqu_pair_sn, ex3_2_intro/
-| #p #I #G #L #W1 #U1 #X #H
+| #p #I #G #L #W1 #U1 #Hb #X #H
   elim (tdeq_inv_pair1 … H) -H #W2 #U2 #HW12 #HU12 #H destruct
   /3 width=5 by rdeq_pair_refl, fqu_bind_dx, ex3_2_intro/
 | #p #I #G #L #W1 #U1 #Hb #X #H
@@ -45,18 +45,18 @@ lemma fqu_tdeq_conf: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⊐[b] ⦃G2,L2,T1
 ]
 qed-.
 
-lemma tdeq_fqu_trans: â\88\80b,G1,G2,L1,L2,U1,T1. â¦\83G1,L1,U1â¦\84 â\8a\90[b] ⦃G2,L2,T1⦄ →
+lemma tdeq_fqu_trans: â\88\80b,G1,G2,L1,L2,U1,T1. â¦\83G1,L1,U1â¦\84 â¬\82[b] ⦃G2,L2,T1⦄ →
                       ∀U2. U2 ≛ U1 →
-                      â\88\83â\88\83L,T2. â¦\83G1,L1,U2â¦\84 â\8a\90[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2.
+                      â\88\83â\88\83L,T2. â¦\83G1,L1,U2â¦\84 â¬\82[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2.
 #b #G1 #G2 #L1 #L2 #U1 #T1 #H12 #U2 #HU21
 elim (fqu_tdeq_conf … H12 U2) -H12
 /3 width=5 by rdeq_sym, tdeq_sym, ex3_2_intro/
 qed-.
 
 (* Basic_2A1: uses: lleq_fqu_trans *)
-lemma rdeq_fqu_trans: â\88\80b,G1,G2,L2,K2,T,U. â¦\83G1,L2,Tâ¦\84 â\8a\90[b] ⦃G2,K2,U⦄ →
+lemma rdeq_fqu_trans: â\88\80b,G1,G2,L2,K2,T,U. â¦\83G1,L2,Tâ¦\84 â¬\82[b] ⦃G2,K2,U⦄ →
                       ∀L1. L1 ≛[T] L2 →
-                      â\88\83â\88\83K1,U0. â¦\83G1,L1,Tâ¦\84 â\8a\90[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2.
+                      â\88\83â\88\83K1,U0. â¦\83G1,L1,Tâ¦\84 â¬\82[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2.
 #b #G1 #G2 #L2 #K2 #T #U #H elim H -G1 -G2 -L2 -K2 -T -U
 [ #I #G #L2 #V2 #L1 #H elim (rdeq_inv_zero_pair_dx … H) -H
   #K1 #V1 #HV1 #HV12 #H destruct
@@ -66,8 +66,8 @@ lemma rdeq_fqu_trans: ∀b,G1,G2,L2,K2,T,U. ⦃G1,L2,T⦄ ⊐[b] ⦃G2,K2,U⦄ 
   | elim (rdeq_inv_flat … H)
   ] -H
   /2 width=5 by fqu_pair_sn, ex3_2_intro/
-| #p #I #G #L2 #V #T #L1 #H elim (rdeq_inv_bind … H) -H
-  /2 width=5 by fqu_bind_dx, ex3_2_intro/
+| #p #I #G #L2 #V #T #Hb #L1 #H elim (rdeq_inv_bind … H) -H
+  /3 width=5 by fqu_bind_dx, ex3_2_intro/
 | #p #I #G #L2 #V #T #Hb #L1 #H elim (rdeq_inv_bind_void … H) -H
   /3 width=5 by fqu_clear, ex3_2_intro/
 | #I #G #L2 #V #T #L1 #H elim (rdeq_inv_flat … H) -H
@@ -80,9 +80,9 @@ qed-.
 
 (* Properties with optional structural successor for closures ***************)
 
-lemma tdeq_fquq_trans: â\88\80b,G1,G2,L1,L2,U1,T1. â¦\83G1,L1,U1â¦\84 â\8a\90⸮[b] ⦃G2,L2,T1⦄ →
+lemma tdeq_fquq_trans: â\88\80b,G1,G2,L1,L2,U1,T1. â¦\83G1,L1,U1â¦\84 â¬\82⸮[b] ⦃G2,L2,T1⦄ →
                        ∀U2. U2 ≛ U1 →
-                       â\88\83â\88\83L,T2. â¦\83G1,L1,U2â¦\84 â\8a\90⸮[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2.
+                       â\88\83â\88\83L,T2. â¦\83G1,L1,U2â¦\84 â¬\82⸮[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2.
 #b #G1 #G2 #L1 #L2 #U1 #T1 #H elim H -H
 [ #H #U2 #HU21 elim (tdeq_fqu_trans … H … HU21) -U1
   /3 width=5 by fqu_fquq, ex3_2_intro/
@@ -91,9 +91,9 @@ lemma tdeq_fquq_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⊐⸮[b] ⦃G2,L2
 qed-.
 
 (* Basic_2A1: was just: lleq_fquq_trans *)
-lemma rdeq_fquq_trans: â\88\80b,G1,G2,L2,K2,T,U. â¦\83G1,L2,Tâ¦\84 â\8a\90⸮[b] ⦃G2,K2,U⦄ →
+lemma rdeq_fquq_trans: â\88\80b,G1,G2,L2,K2,T,U. â¦\83G1,L2,Tâ¦\84 â¬\82⸮[b] ⦃G2,K2,U⦄ →
                        ∀L1. L1 ≛[T] L2 →
-                       â\88\83â\88\83K1,U0. â¦\83G1,L1,Tâ¦\84 â\8a\90⸮[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2.
+                       â\88\83â\88\83K1,U0. â¦\83G1,L1,Tâ¦\84 â¬\82⸮[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2.
 #b #G1 #G2 #L2 #K2 #T #U #H elim H -H
 [ #H #L1 #HL12 elim (rdeq_fqu_trans … H … HL12) -L2 /3 width=5 by fqu_fquq, ex3_2_intro/
 | * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/
@@ -103,9 +103,9 @@ qed-.
 (* Properties with plus-iterated structural successor for closures **********)
 
 (* Basic_2A1: was just: lleq_fqup_trans *)
-lemma rdeq_fqup_trans: â\88\80b,G1,G2,L2,K2,T,U. â¦\83G1,L2,Tâ¦\84 â\8a\90+[b] ⦃G2,K2,U⦄ →
+lemma rdeq_fqup_trans: â\88\80b,G1,G2,L2,K2,T,U. â¦\83G1,L2,Tâ¦\84 â¬\82+[b] ⦃G2,K2,U⦄ →
                        ∀L1. L1 ≛[T] L2 →
-                       â\88\83â\88\83K1,U0. â¦\83G1,L1,Tâ¦\84 â\8a\90+[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2.
+                       â\88\83â\88\83K1,U0. â¦\83G1,L1,Tâ¦\84 â¬\82+[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2.
 #b #G1 #G2 #L2 #K2 #T #U #H @(fqup_ind … H) -G2 -K2 -U
 [ #G2 #K2 #U #HTU #L1 #HL12 elim (rdeq_fqu_trans … HTU … HL12) -L2
   /3 width=5 by fqu_fqup, ex3_2_intro/
@@ -118,9 +118,9 @@ lemma rdeq_fqup_trans: ∀b,G1,G2,L2,K2,T,U. ⦃G1,L2,T⦄ ⊐+[b] ⦃G2,K2,U⦄
 ]
 qed-.
 
-lemma tdeq_fqup_trans: â\88\80b,G1,G2,L1,L2,U1,T1. â¦\83G1,L1,U1â¦\84 â\8a\90+[b] ⦃G2,L2,T1⦄ →
+lemma tdeq_fqup_trans: â\88\80b,G1,G2,L1,L2,U1,T1. â¦\83G1,L1,U1â¦\84 â¬\82+[b] ⦃G2,L2,T1⦄ →
                        ∀U2. U2 ≛ U1 →
-                       â\88\83â\88\83L,T2. â¦\83G1,L1,U2â¦\84 â\8a\90+[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2.
+                       â\88\83â\88\83L,T2. â¦\83G1,L1,U2â¦\84 â¬\82+[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2.
 #b #G1 #G2 #L1 #L2 #U1 #T1 #H @(fqup_ind_dx … H) -G1 -L1 -U1
 [ #G1 #L1 #U1 #H #U2 #HU21 elim (tdeq_fqu_trans … H … HU21) -U1
   /3 width=5 by fqu_fqup, ex3_2_intro/
@@ -136,9 +136,9 @@ qed-.
 
 (* Properties with star-iterated structural successor for closures **********)
 
-lemma tdeq_fqus_trans: â\88\80b,G1,G2,L1,L2,U1,T1. â¦\83G1,L1,U1â¦\84 â\8a\90*[b] ⦃G2,L2,T1⦄ →
+lemma tdeq_fqus_trans: â\88\80b,G1,G2,L1,L2,U1,T1. â¦\83G1,L1,U1â¦\84 â¬\82*[b] ⦃G2,L2,T1⦄ →
                        ∀U2. U2 ≛ U1 →
-                       â\88\83â\88\83L,T2. â¦\83G1,L1,U2â¦\84 â\8a\90*[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2.
+                       â\88\83â\88\83L,T2. â¦\83G1,L1,U2â¦\84 â¬\82*[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2.
 #b #G1 #G2 #L1 #L2 #U1 #T1 #H #U2 #HU21 elim(fqus_inv_fqup … H) -H
 [ #H elim (tdeq_fqup_trans … H … HU21) -U1 /3 width=5 by fqup_fqus, ex3_2_intro/
 | * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/
@@ -146,9 +146,9 @@ lemma tdeq_fqus_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⊐*[b] ⦃G2,L2,T
 qed-.
 
 (* Basic_2A1: was just: lleq_fqus_trans *)
-lemma rdeq_fqus_trans: â\88\80b,G1,G2,L2,K2,T,U. â¦\83G1,L2,Tâ¦\84 â\8a\90*[b] ⦃G2,K2,U⦄ →
+lemma rdeq_fqus_trans: â\88\80b,G1,G2,L2,K2,T,U. â¦\83G1,L2,Tâ¦\84 â¬\82*[b] ⦃G2,K2,U⦄ →
                        ∀L1. L1 ≛[T] L2 →
-                       â\88\83â\88\83K1,U0. â¦\83G1,L1,Tâ¦\84 â\8a\90*[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2.
+                       â\88\83â\88\83K1,U0. â¦\83G1,L1,Tâ¦\84 â¬\82*[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2.
 #b #G1 #G2 #L2 #K2 #T #U #H #L1 #HL12 elim(fqus_inv_fqup … H) -H
 [ #H elim (rdeq_fqup_trans … H … HL12) -L2 /3 width=5 by fqup_fqus, ex3_2_intro/
 | * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/
index 46e436d68eb2edde629e4b9d9659a114055b377f..acfb6c4e8a4e9ea879edfee076d6d06225823844 100644 (file)
@@ -76,8 +76,8 @@ qed-.
 
 (* Basic_properties *********************************************************)
 
-lemma frees_req_conf: ∀f,L1,T. L1 ⊢ 𝐅*⦃T⦄ ≘ f →
-                      ∀L2. L1 ≡[T] L2 → L2 ⊢ 𝐅*⦃T⦄ ≘ f.
+lemma frees_req_conf: ∀f,L1,T. L1 ⊢ 𝐅+⦃T⦄ ≘ f →
+                      ∀L2. L1 ≡[T] L2 → L2 ⊢ 𝐅+⦃T⦄ ≘ f.
 #f #L1 #T #H elim H -f -L1 -T
 [ /2 width=3 by frees_sort/
 | #f #i #Hf #L2 #H2
index 0848e850358c8878053c135b7aa41bb1e85af4c2..07ad9fe0587b434e67a5198c9ea22a2de3a7810b 100644 (file)
@@ -21,7 +21,7 @@ include "static_2/static/frees.ma".
 (* GENERIC EXTENSION ON REFERRED ENTRIES OF A CONTEXT-SENSITIVE REALTION ****)
 
 definition rex (R) (T): relation lenv ≝
-               λL1,L2. ∃∃f. L1 ⊢ 𝐅*⦃T⦄ ≘ f & L1 ⪤[cext2 R,cfull,f] L2.
+               λL1,L2. ∃∃f. L1 ⊢ 𝐅+⦃T⦄ ≘ f & L1 ⪤[cext2 R,cfull,f] L2.
 
 interpretation "generic extension on referred entries (local environment)"
    'Relation R T L1 L2 = (rex R T L1 L2).
@@ -53,10 +53,10 @@ lemma rex_inv_atom_dx (R): ∀Y1,T. Y1 ⪤[R,T] ⋆ → Y1 = ⋆.
 #R #I #Y1 * /2 width=4 by sex_inv_atom2/
 qed-.
 
-lemma rex_inv_sort (R): ∀Y1,Y2,s. Y1 ⪤[R,⋆s] Y2 →
-                        ∨∨ Y1 = ⋆ ∧ Y2 = ⋆
-                         | ∃∃I1,I2,L1,L2. L1 ⪤[R,⋆s] L2 &
-                                          Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}.
+lemma rex_inv_sort (R):
+      ∀Y1,Y2,s. Y1 ⪤[R,⋆s] Y2 →
+      ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆
+       | ∃∃I1,I2,L1,L2. L1 ⪤[R,⋆s] L2 & Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}.
 #R * [ | #Y1 #I1 ] #Y2 #s * #f #H1 #H2
 [ lapply (sex_inv_atom1 … H2) -H2 /3 width=1 by or_introl, conj/
 | lapply (frees_inv_sort … H1) -H1 #Hf
@@ -66,12 +66,13 @@ lemma rex_inv_sort (R): ∀Y1,Y2,s. Y1 ⪤[R,⋆s] Y2 →
 ]
 qed-.
 
-lemma rex_inv_zero (R): ∀Y1,Y2. Y1 ⪤[R,#0] Y2 →
-                        ∨∨ Y1 = ⋆ ∧ Y2 = ⋆
-                         | ∃∃I,L1,L2,V1,V2. L1 ⪤[R,V1] L2 & R L1 V1 V2 &
-                                            Y1 = L1.ⓑ{I}V1 & Y2 = L2.ⓑ{I}V2
-                         | ∃∃f,I,L1,L2. 𝐈⦃f⦄ & L1 ⪤[cext2 R,cfull,f] L2 &
-                                        Y1 = L1.ⓤ{I} & Y2 = L2.ⓤ{I}.
+lemma rex_inv_zero (R):
+      ∀Y1,Y2. Y1 ⪤[R,#0] Y2 →
+      ∨∨ Y1 = ⋆ ∧ Y2 = ⋆
+       | ∃∃I,L1,L2,V1,V2. L1 ⪤[R,V1] L2 & R L1 V1 V2 &
+           Y1 = L1.ⓑ{I}V1 & Y2 = L2.ⓑ{I}V2
+       | ∃∃f,I,L1,L2. 𝐈⦃f⦄ & L1 ⪤[cext2 R,cfull,f] L2 &
+           Y1 = L1.ⓤ{I} & Y2 = L2.ⓤ{I}.
 #R * [ | #Y1 * #I1 [ | #X ] ] #Y2 * #f #H1 #H2
 [ lapply (sex_inv_atom1 … H2) -H2 /3 width=1 by or3_intro0, conj/
 | elim (frees_inv_unit … H1) -H1 #g #HX #H destruct
@@ -84,10 +85,10 @@ lemma rex_inv_zero (R): ∀Y1,Y2. Y1 ⪤[R,#0] Y2 →
 ]
 qed-.
 
-lemma rex_inv_lref (R): ∀Y1,Y2,i. Y1 ⪤[R,#↑i] Y2 →
-                        ∨∨ Y1 = ⋆ ∧ Y2 = ⋆
-                         | ∃∃I1,I2,L1,L2. L1 ⪤[R,#i] L2 &
-                                          Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}.
+lemma rex_inv_lref (R):
+      ∀Y1,Y2,i. Y1 ⪤[R,#↑i] Y2 →
+      ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆
+       | ∃∃I1,I2,L1,L2. L1 ⪤[R,#i] L2 & Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}.
 #R * [ | #Y1 #I1 ] #Y2 #i * #f #H1 #H2
 [ lapply (sex_inv_atom1 … H2) -H2 /3 width=1 by or_introl, conj/
 | elim (frees_inv_lref … H1) -H1 #g #Hg #H destruct
@@ -96,10 +97,10 @@ lemma rex_inv_lref (R): ∀Y1,Y2,i. Y1 ⪤[R,#↑i] Y2 →
 ]
 qed-.
 
-lemma rex_inv_gref (R): ∀Y1,Y2,l. Y1 ⪤[R,§l] Y2 →
-                        ∨∨ Y1 = ⋆ ∧ Y2 = ⋆
-                         | ∃∃I1,I2,L1,L2. L1 ⪤[R,§l] L2 &
-                                          Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}.
+lemma rex_inv_gref (R):
+      ∀Y1,Y2,l. Y1 ⪤[R,§l] Y2 →
+      ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆
+       | ∃∃I1,I2,L1,L2. L1 ⪤[R,§l] L2 & Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}.
 #R * [ | #Y1 #I1 ] #Y2 #l * #f #H1 #H2
 [ lapply (sex_inv_atom1 … H2) -H2 /3 width=1 by or_introl, conj/
 | lapply (frees_inv_gref … H1) -H1 #Hf
@@ -110,40 +111,44 @@ lemma rex_inv_gref (R): ∀Y1,Y2,l. Y1 ⪤[R,§l] Y2 →
 qed-.
 
 (* Basic_2A1: uses: llpx_sn_inv_bind llpx_sn_inv_bind_O *)
-lemma rex_inv_bind (R): ∀p,I,L1,L2,V1,V2,T. L1 ⪤[R,ⓑ{p,I}V1.T] L2 → R L1 V1 V2 →
-                        ∧∧ L1 ⪤[R,V1] L2 & L1.ⓑ{I}V1 ⪤[R,T] L2.ⓑ{I}V2.
+lemma rex_inv_bind (R):
+      ∀p,I,L1,L2,V1,V2,T. L1 ⪤[R,ⓑ{p,I}V1.T] L2 → R L1 V1 V2 →
+      ∧∧ L1 ⪤[R,V1] L2 & L1.ⓑ{I}V1 ⪤[R,T] L2.ⓑ{I}V2.
 #R #p #I #L1 #L2 #V1 #V2 #T * #f #Hf #HL #HV elim (frees_inv_bind … Hf) -Hf
 /6 width=6 by sle_sex_trans, sex_inv_tl, ext2_pair, sor_inv_sle_dx, sor_inv_sle_sn, ex2_intro, conj/
 qed-.
 
 (* Basic_2A1: uses: llpx_sn_inv_flat *)
-lemma rex_inv_flat (R): ∀I,L1,L2,V,T. L1 ⪤[R,ⓕ{I}V.T] L2 →
-                        ∧∧ L1 ⪤[R,V] L2 & L1 ⪤[R,T] L2.
+lemma rex_inv_flat (R):
+      ∀I,L1,L2,V,T. L1 ⪤[R,ⓕ{I}V.T] L2 →
+      ∧∧ L1 ⪤[R,V] L2 & L1 ⪤[R,T] L2.
 #R #I #L1 #L2 #V #T * #f #Hf #HL elim (frees_inv_flat … Hf) -Hf
 /5 width=6 by sle_sex_trans, sor_inv_sle_dx, sor_inv_sle_sn, ex2_intro, conj/
 qed-.
 
 (* Advanced inversion lemmas ************************************************)
 
-lemma rex_inv_sort_bind_sn (R): ∀I1,K1,L2,s. K1.ⓘ{I1} ⪤[R,⋆s] L2 →
-                                ∃∃I2,K2. K1 ⪤[R,⋆s] K2 & L2 = K2.ⓘ{I2}.
+lemma rex_inv_sort_bind_sn (R):
+      ∀I1,K1,L2,s. K1.ⓘ{I1} ⪤[R,⋆s] L2 →
+      ∃∃I2,K2. K1 ⪤[R,⋆s] K2 & L2 = K2.ⓘ{I2}.
 #R #I1 #K1 #L2 #s #H elim (rex_inv_sort … H) -H *
 [ #H destruct
 | #Z1 #I2 #Y1 #K2 #Hs #H1 #H2 destruct /2 width=4 by ex2_2_intro/
 ]
 qed-.
 
-lemma rex_inv_sort_bind_dx (R): ∀I2,K2,L1,s. L1 ⪤[R,⋆s] K2.ⓘ{I2} →
-                                ∃∃I1,K1. K1 ⪤[R,⋆s] K2 & L1 = K1.ⓘ{I1}.
+lemma rex_inv_sort_bind_dx (R):
+      ∀I2,K2,L1,s. L1 ⪤[R,⋆s] K2.ⓘ{I2} →
+      ∃∃I1,K1. K1 ⪤[R,⋆s] K2 & L1 = K1.ⓘ{I1}.
 #R #I2 #K2 #L1 #s #H elim (rex_inv_sort … H) -H *
 [ #_ #H destruct
 | #I1 #Z2 #K1 #Y2 #Hs #H1 #H2 destruct /2 width=4 by ex2_2_intro/
 ]
 qed-.
 
-lemma rex_inv_zero_pair_sn (R): ∀I,L2,K1,V1. K1.ⓑ{I}V1 ⪤[R,#0] L2 →
-                                ∃∃K2,V2. K1 ⪤[R,V1] K2 & R K1 V1 V2 &
-                                         L2 = K2.ⓑ{I}V2.
+lemma rex_inv_zero_pair_sn (R):
+      ∀I,L2,K1,V1. K1.ⓑ{I}V1 ⪤[R,#0] L2 →
+      ∃∃K2,V2. K1 ⪤[R,V1] K2 & R K1 V1 V2 & L2 = K2.ⓑ{I}V2.
 #R #I #L2 #K1 #V1 #H elim (rex_inv_zero … H) -H *
 [ #H destruct
 | #Z #Y1 #K2 #X1 #V2 #HK12 #HV12 #H1 #H2 destruct
@@ -152,9 +157,9 @@ lemma rex_inv_zero_pair_sn (R): ∀I,L2,K1,V1. K1.ⓑ{I}V1 ⪤[R,#0] L2 →
 ]
 qed-.
 
-lemma rex_inv_zero_pair_dx (R): ∀I,L1,K2,V2. L1 ⪤[R,#0] K2.ⓑ{I}V2 →
-                                ∃∃K1,V1. K1 ⪤[R,V1] K2 & R K1 V1 V2 &
-                                         L1 = K1.ⓑ{I}V1.
+lemma rex_inv_zero_pair_dx (R):
+      ∀I,L1,K2,V2. L1 ⪤[R,#0] K2.ⓑ{I}V2 →
+      ∃∃K1,V1. K1 ⪤[R,V1] K2 & R K1 V1 V2 & L1 = K1.ⓑ{I}V1.
 #R #I #L1 #K2 #V2 #H elim (rex_inv_zero … H) -H *
 [ #_ #H destruct
 | #Z #K1 #Y2 #V1 #X2 #HK12 #HV12 #H1 #H2 destruct
@@ -163,9 +168,9 @@ lemma rex_inv_zero_pair_dx (R): ∀I,L1,K2,V2. L1 ⪤[R,#0] K2.ⓑ{I}V2 →
 ]
 qed-.
 
-lemma rex_inv_zero_unit_sn (R): ∀I,K1,L2. K1.ⓤ{I} ⪤[R,#0] L2 →
-                                ∃∃f,K2. 𝐈⦃f⦄ & K1 ⪤[cext2 R,cfull,f] K2 &
-                                        L2 = K2.ⓤ{I}.
+lemma rex_inv_zero_unit_sn (R):
+      ∀I,K1,L2. K1.ⓤ{I} ⪤[R,#0] L2 →
+      ∃∃f,K2. 𝐈⦃f⦄ & K1 ⪤[cext2 R,cfull,f] K2 & L2 = K2.ⓤ{I}.
 #R #I #K1 #L2 #H elim (rex_inv_zero … H) -H *
 [ #H destruct
 | #Z #Y1 #Y2 #X1 #X2 #_ #_ #H destruct
@@ -173,9 +178,9 @@ lemma rex_inv_zero_unit_sn (R): ∀I,K1,L2. K1.ⓤ{I} ⪤[R,#0] L2 →
 ]
 qed-.
 
-lemma rex_inv_zero_unit_dx (R): ∀I,L1,K2. L1 ⪤[R,#0] K2.ⓤ{I} →
-                                ∃∃f,K1. 𝐈⦃f⦄ & K1 ⪤[cext2 R,cfull,f] K2 &
-                                        L1 = K1.ⓤ{I}.
+lemma rex_inv_zero_unit_dx (R):
+      ∀I,L1,K2. L1 ⪤[R,#0] K2.ⓤ{I} →
+      ∃∃f,K1. 𝐈⦃f⦄ & K1 ⪤[cext2 R,cfull,f] K2 & L1 = K1.ⓤ{I}.
 #R #I #L1 #K2 #H elim (rex_inv_zero … H) -H *
 [ #_ #H destruct
 | #Z #Y1 #Y2 #X1 #X2 #_ #_ #_ #H destruct
@@ -183,32 +188,36 @@ lemma rex_inv_zero_unit_dx (R): ∀I,L1,K2. L1 ⪤[R,#0] K2.ⓤ{I} →
 ]
 qed-.
 
-lemma rex_inv_lref_bind_sn (R): ∀I1,K1,L2,i. K1.ⓘ{I1} ⪤[R,#↑i] L2 →
-                                ∃∃I2,K2. K1 ⪤[R,#i] K2 & L2 = K2.ⓘ{I2}.
+lemma rex_inv_lref_bind_sn (R):
+      ∀I1,K1,L2,i. K1.ⓘ{I1} ⪤[R,#↑i] L2 →
+      ∃∃I2,K2. K1 ⪤[R,#i] K2 & L2 = K2.ⓘ{I2}.
 #R #I1 #K1 #L2 #i #H elim (rex_inv_lref … H) -H *
 [ #H destruct
 | #Z1 #I2 #Y1 #K2 #Hi #H1 #H2 destruct /2 width=4 by ex2_2_intro/
 ]
 qed-.
 
-lemma rex_inv_lref_bind_dx (R): ∀I2,K2,L1,i. L1 ⪤[R,#↑i] K2.ⓘ{I2} →
-                                ∃∃I1,K1. K1 ⪤[R,#i] K2 & L1 = K1.ⓘ{I1}.
+lemma rex_inv_lref_bind_dx (R):
+      ∀I2,K2,L1,i. L1 ⪤[R,#↑i] K2.ⓘ{I2} →
+      ∃∃I1,K1. K1 ⪤[R,#i] K2 & L1 = K1.ⓘ{I1}.
 #R #I2 #K2 #L1 #i #H elim (rex_inv_lref … H) -H *
 [ #_ #H destruct
 | #I1 #Z2 #K1 #Y2 #Hi #H1 #H2 destruct /2 width=4 by ex2_2_intro/
 ]
 qed-.
 
-lemma rex_inv_gref_bind_sn (R): ∀I1,K1,L2,l. K1.ⓘ{I1} ⪤[R,§l] L2 →
-                                ∃∃I2,K2. K1 ⪤[R,§l] K2 & L2 = K2.ⓘ{I2}.
+lemma rex_inv_gref_bind_sn (R):
+      ∀I1,K1,L2,l. K1.ⓘ{I1} ⪤[R,§l] L2 →
+      ∃∃I2,K2. K1 ⪤[R,§l] K2 & L2 = K2.ⓘ{I2}.
 #R #I1 #K1 #L2 #l #H elim (rex_inv_gref … H) -H *
 [ #H destruct
 | #Z1 #I2 #Y1 #K2 #Hl #H1 #H2 destruct /2 width=4 by ex2_2_intro/
 ]
 qed-.
 
-lemma rex_inv_gref_bind_dx (R): ∀I2,K2,L1,l. L1 ⪤[R,§l] K2.ⓘ{I2} →
-                                ∃∃I1,K1. K1 ⪤[R,§l] K2 & L1 = K1.ⓘ{I1}.
+lemma rex_inv_gref_bind_dx (R):
+      ∀I2,K2,L1,l. L1 ⪤[R,§l] K2.ⓘ{I2} →
+      ∃∃I1,K1. K1 ⪤[R,§l] K2 & L1 = K1.ⓘ{I1}.
 #R #I2 #K2 #L1 #l #H elim (rex_inv_gref … H) -H *
 [ #_ #H destruct
 | #I1 #Z2 #K1 #Y2 #Hl #H1 #H2 destruct /2 width=4 by ex2_2_intro/
@@ -217,8 +226,8 @@ qed-.
 
 (* Basic forward lemmas *****************************************************)
 
-lemma rex_fwd_zero_pair (R): ∀I,K1,K2,V1,V2.
-                             K1.ⓑ{I}V1 ⪤[R,#0] K2.ⓑ{I}V2 → K1 ⪤[R,V1] K2.
+lemma rex_fwd_zero_pair (R):
+      ∀I,K1,K2,V1,V2. K1.ⓑ{I}V1 ⪤[R,#0] K2.ⓑ{I}V2 → K1 ⪤[R,V1] K2.
 #R #I #K1 #K2 #V1 #V2 #H
 elim (rex_inv_zero_pair_sn … H) -H #Y #X #HK12 #_ #H destruct //
 qed-.
@@ -231,8 +240,9 @@ lemma rex_fwd_pair_sn (R): ∀I,L1,L2,V,T. L1 ⪤[R,②{I}V.T] L2 → L1 ⪤[R,V
 qed-.
 
 (* Basic_2A1: uses: llpx_sn_fwd_bind_dx llpx_sn_fwd_bind_O_dx *)
-lemma rex_fwd_bind_dx (R): ∀p,I,L1,L2,V1,V2,T. L1 ⪤[R,ⓑ{p,I}V1.T] L2 →
-                           R L1 V1 V2 → L1.ⓑ{I}V1 ⪤[R,T] L2.ⓑ{I}V2.
+lemma rex_fwd_bind_dx (R):
+      ∀p,I,L1,L2,V1,V2,T. L1 ⪤[R,ⓑ{p,I}V1.T] L2 →
+      R L1 V1 V2 → L1.ⓑ{I}V1 ⪤[R,T] L2.ⓑ{I}V2.
 #R #p #I #L1 #L2 #V1 #V2 #T #H #HV elim (rex_inv_bind … H HV) -H -HV //
 qed-.
 
@@ -241,8 +251,9 @@ lemma rex_fwd_flat_dx (R): ∀I,L1,L2,V,T. L1 ⪤[R,ⓕ{I}V.T] L2 → L1 ⪤[R,T
 #R #I #L1 #L2 #V #T #H elim (rex_inv_flat … H) -H //
 qed-.
 
-lemma rex_fwd_dx (R): ∀I2,L1,K2,T. L1 ⪤[R,T] K2.ⓘ{I2} →
-                      ∃∃I1,K1. L1 = K1.ⓘ{I1}.
+lemma rex_fwd_dx (R):
+      ∀I2,L1,K2,T. L1 ⪤[R,T] K2.ⓘ{I2} →
+      ∃∃I1,K1. L1 = K1.ⓘ{I1}.
 #R #I2 #L1 #K2 #T * #f elim (pn_split f) * #g #Hg #_ #Hf destruct
 [ elim (sex_inv_push2 … Hf) | elim (sex_inv_next2 … Hf) ] -Hf #I1 #K1 #_ #_ #H destruct
 /2 width=3 by ex1_2_intro/
@@ -254,59 +265,62 @@ lemma rex_atom (R): ∀I. ⋆ ⪤[R,⓪{I}] ⋆.
 #R * /3 width=3 by frees_sort, frees_atom, frees_gref, sex_atom, ex2_intro/
 qed.
 
-lemma rex_sort (R): ∀I1,I2,L1,L2,s.
-                    L1 ⪤[R,⋆s] L2 → L1.ⓘ{I1} ⪤[R,⋆s] L2.ⓘ{I2}.
+lemma rex_sort (R):
+      ∀I1,I2,L1,L2,s. L1 ⪤[R,⋆s] L2 → L1.ⓘ{I1} ⪤[R,⋆s] L2.ⓘ{I2}.
 #R #I1 #I2 #L1 #L2 #s * #f #Hf #H12
 lapply (frees_inv_sort … Hf) -Hf
 /4 width=3 by frees_sort, sex_push, isid_push, ex2_intro/
 qed.
 
-lemma rex_pair (R): ∀I,L1,L2,V1,V2. L1 ⪤[R,V1] L2 →
-                    R L1 V1 V2 → L1.ⓑ{I}V1 ⪤[R,#0] L2.ⓑ{I}V2.
+lemma rex_pair (R):
+      ∀I,L1,L2,V1,V2. L1 ⪤[R,V1] L2 →
+      R L1 V1 V2 → L1.ⓑ{I}V1 ⪤[R,#0] L2.ⓑ{I}V2.
 #R #I1 #I2 #L1 #L2 #V1 *
 /4 width=3 by ext2_pair, frees_pair, sex_next, ex2_intro/
 qed.
 
-lemma rex_unit (R): ∀f,I,L1,L2. 𝐈⦃f⦄ → L1 ⪤[cext2 R,cfull,f] L2 →
-                    L1.ⓤ{I} ⪤[R,#0] L2.ⓤ{I}.
+lemma rex_unit (R):
+      ∀f,I,L1,L2. 𝐈⦃f⦄ → L1 ⪤[cext2 R,cfull,f] L2 →
+      L1.ⓤ{I} ⪤[R,#0] L2.ⓤ{I}.
 /4 width=3 by frees_unit, sex_next, ext2_unit, ex2_intro/ qed.
 
-lemma rex_lref (R): ∀I1,I2,L1,L2,i.
-                    L1 ⪤[R,#i] L2 → L1.ⓘ{I1} ⪤[R,#↑i] L2.ⓘ{I2}.
+lemma rex_lref (R):
+      ∀I1,I2,L1,L2,i. L1 ⪤[R,#i] L2 → L1.ⓘ{I1} ⪤[R,#↑i] L2.ⓘ{I2}.
 #R #I1 #I2 #L1 #L2 #i * /3 width=3 by sex_push, frees_lref, ex2_intro/
 qed.
 
-lemma rex_gref (R): ∀I1,I2,L1,L2,l.
-                    L1 ⪤[R,§l] L2 → L1.ⓘ{I1} ⪤[R,§l] L2.ⓘ{I2}.
+lemma rex_gref (R):
+      ∀I1,I2,L1,L2,l. L1 ⪤[R,§l] L2 → L1.ⓘ{I1} ⪤[R,§l] L2.ⓘ{I2}.
 #R #I1 #I2 #L1 #L2 #l * #f #Hf #H12
 lapply (frees_inv_gref … Hf) -Hf
 /4 width=3 by frees_gref, sex_push, isid_push, ex2_intro/
 qed.
 
-lemma rex_bind_repl_dx (R): ∀I,I1,L1,L2,T.
-                            L1.ⓘ{I} ⪤[R,T] L2.ⓘ{I1} →
-                            ∀I2. cext2 R L1 I I2 →
-                            L1.ⓘ{I} ⪤[R,T] L2.ⓘ{I2}.
+lemma rex_bind_repl_dx (R):
+      ∀I,I1,L1,L2,T. L1.ⓘ{I} ⪤[R,T] L2.ⓘ{I1} →
+      ∀I2. cext2 R L1 I I2 → L1.ⓘ{I} ⪤[R,T] L2.ⓘ{I2}.
 #R #I #I1 #L1 #L2 #T * #f #Hf #HL12 #I2 #HR
 /3 width=5 by sex_pair_repl, ex2_intro/
 qed-.
 
 (* Basic_2A1: uses: llpx_sn_co *)
-lemma rex_co (R1) (R2): (∀L,T1,T2. R1 L T1 T2 → R2 L T1 T2) →
-                        ∀L1,L2,T. L1 ⪤[R1,T] L2 → L1 ⪤[R2,T] L2.
+lemma rex_co (R1) (R2):
+      (∀L,T1,T2. R1 L T1 T2 → R2 L T1 T2) →
+      ∀L1,L2,T. L1 ⪤[R1,T] L2 → L1 ⪤[R2,T] L2.
 #R1 #R2 #HR #L1 #L2 #T * /5 width=7 by sex_co, cext2_co, ex2_intro/
 qed-.
 
-lemma rex_isid (R1) (R2): ∀L1,L2,T1,T2.
-                          (∀f. L1 ⊢ 𝐅*⦃T1⦄ ≘ f → 𝐈⦃f⦄) →
-                          (∀f. 𝐈⦃f⦄ → L1 ⊢ 𝐅*⦃T2⦄ ≘ f) →
-                          L1 ⪤[R1,T1] L2 → L1 ⪤[R2,T2] L2.
+lemma rex_isid (R1) (R2):
+      ∀L1,L2,T1,T2.
+      (∀f. L1 ⊢ 𝐅+⦃T1⦄ ≘ f → 𝐈⦃f⦄) →
+      (∀f. 𝐈⦃f⦄ → L1 ⊢ 𝐅+⦃T2⦄ ≘ f) →
+      L1 ⪤[R1,T1] L2 → L1 ⪤[R2,T2] L2.
 #R1 #R2 #L1 #L2 #T1 #T2 #H1 #H2 *
 /4 width=7 by sex_co_isid, ex2_intro/
 qed-.
 
 lemma rex_unit_sn (R1) (R2): 
-                  ∀I,K1,L2. K1.ⓤ{I} ⪤[R1,#0] L2 → K1.ⓤ{I} ⪤[R2,#0] L2.
+      ∀I,K1,L2. K1.ⓤ{I} ⪤[R1,#0] L2 → K1.ⓤ{I} ⪤[R2,#0] L2.
 #R1 #R2 #I #K1 #L2 #H
 elim (rex_inv_zero_unit_sn … H) -H #f #K2 #Hf #HK12 #H destruct
 /3 width=7 by rex_unit, sex_co_isid/
index 5a04668001eb7d91e8583ab51324841ff0bca211..f3421b04c8770b3b9b57b1fb6e2ad4fd465d79f2 100644 (file)
@@ -35,14 +35,15 @@ definition f_dropable_dx: predicate (relation3 lenv term term) ≝
                           ∃∃K1. ⬇*[b,f] L1 ≘ K1 & K1 ⪤[R,T] K2.
 
 definition f_transitive_next: relation3 … ≝ λR1,R2,R3.
-                              ∀f,L,T. L ⊢ 𝐅*⦃T⦄ ≘ f →
+                              ∀f,L,T. L ⊢ 𝐅+⦃T⦄ ≘ f →
                               ∀g,I,K,n. ⬇*[n] L ≘ K.ⓘ{I} → ↑g = ⫱*[n] f →
                               sex_transitive (cext2 R1) (cext2 R2) (cext2 R3) (cext2 R1) cfull g K I.
 
 (* Properties with generic slicing for local environments *******************)
 
-lemma rex_liftable_dedropable_sn: ∀R. (∀L. reflexive ? (R L)) →
-                                  d_liftable2_sn … lifts R → f_dedropable_sn R.
+lemma rex_liftable_dedropable_sn (R):
+      (∀L. reflexive ? (R L)) →
+      d_liftable2_sn … lifts R → f_dedropable_sn R.
 #R #H1R #H2R #b #f #L1 #K1 #HLK1 #K2 #T * #f1 #Hf1 #HK12 #U #HTU
 elim (frees_total L1 U) #f2 #Hf2
 lapply (frees_fwd_coafter … Hf2 … HLK1 … HTU … Hf1) -HTU #Hf
@@ -50,7 +51,8 @@ elim (sex_liftable_co_dedropable_sn … HLK1 … HK12 … Hf) -f1 -K1
 /3 width=6 by cext2_d_liftable2_sn, cfull_lift_sn, ext2_refl, ex3_intro, ex2_intro/
 qed-.
 
-lemma rex_trans_next: ∀R1,R2,R3. rex_transitive R1 R2 R3 → f_transitive_next R1 R2 R3.
+lemma rex_trans_next (R1) (R2) (R3):
+      rex_transitive R1 R2 R3 → f_transitive_next R1 R2 R3.
 #R1 #R2 #R3 #HR #f #L1 #T #Hf #g #I1 #K1 #n #HLK #Hgf #I #H
 generalize in match HLK; -HLK elim H -I1 -I
 [ #I #_ #L2 #_ #I2 #H
@@ -67,7 +69,7 @@ qed.
 
 (* Basic_2A1: uses: llpx_sn_inv_lift_le llpx_sn_inv_lift_be llpx_sn_inv_lift_ge *)
 (* Basic_2A1: was: llpx_sn_drop_conf_O *)
-lemma rex_dropable_sn: ∀R. f_dropable_sn R.
+lemma rex_dropable_sn (R): f_dropable_sn R.
 #R #b #f #L1 #K1 #HLK1 #H1f #L2 #U * #f2 #Hf2 #HL12 #T #HTU
 elim (frees_total K1 T) #f1 #Hf1
 lapply (frees_fwd_coafter … Hf2 … HLK1 … HTU … Hf1) -HTU #H2f
@@ -77,7 +79,7 @@ qed-.
 
 (* Basic_2A1: was: llpx_sn_drop_trans_O *)
 (* Note: the proof might be simplified *)
-lemma rex_dropable_dx: ∀R. f_dropable_dx R.
+lemma rex_dropable_dx (R): f_dropable_dx R.
 #R #L1 #L2 #U * #f2 #Hf2 #HL12 #b #f #K2 #HLK2 #H1f #T #HTU
 elim (drops_isuni_ex … H1f L1) #K1 #HLK1
 elim (frees_total K1 T) #f1 #Hf1
@@ -87,48 +89,53 @@ elim (sex_co_dropable_dx … HL12 … HLK2 … H2f) -L2
 qed-.
 
 (* Basic_2A1: uses: llpx_sn_inv_lift_O *)
-lemma rex_inv_lifts_bi: ∀R,L1,L2,U. L1 ⪤[R,U] L2 → ∀b,f. 𝐔⦃f⦄ → 
-                        ∀K1,K2. ⬇*[b,f] L1 ≘ K1 → ⬇*[b,f] L2 ≘ K2 →
-                        ∀T. ⬆*[f] T ≘ U → K1 ⪤[R,T] K2.
+lemma rex_inv_lifts_bi (R):
+      ∀L1,L2,U. L1 ⪤[R,U] L2 → ∀b,f. 𝐔⦃f⦄ → 
+      ∀K1,K2. ⬇*[b,f] L1 ≘ K1 → ⬇*[b,f] L2 ≘ K2 →
+      ∀T. ⬆*[f] T ≘ U → K1 ⪤[R,T] K2.
 #R #L1 #L2 #U #HL12 #b #f #Hf #K1 #K2 #HLK1 #HLK2 #T #HTU
 elim (rex_dropable_sn … HLK1 … HL12 … HTU) -L1 -U // #Y #HK12 #HY
 lapply (drops_mono … HY … HLK2) -b -f -L2 #H destruct //
 qed-.
 
-lemma rex_inv_lref_pair_sn: ∀R,L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K1,V1. ⬇*[i] L1 ≘ K1.ⓑ{I}V1 →
-                            ∃∃K2,V2. ⬇*[i] L2 ≘ K2.ⓑ{I}V2 & K1 ⪤[R,V1] K2 & R K1 V1 V2.
+lemma rex_inv_lref_pair_sn (R):
+      ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K1,V1. ⬇*[i] L1 ≘ K1.ⓑ{I}V1 →
+      ∃∃K2,V2. ⬇*[i] L2 ≘ K2.ⓑ{I}V2 & K1 ⪤[R,V1] K2 & R K1 V1 V2.
 #R #L1 #L2 #i #HL12 #I #K1 #V1 #HLK1 elim (rex_dropable_sn … HLK1 … HL12 (#0)) -HLK1 -HL12 //
 #Y #HY #HLK2 elim (rex_inv_zero_pair_sn … HY) -HY
 #K2 #V2 #HK12 #HV12 #H destruct /2 width=5 by ex3_2_intro/
 qed-.
 
-lemma rex_inv_lref_pair_dx: ∀R,L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K2,V2. ⬇*[i] L2 ≘ K2.ⓑ{I}V2 →
-                            ∃∃K1,V1. ⬇*[i] L1 ≘ K1.ⓑ{I}V1 & K1 ⪤[R,V1] K2 & R K1 V1 V2.
+lemma rex_inv_lref_pair_dx (R):
+      ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K2,V2. ⬇*[i] L2 ≘ K2.ⓑ{I}V2 →
+      ∃∃K1,V1. ⬇*[i] L1 ≘ K1.ⓑ{I}V1 & K1 ⪤[R,V1] K2 & R K1 V1 V2.
 #R #L1 #L2 #i #HL12 #I #K2 #V2 #HLK2 elim (rex_dropable_dx … HL12 … HLK2 … (#0)) -HLK2 -HL12 //
 #Y #HLK1 #HY elim (rex_inv_zero_pair_dx … HY) -HY
 #K1 #V1 #HK12 #HV12 #H destruct /2 width=5 by ex3_2_intro/
 qed-.
 
 lemma rex_inv_lref_pair_bi (R) (L1) (L2) (i):
-                           L1 ⪤[R,#i] L2 →
-                           ∀I1,K1,V1. ⬇*[i] L1 ≘ K1.ⓑ{I1}V1 →
-                           ∀I2,K2,V2. ⬇*[i] L2 ≘ K2.ⓑ{I2}V2 →
-                           ∧∧ K1 ⪤[R,V1] K2 & R K1 V1 V2 & I1 = I2.
+      L1 ⪤[R,#i] L2 →
+      ∀I1,K1,V1. ⬇*[i] L1 ≘ K1.ⓑ{I1}V1 →
+      ∀I2,K2,V2. ⬇*[i] L2 ≘ K2.ⓑ{I2}V2 →
+      ∧∧ K1 ⪤[R,V1] K2 & R K1 V1 V2 & I1 = I2.
 #R #L1 #L2 #i #H12 #I1 #K1 #V1 #H1 #I2 #K2 #V2 #H2
 elim (rex_inv_lref_pair_sn … H12 … H1) -L1 #Y2 #X2 #HLY2 #HK12 #HV12
 lapply (drops_mono … HLY2 … H2) -HLY2 -H2 #H destruct
 /2 width=1 by and3_intro/
 qed-.
 
-lemma rex_inv_lref_unit_sn: ∀R,L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K1. ⬇*[i] L1 ≘ K1.ⓤ{I} →
-                            ∃∃f,K2. ⬇*[i] L2 ≘ K2.ⓤ{I} & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈⦃f⦄.
+lemma rex_inv_lref_unit_sn (R):
+      ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K1. ⬇*[i] L1 ≘ K1.ⓤ{I} →
+      ∃∃f,K2. ⬇*[i] L2 ≘ K2.ⓤ{I} & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈⦃f⦄.
 #R #L1 #L2 #i #HL12 #I #K1 #HLK1 elim (rex_dropable_sn … HLK1 … HL12 (#0)) -HLK1 -HL12 //
 #Y #HY #HLK2 elim (rex_inv_zero_unit_sn … HY) -HY
 #f #K2 #Hf #HK12 #H destruct /2 width=5 by ex3_2_intro/
 qed-.
 
-lemma rex_inv_lref_unit_dx: ∀R,L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K2. ⬇*[i] L2 ≘ K2.ⓤ{I} →
-                            ∃∃f,K1. ⬇*[i] L1 ≘ K1.ⓤ{I} & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈⦃f⦄.
+lemma rex_inv_lref_unit_dx (R):
+      ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K2. ⬇*[i] L2 ≘ K2.ⓤ{I} →
+      ∃∃f,K1. ⬇*[i] L1 ≘ K1.ⓤ{I} & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈⦃f⦄.
 #R #L1 #L2 #i #HL12 #I #K2 #HLK2 elim (rex_dropable_dx … HL12 … HLK2 … (#0)) -HLK2 -HL12 //
 #Y #HLK1 #HY elim (rex_inv_zero_unit_dx … HY) -HY
 #f #K2 #Hf #HK12 #H destruct /2 width=5 by ex3_2_intro/
index 5c7e82b33c2350d5da2d424a0b518feb0b2813f9..601e8b28dcbc6dffc1d5e1946cb43a028d323e70 100644 (file)
@@ -20,13 +20,14 @@ include "static_2/static/rex.ma".
 (* Advanced properties ******************************************************)
 
 (* Basic_2A1: uses: llpx_sn_refl *)
-lemma rex_refl: ∀R. (∀L. reflexive … (R L)) → ∀L,T. L ⪤[R,T] L.
+lemma rex_refl (R): (∀L. reflexive … (R L)) → ∀L,T. L ⪤[R,T] L.
 #R #HR #L #T elim (frees_total L T)
 /4 width=3 by sex_refl, ext2_refl, ex2_intro/
 qed.
 
-lemma rex_pair_refl: ∀R. (∀L. reflexive … (R L)) →
-                     ∀L,V1,V2. R L V1 V2 → ∀I,T. L.ⓑ{I}V1 ⪤[R,T] L.ⓑ{I}V2.
+lemma rex_pair_refl (R):
+      (∀L. reflexive … (R L)) →
+      ∀L,V1,V2. R L V1 V2 → ∀I,T. L.ⓑ{I}V1 ⪤[R,T] L.ⓑ{I}V2.
 #R #HR #L #V1 #V2 #HV12 #I #T
 elim (frees_total (L.ⓑ{I}V1) T) #f #Hf
 elim (pn_split f) * #g #H destruct
@@ -35,15 +36,15 @@ qed.
 
 (* Advanced inversion lemmas ************************************************)
 
-lemma rex_inv_bind_void: ∀R,p,I,L1,L2,V,T. L1 ⪤[R,ⓑ{p,I}V.T] L2 →
-                         L1 ⪤[R,V] L2 ∧ L1.ⓧ ⪤[R,T] L2.ⓧ.
+lemma rex_inv_bind_void (R):
+      ∀p,I,L1,L2,V,T. L1 ⪤[R,ⓑ{p,I}V.T] L2 → L1 ⪤[R,V] L2 ∧ L1.ⓧ ⪤[R,T] L2.ⓧ.
 #R #p #I #L1 #L2 #V #T * #f #Hf #HL elim (frees_inv_bind_void … Hf) -Hf
 /6 width=6 by sle_sex_trans, sex_inv_tl, sor_inv_sle_dx, sor_inv_sle_sn, ex2_intro, conj/
 qed-.
 
 (* Advanced forward lemmas **************************************************)
 
-lemma rex_fwd_bind_dx_void: ∀R,p,I,L1,L2,V,T. L1 ⪤[R,ⓑ{p,I}V.T] L2 →
-                            L1.ⓧ ⪤[R,T] L2.ⓧ.
+lemma rex_fwd_bind_dx_void (R):
+      ∀p,I,L1,L2,V,T. L1 ⪤[R,ⓑ{p,I}V.T] L2 → L1.ⓧ ⪤[R,T] L2.ⓧ.
 #R #p #I #L1 #L2 #V #T #H elim (rex_inv_bind_void … H) -H //
 qed-.
index 1a2829da3c91dde8c3f87e124ee8749686c940c9..7974bb900c8a1233f1139bd1cfd2a4e8f5a083c2 100644 (file)
@@ -30,10 +30,11 @@ definition rex_fsle_compatible: predicate (relation3 …) ≝ λRN.
 
 (* Basic inversions with free variables inclusion for restricted closures ***)
 
-lemma frees_sex_conf: ∀R. rex_fsge_compatible R →
-                      ∀L1,T,f1. L1 ⊢ 𝐅*⦃T⦄ ≘ f1 →
-                      ∀L2. L1 ⪤[cext2 R,cfull,f1] L2 →
-                      ∃∃f2. L2 ⊢ 𝐅*⦃T⦄ ≘ f2 & f2 ⊆ f1.
+lemma frees_sex_conf (R):
+      rex_fsge_compatible R →
+      ∀L1,T,f1. L1 ⊢ 𝐅+⦃T⦄ ≘ f1 →
+      ∀L2. L1 ⪤[cext2 R,cfull,f1] L2 →
+      ∃∃f2. L2 ⊢ 𝐅+⦃T⦄ ≘ f2 & f2 ⊆ f1.
 #R #HR #L1 #T #f1 #Hf1 #L2 #H1L
 lapply (HR L1 L2 T ?) /2 width=3 by ex2_intro/ #H2L
 @(fsle_frees_trans_eq … H2L … Hf1) /3 width=4 by sex_fwd_length, sym_eq/
@@ -42,26 +43,29 @@ qed-.
 (* Properties with free variables inclusion for restricted closures *********)
 
 (* Note: we just need lveq_inv_refl: ∀L, n1, n2. L ≋ⓧ*[n1, n2] L → ∧∧ 0 = n1 & 0 = n2 *)
-lemma fsge_rex_trans: ∀R,L1,T1,T2. ⦃L1,T1⦄ ⊆ ⦃L1,T2⦄ →
-                      ∀L2. L1 ⪤[R,T2] L2 → L1 ⪤[R,T1] L2.
+lemma fsge_rex_trans (R):
+      ∀L1,T1,T2. ⦃L1,T1⦄ ⊆ ⦃L1,T2⦄ →
+      ∀L2. L1 ⪤[R,T2] L2 → L1 ⪤[R,T1] L2.
 #R #L1 #T1 #T2 * #n1 #n2 #f1 #f2 #Hf1 #Hf2 #Hn #Hf #L2 #HL12
 elim (lveq_inj_length … Hn ?) // #H1 #H2 destruct
 /4 width=5 by rex_inv_frees, sle_sex_trans, ex2_intro/
 qed-.
 
-lemma rex_sym: ∀R. rex_fsge_compatible R →
-               (∀L1,L2,T1,T2. R L1 T1 T2 → R L2 T2 T1) →
-               ∀T. symmetric … (rex R T).
+lemma rex_sym (R):
+      rex_fsge_compatible R →
+      (∀L1,L2,T1,T2. R L1 T1 T2 → R L2 T2 T1) →
+      ∀T. symmetric … (rex R T).
 #R #H1R #H2R #T #L1 #L2
 * #f1 #Hf1 #HL12
 elim (frees_sex_conf … Hf1 … HL12) -Hf1 //
 /5 width=5 by sle_sex_trans, sex_sym, cext2_sym, ex2_intro/
 qed-.
 
-lemma rex_pair_sn_split: ∀R1,R2. (∀L. reflexive … (R1 L)) → (∀L. reflexive … (R2 L)) →
-                         rex_fsge_compatible R1 →
-                         ∀L1,L2,V. L1 ⪤[R1,V] L2 → ∀I,T.
-                         ∃∃L. L1 ⪤[R1,②{I}V.T] L & L ⪤[R2,V] L2.
+lemma rex_pair_sn_split (R1) (R2):
+      (∀L. reflexive … (R1 L)) → (∀L. reflexive … (R2 L)) →
+      rex_fsge_compatible R1 →
+      ∀L1,L2,V. L1 ⪤[R1,V] L2 → ∀I,T.
+      ∃∃L. L1 ⪤[R1,②{I}V.T] L & L ⪤[R2,V] L2.
 #R1 #R2 #HR1 #HR2 #HR #L1 #L2 #V * #f #Hf #HL12 * [ #p ] #I #T
 [ elim (frees_total L1 (ⓑ{p,I}V.T)) #g #Hg
   elim (frees_inv_bind … Hg) #y1 #y2 #H #_ #Hy
@@ -77,10 +81,11 @@ elim (frees_sex_conf … Hf … H) -Hf -H
 /4 width=7 by sle_sex_trans, ex2_intro/
 qed-.
 
-lemma rex_flat_dx_split: ∀R1,R2. (∀L. reflexive … (R1 L)) → (∀L. reflexive … (R2 L)) →
-                         rex_fsge_compatible R1 →
-                         ∀L1,L2,T. L1 ⪤[R1,T] L2 → ∀I,V.
-                         ∃∃L. L1 ⪤[R1,ⓕ{I}V.T] L & L ⪤[R2,T] L2.
+lemma rex_flat_dx_split (R1) (R2):
+      (∀L. reflexive … (R1 L)) → (∀L. reflexive … (R2 L)) →
+      rex_fsge_compatible R1 →
+      ∀L1,L2,T. L1 ⪤[R1,T] L2 → ∀I,V.
+      ∃∃L. L1 ⪤[R1,ⓕ{I}V.T] L & L ⪤[R2,T] L2.
 #R1 #R2 #HR1 #HR2 #HR #L1 #L2 #T * #f #Hf #HL12 #I #V
 elim (frees_total L1 (ⓕ{I}V.T)) #g #Hg
 elim (frees_inv_flat … Hg) #y1 #y2 #_ #H #Hy
@@ -93,10 +98,11 @@ elim (frees_sex_conf … Hf … H) -Hf -H
 /4 width=7 by sle_sex_trans, ex2_intro/
 qed-.
 
-lemma rex_bind_dx_split: ∀R1,R2. (∀L. reflexive … (R1 L)) → (∀L. reflexive … (R2 L)) →
-                         rex_fsge_compatible R1 →
-                         ∀I,L1,L2,V1,T. L1.ⓑ{I}V1 ⪤[R1,T] L2 → ∀p.
-                         ∃∃L,V. L1 ⪤[R1,ⓑ{p,I}V1.T] L & L.ⓑ{I}V ⪤[R2,T] L2 & R1 L1 V1 V.
+lemma rex_bind_dx_split (R1) (R2):
+      (∀L. reflexive … (R1 L)) → (∀L. reflexive … (R2 L)) →
+      rex_fsge_compatible R1 →
+      ∀I,L1,L2,V1,T. L1.ⓑ{I}V1 ⪤[R1,T] L2 → ∀p.
+      ∃∃L,V. L1 ⪤[R1,ⓑ{p,I}V1.T] L & L.ⓑ{I}V ⪤[R2,T] L2 & R1 L1 V1 V.
 #R1 #R2 #HR1 #HR2 #HR #I #L1 #L2 #V1 #T * #f #Hf #HL12 #p
 elim (frees_total L1 (ⓑ{p,I}V1.T)) #g #Hg
 elim (frees_inv_bind … Hg) #y1 #y2 #_ #H #Hy
@@ -113,10 +119,11 @@ elim (frees_sex_conf … Hf … H0) -Hf -H0
 /4 width=7 by sle_sex_trans, ex3_2_intro, ex2_intro/
 qed-.
 
-lemma rex_bind_dx_split_void: ∀R1,R2. (∀L. reflexive … (R1 L)) → (∀L. reflexive … (R2 L)) →
-                              rex_fsge_compatible R1 →
-                              ∀L1,L2,T. L1.ⓧ ⪤[R1,T] L2 → ∀p,I,V.
-                              ∃∃L. L1 ⪤[R1,ⓑ{p,I}V.T] L & L.ⓧ ⪤[R2,T] L2.
+lemma rex_bind_dx_split_void (R1) (R2):
+      (∀L. reflexive … (R1 L)) → (∀L. reflexive … (R2 L)) →
+      rex_fsge_compatible R1 →
+      ∀L1,L2,T. L1.ⓧ ⪤[R1,T] L2 → ∀p,I,V.
+      ∃∃L. L1 ⪤[R1,ⓑ{p,I}V.T] L & L.ⓧ ⪤[R2,T] L2.
 #R1 #R2 #HR1 #HR2 #HR #L1 #L2 #T * #f #Hf #HL12 #p #I #V
 elim (frees_total L1 (ⓑ{p,I}V.T)) #g #Hg
 elim (frees_inv_bind_void … Hg) #y1 #y2 #_ #H #Hy
@@ -135,11 +142,10 @@ qed-.
 
 (* Main properties with free variables inclusion for restricted closures ****)
 
-theorem rex_conf: ∀R1,R2.
-                  rex_fsge_compatible R1 →
-                  rex_fsge_compatible R2 →
-                  R_confluent2_rex R1 R2 R1 R2 →
-                  ∀T. confluent2 … (rex R1 T) (rex R2 T).
+theorem rex_conf (R1) (R2):
+        rex_fsge_compatible R1 → rex_fsge_compatible R2 →
+        R_confluent2_rex R1 R2 R1 R2 →
+        ∀T. confluent2 … (rex R1 T) (rex R2 T).
 #R1 #R2 #HR1 #HR2 #HR12 #T #L0 #L1 * #f1 #Hf1 #HL01 #L2 * #f #Hf #HL02
 lapply (frees_mono … Hf1 … Hf) -Hf1 #Hf12
 lapply (sex_eq_repl_back … HL01 … Hf12) -f1 #HL01
@@ -164,10 +170,9 @@ elim (sex_conf … HL01 … HL02) /2 width=3 by ex2_intro/ [ | -HL01 -HL02 ]
 ]
 qed-.
 
-theorem rex_trans_fsle: ∀R1,R2,R3.
-                        rex_fsle_compatible R1 → f_transitive_next R1 R2 R3 →
-                        ∀L1,L,T. L1 ⪤[R1,T] L →
-                        ∀L2. L ⪤[R2,T] L2 → L1 ⪤[R3,T] L2.
+theorem rex_trans_fsle (R1) (R2) (R3):
+        rex_fsle_compatible R1 → f_transitive_next R1 R2 R3 →
+        ∀L1,L,T. L1 ⪤[R1,T] L → ∀L2. L ⪤[R2,T] L2 → L1 ⪤[R3,T] L2.
 #R1 #R2 #R3 #H1R #H2R #L1 #L #T #H
 lapply (H1R … H) -H1R #H0
 cases H -H #f1 #Hf1 #HL1 #L2 * #f2 #Hf2 #HL2
index e9111114255929896a058731097d03ac075c309b..0fa17450bb2ba1348fef64ae14f8b5d5687a82ac 100644 (file)
@@ -50,10 +50,11 @@ lemma rex_unit_length (R): ∀L1,L2. |L1| = |L2| → ∀I. L1.ⓤ{I} ⪤[R,#0] L
 /3 width=3 by rex_unit, sex_length_isid/ qed.
 
 (* Basic_2A1: uses: llpx_sn_lift_le llpx_sn_lift_ge *)
-lemma rex_lifts_bi (R): d_liftable2_sn … lifts R →
-                        ∀L1,L2. |L1| = |L2| → ∀K1,K2,T. K1 ⪤[R,T] K2 →
-                        ∀b,f. ⬇*[b,f] L1 ≘ K1 → ⬇*[b,f] L2 ≘ K2 →
-                        ∀U. ⬆*[f] T ≘ U → L1 ⪤[R,U] L2.
+lemma rex_lifts_bi (R):
+      d_liftable2_sn … lifts R →
+      ∀L1,L2. |L1| = |L2| → ∀K1,K2,T. K1 ⪤[R,T] K2 →
+      ∀b,f. ⬇*[b,f] L1 ≘ K1 → ⬇*[b,f] L2 ≘ K2 →
+      ∀U. ⬆*[f] T ≘ U → L1 ⪤[R,U] L2.
 #R #HR #L1 #L2 #HL12 #K1 #K2 #T * #f1 #Hf1 #HK12 #b #f #HLK1 #HLK2 #U #HTU
 elim (frees_total L1 U) #f2 #Hf2
 lapply (frees_fwd_coafter … Hf2 … HLK1 … HTU … Hf1) -HTU #Hf
@@ -62,11 +63,12 @@ qed-.
 
 (* Inversion lemmas with length for local environment ***********************)
 
-lemma rex_inv_zero_length (R): ∀Y1,Y2. Y1 ⪤[R,#0] Y2 →
-                               ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆
-                                | ∃∃I,L1,L2,V1,V2. L1 ⪤[R,V1] L2 & R L1 V1 V2 &
-                                                   Y1 = L1.ⓑ{I}V1 & Y2 = L2.ⓑ{I}V2
-                                | ∃∃I,L1,L2. |L1| = |L2| & Y1 = L1.ⓤ{I} & Y2 = L2.ⓤ{I}.
+lemma rex_inv_zero_length (R):
+      ∀Y1,Y2. Y1 ⪤[R,#0] Y2 →
+      ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆
+       | ∃∃I,L1,L2,V1,V2. L1 ⪤[R,V1] L2 & R L1 V1 V2 &
+           Y1 = L1.ⓑ{I}V1 & Y2 = L2.ⓑ{I}V2
+       | ∃∃I,L1,L2. |L1| = |L2| & Y1 = L1.ⓤ{I} & Y2 = L2.ⓤ{I}.
 #R #Y1 #Y2 #H elim (rex_inv_zero … H) -H *
 /4 width=9 by sex_fwd_length, ex4_5_intro, ex3_3_intro, or3_intro2, or3_intro1, or3_intro0, conj/
 qed-.
index d031d93c40aefb5dc4d595e70cc67f99c3a764e6..dd074c1c4014d02ac83238b370507274630d2f87 100644 (file)
@@ -20,7 +20,8 @@ include "static_2/static/req.ma".
 
 (* Properties with generic extension of a context-sensitive relation ********)
 
-lemma rex_lex: ∀R,L1,L2. L1 ⪤[R] L2 → ∀T. L1 ⪤[R,T] L2.
+lemma rex_lex (R):
+      ∀L1,L2. L1 ⪤[R] L2 → ∀T. L1 ⪤[R,T] L2.
 #R #L1 #L2 * #f #Hf #HL12 #T
 elim (frees_total L1 T) #g #Hg
 /4 width=5 by sex_sdj, sdj_isid_sn, ex2_intro/
@@ -28,10 +29,10 @@ qed.
 
 (* Inversion lemmas with generic extension of a context sensitive relation **)
 
-lemma rex_inv_lex_req: ∀R. c_reflexive … R →
-                       rex_fsge_compatible R →
-                       ∀L1,L2,T. L1 ⪤[R,T] L2 →
-                       ∃∃L. L1 ⪤[R] L & L ≡[T] L2.
+lemma rex_inv_lex_req (R):
+      c_reflexive … R → rex_fsge_compatible R →
+      ∀L1,L2,T. L1 ⪤[R,T] L2 →
+      ∃∃L. L1 ⪤[R] L & L ≡[T] L2.
 #R #H1R #H2R #L1 #L2 #T * #f1 #Hf1 #HL
 elim (sex_sdj_split … ceq_ext … HL 𝐈𝐝 ?) -HL
 [ #L0 #HL10 #HL02 |*: /2 width=1 by ext2_refl, sdj_isid_dx/ ] -H1R
index 7bbf5d895c78ec40deb9590ef4258c52b38ae4d9..10d2b917818dfc203f18690de3a75206fd1a4a17 100644 (file)
@@ -20,16 +20,18 @@ include "static_2/static/rex.ma".
 
 (* Advanced inversion lemmas ************************************************)
 
-lemma rex_inv_frees: ∀R,L1,L2,T. L1 ⪤[R,T] L2 →
-                     ∀f. L1 ⊢ 𝐅*⦃T⦄ ≘ f → L1 ⪤[cext2 R,cfull,f] L2.
+lemma rex_inv_frees (R):
+      ∀L1,L2,T. L1 ⪤[R,T] L2 →
+      ∀f. L1 ⊢ 𝐅+⦃T⦄ ≘ f → L1 ⪤[cext2 R,cfull,f] L2.
 #R #L1 #L2 #T * /3 width=6 by frees_mono, sex_eq_repl_back/
 qed-.
 
 (* Advanced properties ******************************************************)
 
 (* Basic_2A1: uses: llpx_sn_dec *)
-lemma rex_dec: ∀R. (∀L,T1,T2. Decidable (R L T1 T2)) →
-               ∀L1,L2,T. Decidable (L1 ⪤[R,T] L2).
+lemma rex_dec (R):
+      (∀L,T1,T2. Decidable (R L T1 T2)) →
+      ∀L1,L2,T. Decidable (L1 ⪤[R,T] L2).
 #R #HR #L1 #L2 #T
 elim (frees_total L1 T) #f #Hf
 elim (sex_dec (cext2 R) cfull … L1 L2 f)
@@ -39,25 +41,23 @@ qed-.
 (* Main properties **********************************************************)
 
 (* Basic_2A1: uses: llpx_sn_bind llpx_sn_bind_O *)
-theorem rex_bind: ∀R,p,I,L1,L2,V1,V2,T.
-                  L1 ⪤[R,V1] L2 → L1.ⓑ{I}V1 ⪤[R,T] L2.ⓑ{I}V2 →
-                  L1 ⪤[R,ⓑ{p,I}V1.T] L2.
+theorem rex_bind (R) (p) (I):
+        ∀L1,L2,V1,V2,T. L1 ⪤[R,V1] L2 → L1.ⓑ{I}V1 ⪤[R,T] L2.ⓑ{I}V2 →
+        L1 ⪤[R,ⓑ{p,I}V1.T] L2.
 #R #p #I #L1 #L2 #V1 #V2 #T * #f1 #HV #Hf1 * #f2 #HT #Hf2
 lapply (sex_fwd_bind … Hf2) -Hf2 #Hf2 elim (sor_isfin_ex f1 (⫱f2))
 /3 width=7 by frees_fwd_isfin, frees_bind, sex_join, isfin_tl, ex2_intro/
 qed.
 
 (* Basic_2A1: llpx_sn_flat *)
-theorem rex_flat: ∀R,I,L1,L2,V,T.
-                  L1 ⪤[R,V] L2 → L1 ⪤[R,T] L2 →
-                  L1 ⪤[R,ⓕ{I}V.T] L2.
+theorem rex_flat (R) (I):
+        ∀L1,L2,V,T. L1 ⪤[R,V] L2 → L1 ⪤[R,T] L2 → L1 ⪤[R,ⓕ{I}V.T] L2.
 #R #I #L1 #L2 #V #T * #f1 #HV #Hf1 * #f2 #HT #Hf2 elim (sor_isfin_ex f1 f2)
 /3 width=7 by frees_fwd_isfin, frees_flat, sex_join, ex2_intro/
 qed.
 
-theorem rex_bind_void: ∀R,p,I,L1,L2,V,T.
-                       L1 ⪤[R,V] L2 → L1.ⓧ ⪤[R,T] L2.ⓧ →
-                       L1 ⪤[R,ⓑ{p,I}V.T] L2.
+theorem rex_bind_void (R) (p) (I):
+        ∀L1,L2,V,T. L1 ⪤[R,V] L2 → L1.ⓧ ⪤[R,T] L2.ⓧ → L1 ⪤[R,ⓑ{p,I}V.T] L2.
 #R #p #I #L1 #L2 #V #T * #f1 #HV #Hf1 * #f2 #HT #Hf2
 lapply (sex_fwd_bind … Hf2) -Hf2 #Hf2 elim (sor_isfin_ex f1 (⫱f2))
 /3 width=7 by frees_fwd_isfin, frees_bind_void, sex_join, isfin_tl, ex2_intro/
@@ -66,24 +66,27 @@ qed.
 (* Negated inversion lemmas *************************************************)
 
 (* Basic_2A1: uses: nllpx_sn_inv_bind nllpx_sn_inv_bind_O *)
-lemma rnex_inv_bind: ∀R. (∀L,T1,T2. Decidable (R L T1 T2)) →
-                     ∀p,I,L1,L2,V,T. (L1 ⪤[R,ⓑ{p,I}V.T] L2 → ⊥) →
-                     (L1 ⪤[R,V] L2 → ⊥) ∨ (L1.ⓑ{I}V ⪤[R,T] L2.ⓑ{I}V → ⊥).
+lemma rnex_inv_bind (R):
+      (∀L,T1,T2. Decidable (R L T1 T2)) →
+      ∀p,I,L1,L2,V,T. (L1 ⪤[R,ⓑ{p,I}V.T] L2 → ⊥) →
+      ∨∨ (L1 ⪤[R,V] L2 → ⊥) | (L1.ⓑ{I}V ⪤[R,T] L2.ⓑ{I}V → ⊥).
 #R #HR #p #I #L1 #L2 #V #T #H elim (rex_dec … HR L1 L2 V)
 /4 width=2 by rex_bind, or_intror, or_introl/
 qed-.
 
 (* Basic_2A1: uses: nllpx_sn_inv_flat *)
-lemma rnex_inv_flat: ∀R. (∀L,T1,T2. Decidable (R L T1 T2)) →
-                     ∀I,L1,L2,V,T. (L1 ⪤[R,ⓕ{I}V.T] L2 → ⊥) →
-                     (L1 ⪤[R,V] L2 → ⊥) ∨ (L1 ⪤[R,T] L2 → ⊥).
+lemma rnex_inv_flat (R):
+      (∀L,T1,T2. Decidable (R L T1 T2)) →
+      ∀I,L1,L2,V,T. (L1 ⪤[R,ⓕ{I}V.T] L2 → ⊥) →
+      ∨∨ (L1 ⪤[R,V] L2 → ⊥) | (L1 ⪤[R,T] L2 → ⊥).
 #R #HR #I #L1 #L2 #V #T #H elim (rex_dec … HR L1 L2 V)
 /4 width=1 by rex_flat, or_intror, or_introl/
 qed-.
 
-lemma rnex_inv_bind_void: ∀R. (∀L,T1,T2. Decidable (R L T1 T2)) →
-                          ∀p,I,L1,L2,V,T. (L1 ⪤[R,ⓑ{p,I}V.T] L2 → ⊥) →
-                          (L1 ⪤[R,V] L2 → ⊥) ∨ (L1.ⓧ ⪤[R,T] L2.ⓧ → ⊥).
+lemma rnex_inv_bind_void (R):
+      (∀L,T1,T2. Decidable (R L T1 T2)) →
+      ∀p,I,L1,L2,V,T. (L1 ⪤[R,ⓑ{p,I}V.T] L2 → ⊥) →
+      ∨∨ (L1 ⪤[R,V] L2 → ⊥) | (L1.ⓧ ⪤[R,T] L2.ⓧ → ⊥).
 #R #HR #p #I #L1 #L2 #V #T #H elim (rex_dec … HR L1 L2 V)
 /4 width=2 by rex_bind_void, or_intror, or_introl/
 qed-.
index 2df44f0d2605a91563c6199fcc6f34e134fa0da5..3793e689647562b50ef857abf3a0393cb060d1bd 100644 (file)
@@ -45,8 +45,8 @@ table {
         ]
         [ { "context-sensitive free variables" * } {
              [ [ "inclusion for restricted closures" ] "fsle" + "( ⦃?,?⦄ ⊆ ⦃?,?⦄ )" "fsle_length" + "fsle_drops" + "fsle_fqup" + "fsle_fsle" * ]
-             [ [ "restricted refinement for lenvs" ] "lsubf" + "( ⦃?,?⦄ ⫃𝐅* ⦃?,?⦄ )" "lsubf_lsubr" + "lsubf_frees" + "lsubf_lsubf" * ]
-             [ [ "for terms" ] "frees" + "( ? ⊢ 𝐅*⦃?⦄ ≘ ? )" "frees_append" + "frees_drops" + "frees_fqup" + "frees_frees" * ]
+             [ [ "restricted refinement for lenvs" ] "lsubf" + "( ⦃?,?⦄ ⫃𝐅+ ⦃?,?⦄ )" "lsubf_lsubr" + "lsubf_frees" + "lsubf_lsubf" * ]
+             [ [ "for terms" ] "frees" + "( ? ⊢ 𝐅+⦃?⦄ ≘ ? )" "frees_append" + "frees_drops" + "frees_fqup" + "frees_frees" * ]
           }
         ]
         [ { "local environments" * } {
@@ -58,8 +58,8 @@ table {
    class "grass"
    [ { "s-computation" * } {
         [ { "iterated structural successor" * } {
-             [ [ "for closures" ] "fqus" + "( â¦\83?,?,?â¦\84 â\8a\90*[?] â¦\83?,?,?â¦\84 )" + "( â¦\83?,?,?â¦\84 â\8a\90* ⦃?,?,?⦄ )" "fqus_weight" + "fqus_drops" + "fqus_fqup" + "fqus_fqus" * ]
-             [ [ "proper for closures" ] "fqup" + "( â¦\83?,?,?â¦\84 â\8a\90+[?] â¦\83?,?,?â¦\84 )" + "( â¦\83?,?,?â¦\84 â\8a\90+ ⦃?,?,?⦄ )" "fqup_weight" + "fqup_drops" + "fqup_fqup" * ]
+             [ [ "for closures" ] "fqus" + "( â¦\83?,?,?â¦\84 â¬\82*[?] â¦\83?,?,?â¦\84 )" + "( â¦\83?,?,?â¦\84 â¬\82* ⦃?,?,?⦄ )" "fqus_weight" + "fqus_drops" + "fqus_fqup" + "fqus_fqus" * ]
+             [ [ "proper for closures" ] "fqup" + "( â¦\83?,?,?â¦\84 â¬\82+[?] â¦\83?,?,?â¦\84 )" + "( â¦\83?,?,?â¦\84 â¬\82+ ⦃?,?,?⦄ )" "fqup_weight" + "fqup_drops" + "fqup_fqup" * ]
           }
         ]
      }
@@ -67,8 +67,8 @@ table {
    class "yellow"
    [ { "s-transition" * } {
         [ { "structural successor" * } {
-             [ [ "for closures" ] "fquq" + "( â¦\83?,?,?â¦\84 â\8a\90⸮[?] â¦\83?,?,?â¦\84 )" + "( â¦\83?,?,?â¦\84 â\8a\90⸮ ⦃?,?,?⦄ )" "fquq_length" + "fquq_weight" * ]
-             [ [ "proper for closures" ] "fqu" + "( â¦\83?,?,?â¦\84 â\8a\90[?] â¦\83?,?,?â¦\84 )" + "( â¦\83?,?,?â¦\84 â\8a\90 ⦃?,?,?⦄ )" "fqu_length" + "fqu_weight" + "fqu_tdeq" * ]
+             [ [ "for closures" ] "fquq" + "( â¦\83?,?,?â¦\84 â¬\82⸮[?] â¦\83?,?,?â¦\84 )" + "( â¦\83?,?,?â¦\84 â¬\82⸮ ⦃?,?,?⦄ )" "fquq_length" + "fquq_weight" * ]
+             [ [ "proper for closures" ] "fqu" + "( â¦\83?,?,?â¦\84 â¬\82[?] â¦\83?,?,?â¦\84 )" + "( â¦\83?,?,?â¦\84 â¬\82 ⦃?,?,?⦄ )" "fqu_length" + "fqu_weight" + "fqu_tdeq" * ]
           }
         ]
      }
index ead63683a9190738ab7ec0404881924c2eed9cc4..fccf048706cc00d8e3164dd43348c74e28491e1e 100644 (file)
@@ -1514,10 +1514,10 @@ let predefined_classes = [
  ["-"; "÷"; "⊢"; "⊩"; "⧟"; "⊟"; ];
  ["="; "≝"; "≡"; "≘"; "≗"; "≐"; "≑"; "≛"; "≚"; "≙"; "⌆"; "⧦"; "⊜"; "≋"; "⩳"; "≅"; "⩬"; "≂"; "≃"; "≈"; ];  
  ["→"; "⥲"; "↦"; "⇝"; "⤞"; "⇾"; "⤍"; "⤏"; "⤳"; ] ;
- ["⇒"; "⤇"; "➾"; "⇨"; "➡"; "⬈"; "➤"; "➸"; "⇉"; "⥰"; ] ;
+ ["â\87\92"; "â¤\87"; "â\9e¾"; "â\87¨"; "â¬\80"; "â\9e¡"; "â¬\88"; "â\9e¤"; "â\9e¸"; "â\87\89"; "⥰"; ] ;
  ["^"; "↑"; "⇡"; ] ;
  ["⇑"; "⇧"; "⬆"; ] ; 
- ["⇓"; "⇩"; "⬇"; "⬊"; "➷"; ] ;
+ ["â\87\93"; "â\87©"; "â¬\82"; "â¬\87"; "â¬\8a"; "â\9e·"; ] ;
  ["⇕"; "⇳"; "⬍"; "↕"; ];
  ["↔"; "⇔"; "⬄"; "⬌"; ] ; 
  ["≤"; "≲"; "≼"; "≰"; "≴"; "⋠"; "⊆"; "⫃"; "⊑"; ] ;