]> matita.cs.unibo.it Git - helm.git/commitdiff
update in delayed_updating
authorFerruccio Guidi <ferruccio.guidi@unibo.it>
Mon, 6 Dec 2021 19:45:59 +0000 (20:45 +0100)
committerFerruccio Guidi <ferruccio.guidi@unibo.it>
Mon, 6 Dec 2021 19:45:59 +0000 (20:45 +0100)
+ wip on predicate for bdd terms
+ updated notation
+ additions to lists

18 files changed:
matita/matita/contribs/lambdadelta/delayed_updating/notation/functions/at_2.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/notation/functions/comma_2.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/notation/functions/hash_1.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/notation/functions/lamda_1.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/notation/functions/nodelabel_d_1.ma
matita/matita/contribs/lambdadelta/delayed_updating/notation/functions/phi_2.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/notation/functions/semicolon_2.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/in_predicate_d_phi_1.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/up_arrow_epsilon_2.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/up_down_arrow_epsilon_2.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/syntax/bdd_term.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/syntax/label.ma
matita/matita/contribs/lambdadelta/delayed_updating/syntax/path.ma
matita/matita/contribs/lambdadelta/delayed_updating/syntax/term.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/syntax/term_constructors.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/ground/lib/list_append.ma
matita/matita/contribs/lambdadelta/ground/lib/list_rcons.ma
matita/matita/predefined_virtuals.ml

diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/notation/functions/at_2.ma b/matita/matita/contribs/lambdadelta/delayed_updating/notation/functions/at_2.ma
new file mode 100644 (file)
index 0000000..e08c4ea
--- /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 DELAYED UPDATING ********************************************)
+
+notation "hvbox( @ break term 76 u. break term 75 t )"
+  non associative with precedence 75
+  for @{ 'At $u $t }.
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/notation/functions/comma_2.ma b/matita/matita/contribs/lambdadelta/delayed_updating/notation/functions/comma_2.ma
new file mode 100644 (file)
index 0000000..f2f318d
--- /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 DELAYED UPDATING ********************************************)
+
+notation "hvbox( hd , break tl )"
+  right associative with precedence 50
+  for @{ 'Comma $hd $tl }.
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/notation/functions/hash_1.ma b/matita/matita/contribs/lambdadelta/delayed_updating/notation/functions/hash_1.ma
new file mode 100644 (file)
index 0000000..8d85b35
--- /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 DELAYED UPDATING ********************************************)
+
+notation "hvbox( # break term 90 n )"
+  non associative with precedence 75
+  for @{ 'Hash $n }.
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/notation/functions/lamda_1.ma b/matita/matita/contribs/lambdadelta/delayed_updating/notation/functions/lamda_1.ma
new file mode 100644 (file)
index 0000000..379a909
--- /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 DELAYED UPDATING ********************************************)
+
+notation "hvbox( š›Œ . break term 75 t )"
+  non associative with precedence 75
+  for @{ 'Lamda $t }.
index 8412e58e433e73a7fb1be743d4a192a48b4a212e..919edaa640cbc25c30c12a598ed9753308bfd488 100644 (file)
@@ -12,7 +12,7 @@
 (*                                                                        *)
 (**************************************************************************)
 
-(* GROUND NOTATION **********************************************************)
+(* NOTATION FOR DELAYED UPDATING ********************************************)
 
 notation "hvbox( š—±āØ break term 46 a ā© )"
   non associative with precedence 75
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/notation/functions/phi_2.ma b/matita/matita/contribs/lambdadelta/delayed_updating/notation/functions/phi_2.ma
new file mode 100644 (file)
index 0000000..7d04cc3
--- /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 DELAYED UPDATING ********************************************)
+
+notation "hvbox( š›— break term 76 n. break term 75 t )"
+  non associative with precedence 75
+  for @{ 'Phi $n $t }.
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/notation/functions/semicolon_2.ma b/matita/matita/contribs/lambdadelta/delayed_updating/notation/functions/semicolon_2.ma
new file mode 100644 (file)
index 0000000..81c4759
--- /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 DELAYED UPDATING ********************************************)
+
+notation "hvbox( hd ; break tl )"
+  right associative with precedence 47
+  for @{ 'Semicolon $hd $tl }.
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/in_predicate_d_phi_1.ma b/matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/in_predicate_d_phi_1.ma
new file mode 100644 (file)
index 0000000..7942fed
--- /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 DELAYED UPDATING ********************************************)
+
+notation "hvbox( t Ļµ break šƒš›— )"
+  non associative with precedence 45
+  for @{ 'InPredicateDPhi $t }.
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/up_arrow_epsilon_2.ma b/matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/up_arrow_epsilon_2.ma
new file mode 100644 (file)
index 0000000..1c4f842
--- /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 DELAYED UPDATING ********************************************)
+
+notation "hvbox( p Ļµā–µ break term 46 t )"
+  non associative with precedence 45
+  for @{ 'UpArrowEpsilon $p $t }.
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/up_down_arrow_epsilon_2.ma b/matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/up_down_arrow_epsilon_2.ma
new file mode 100644 (file)
index 0000000..ffef611
--- /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 DELAYED UPDATING ********************************************)
+
+notation "hvbox( p Ļµā¬¦ break term 46 t )"
+  non associative with precedence 45
+  for @{ 'UpDownArrowEpsilon $p $t }.
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/syntax/bdd_term.ma b/matita/matita/contribs/lambdadelta/delayed_updating/syntax/bdd_term.ma
new file mode 100644 (file)
index 0000000..5052f4c
--- /dev/null
@@ -0,0 +1,105 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||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 "ground/xoa/or_5.ma".
+include "ground/xoa/ex_3_1.ma".
+include "ground/xoa/ex_4_2.ma".
+include "ground/xoa/ex_4_3.ma".
+include "ground/xoa/ex_5_3.ma".
+include "delayed_updating/syntax/term_constructors.ma".
+include "delayed_updating/notation/relations/in_predicate_d_phi_1.ma".
+
+(* BY-DEPTH DELAYED (BDD) TERM **********************************************)
+
+inductive bdd: predicate term ā‰
+| bdd_oref: āˆ€n. bdd #n
+| bdd_iref: āˆ€t,n. bdd t ā†’ bdd š›—n.t
+| bdd_abst: āˆ€t. bdd t ā†’ bdd š›Œ.t
+| bdd_appl: āˆ€u,t. bdd u ā†’ bdd t ā†’ bdd @u.t
+.
+
+interpretation
+  "well-formed by-depth delayed (term)"
+  'InPredicateDPhi t = (bdd t).
+
+(* Basic destructions *******************************************************)
+
+lemma bdd_inv_in_com_gen:
+      āˆ€t,p. t Ļµ šƒš›— ā†’ p Ļµā¬¦ t ā†’
+      āˆØāˆØ āˆƒāˆƒn. #n = t & š—±āØnā©;šž = p
+       | āˆƒāˆƒu,q,n. u Ļµ šƒš›— & q Ļµā¬¦ u & š›—n.u = t & š—±āØnā©;q = p
+       | āˆƒāˆƒu,q. u Ļµ šƒš›— & q Ļµā¬¦ u & š›Œ.u = t & š—Ÿ;q = p
+       | āˆƒāˆƒv,u,q. v Ļµ šƒš›— & u Ļµ šƒš›— & q Ļµā¬¦ u & @v.u = t & š—”;q = p
+       | āˆƒāˆƒv,u,q. v Ļµ šƒš›— & u Ļµ šƒš›— & q Ļµā¬¦ v & @v.u = t & š—¦;q = p
+.
+#t #p *
+[ #n * /3 width=3 by or5_intro0, ex2_intro/
+| #u #n #Hu * #q #Hq #Hp /3 width=7 by ex4_3_intro, or5_intro1/
+| #u #Hu * #q #Hq #Hp /3 width=6 by or5_intro2, ex4_2_intro/
+| #v #u #Hv #Hu * * #q #Hq #Hp /3 width=8 by ex5_3_intro, or5_intro3, or5_intro4/
+]
+qed-.
+
+lemma bdd_inv_in_com_d:
+      āˆ€t,q,n. t Ļµ šƒš›— ā†’ š—±āØnā©;q Ļµā¬¦ t ā†’
+      āˆØāˆØ āˆ§āˆ§ #n = t & šž = q
+       | āˆƒāˆƒu. u Ļµ šƒš›— & q Ļµā¬¦ u & š›—n.u = t
+.
+#t #q #n #Ht #Hq
+elim (bdd_inv_in_com_gen ā€¦ Ht Hq) -Ht -Hq *
+[ #n0 #H1 #H2 destruct /3 width=1 by or_introl, conj/
+| #u0 #q0 #n0 #Hu0 #Hq0 #H1 #H2 destruct /3 width=4 by ex3_intro, or_intror/
+| #u0 #q0 #_ #_ #_ #H0 destruct
+| #v0 #u0 #q0 #_ #_ #_ #_ #H0 destruct
+| #v0 #u0 #q0 #_ #_ #_ #_ #H0 destruct
+]
+qed-.
+
+lemma bdd_inv_in_ini_d:
+      āˆ€t,q,n. t Ļµ šƒš›— ā†’ š—±āØnā©;q Ļµā–µ t ā†’
+      āˆØāˆØ āˆ§āˆ§ #n = t & šž = q
+       | āˆƒāˆƒu. u Ļµ šƒš›— & q Ļµā–µ u & š›—n.u = t
+.
+#t #q #n #Ht * #r #Hq
+elim (bdd_inv_in_com_d ā€¦ Ht Hq) -Ht -Hq *
+[ #H1 #H2
+  elim (eq_inv_list_empty_append ā€¦ H2) -H2 #H2 #_ destruct
+  /3 width=1 by or_introl, conj/
+| #u #Hu #Hq #H1 destruct
+  /4 width=4 by ex3_intro, ex_intro, or_intror/
+]
+qed-.
+
+lemma pippo:
+      āˆ€l,n,p,t. t Ļµ šƒš›— ā†’ p,š—±āØnā© Ļµā–µ t ā†’ p,l Ļµā–µ t ā†’ š—±āØnā© = l.
+#l #n #p elim p -p
+[ #t #Ht <list_cons_comm <list_cons_comm #Hn #Hl
+  elim (bdd_inv_in_ini_d ā€¦ Ht Hn) -Ht -Hn *
+  [ #H1 #_ destruct
+    elim (term_in_ini_inv_lcons_oref ā€¦ Hl) -Hl //
+  | #u #_ #_ #H1 destruct
+    elim (term_in_ini_inv_lcons_iref ā€¦ Hl) -Hl //
+  ]
+| * [ #m ] #p #IH #t #Ht
+  <list_cons_shift <list_cons_shift #Hn #Hl
+  [ elim (bdd_inv_in_ini_d ā€¦ Ht Hn) -Ht -Hn *
+    [ #_ #H
+      elim (eq_inv_list_empty_rcons ??? H)
+    | #u #Hu #Hp #H destruct
+      elim (term_in_ini_inv_lcons_iref ā€¦ Hl) -Hl #_ #Hl
+      @(IH ā€¦ Hu) //
+    ]
+  |
+  ]
+]
index 1241db40aaa5bcdf36dc27d461ce6f29ac6e40c5..bdeaa9c20102004b337e6d4e264baa51ade8da92 100644 (file)
@@ -27,8 +27,6 @@ inductive label: Type[0] ā‰
 | label_edge_s: label
 .
 
-coercion label_node_d.
-
 interpretation
   "variable reference by depth (label)"
   'NodeLabelD p = (label_node_d p).
index 69355961ccf67b1047f9a68066ecba2f38bb9917..a7d5e32c15e1c9dd15cdf81d2b5bfbac482f6bf2 100644 (file)
 (*                                                                        *)
 (**************************************************************************)
 
-include "ground/lib/list.ma".
-include "delayed_updating/notation/functions/element_e_0.ma".
+include "ground/lib/list_rcons.ma".
+include "ground/notation/functions/element_e_0.ma".
+include "ground/notation/functions/double_semicolon_2.ma".
 include "delayed_updating/syntax/label.ma".
+include "delayed_updating/notation/functions/semicolon_2.ma".
+include "delayed_updating/notation/functions/comma_2.ma".
+
 
 (* PATH *********************************************************************)
 
@@ -22,4 +26,16 @@ definition path ā‰ list label.
 
 interpretation
   "empty (paths)"
-  'ElementE = (list_nil label).
+  'ElementE = (list_empty label).
+
+interpretation
+  "left cons (paths)"
+  'Semicolon l p = (list_lcons label l p).
+
+interpretation
+  "append (paths)"
+  'DoubleSemicolon l1 l2 = (list_append label l1 l2).
+
+interpretation
+  "right cons (paths)"
+  'Comma p l = (list_append label p (list_lcons label l (list_empty label))).
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/syntax/term.ma b/matita/matita/contribs/lambdadelta/delayed_updating/syntax/term.ma
new file mode 100644 (file)
index 0000000..98a8dbd
--- /dev/null
@@ -0,0 +1,42 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||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 "delayed_updating/syntax/path.ma".
+include "delayed_updating/notation/relations/up_down_arrow_epsilon_2.ma".
+include "delayed_updating/notation/relations/up_arrow_epsilon_2.ma".
+
+(* TERM *********************************************************************)
+
+definition term: Type[0] ā‰ predicate path.
+
+definition term_in_com: relation2 path term ā‰
+           Ī»p,t. t p.
+
+interpretation
+  "belongs to complete (term)"
+  'UpDownArrowEpsilon p t = (term_in_com p t).
+
+definition term_in_ini: relation2 path term ā‰
+           Ī»p,t. āˆƒq. p;;q Ļµā¬¦ t.
+
+interpretation
+  "belongs to initial (term)"
+  'UpArrowEpsilon p t = (term_in_ini p t).
+
+(* Basic constructions ******************************************************)
+
+lemma term_in_com_ini (p) (t):
+      p Ļµā¬¦ t ā†’ p Ļµā–µ t.
+/2 width=2 by ex_intro/
+qed.
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/syntax/term_constructors.ma b/matita/matita/contribs/lambdadelta/delayed_updating/syntax/term_constructors.ma
new file mode 100644 (file)
index 0000000..b05473f
--- /dev/null
@@ -0,0 +1,67 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||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 "delayed_updating/syntax/term.ma".
+include "delayed_updating/notation/functions/hash_1.ma".
+include "delayed_updating/notation/functions/phi_2.ma".
+include "delayed_updating/notation/functions/lamda_1.ma".
+include "delayed_updating/notation/functions/at_2.ma".
+
+(* CONSTRUCTORS FOR TERM ****************************************************)
+
+definition term_node_0 (l): term ā‰
+           Ī»p. l;šž = p.
+
+definition term_node_1 (l): term ā†’ term ā‰
+           Ī»t,p. āˆƒāˆƒq. q Ļµā¬¦ t & l;q = p.
+
+definition term_node_2 (l1) (l2): term ā†’ term ā†’ term ā‰
+           Ī»t1,t2,p.
+           āˆØāˆØ āˆƒāˆƒq. q Ļµā¬¦ t1 & l1;q = p
+            | āˆƒāˆƒq. q Ļµā¬¦ t2 & l2;q = p.
+
+interpretation
+  "outer variable reference by depth (term)"
+  'Hash n = (term_node_0 (label_node_d n)).
+
+interpretation
+  "inner variable reference by depth (term)"
+  'Phi n t = (term_node_1 (label_node_d n) t).
+
+interpretation
+  "name-free functional abstraction (term)"
+  'Lamda t = (term_node_1 label_edge_l t).
+
+interpretation
+  "application (term)"
+  'At u t = (term_node_2 label_edge_s label_edge_a u t).
+
+(* Basic Inversions *********************************************************)
+
+lemma term_in_ini_inv_lcons_oref:
+      āˆ€p,l,n. l;p Ļµā–µ #n ā†’
+      āˆ§āˆ§ š—±āØnā© = l & šž = p.
+#p #l #n * #q
+<list_append_lcons_sn #H destruct -H
+elim (eq_inv_list_empty_append ā€¦ e0) -e0 #H1 #_
+/2 width=1 by conj/
+qed-.
+
+lemma term_in_ini_inv_lcons_iref:
+      āˆ€t,p,l,n. l;p Ļµā–µ š›—n.t ā†’
+      āˆ§āˆ§ š—±āØnā© = l & p Ļµā–µ t.
+#t #p #l #n * #q
+<list_append_lcons_sn * #r #Hr #H1 destruct
+/3 width=2 by ex_intro, conj/
+qed-.
index 13c68a33cb38843ec0f184012af2d3a4a803eac8..05fefceb30a13e1f9fcbd5727f728b7ce11ec1b9 100644 (file)
@@ -56,3 +56,14 @@ lemma list_append_assoc (A):
   ]
 ]
 qed.
+
+(* Basic inversions *********************************************************)
+
+lemma eq_inv_list_empty_append (A):
+      āˆ€l1,l2. ā“” = l1ā؁{A}l2 ā†’
+      āˆ§āˆ§ ā“” = l1 & ā“” = l2.
+#A *
+[ #l2 /2 width=1 by conj/
+| #a1 #l1 #l2 <list_append_lcons_sn #H destruct
+]
+qed-.
index 2cf2e23bf07f662e9563fc2e0dccb9274e1ff8d7..66910e1a90fd775370bb047504a0a521f0108422 100644 (file)
@@ -41,3 +41,11 @@ lemma list_append_rcons_sn (A):
 lemma list_append_rcons_dx (A):
       āˆ€l1,l2,a. l1 ā؁ l2 āØ­ a = l1 ā؁{A} (l2 āØ­ a).
 // qed.
+
+(* Basic inversions *********************************************************)
+
+lemma eq_inv_list_empty_rcons (A):
+      āˆ€l,a. ā“” = lāØ­{A}a ā†’ āŠ„.
+#A #l #a #H
+elim (eq_inv_list_empty_append ā€¦ H) -H #_ #H destruct
+qed-.
index 26a2656e38680b57173338f1ad9081af2affec15..a816099a6c901023d9b2c683d09441fdd7e2b9b3 100644 (file)
@@ -1515,13 +1515,13 @@ let predefined_classes = [
  ["="; "ā‰"; "ā‰”"; "ā‰˜"; "ā‰—"; "ā‰"; "ā‰‘"; "ā‰›"; "ā‰š"; "ā‰™"; "āŒ†"; "ā§¦"; "āŠœ"; "ā‰‹"; "ā©³"; "ā‰…"; "ā©¬"; "ā‰‚"; "ā‰ƒ"; "ā‰ˆ"; ];  
  ["ā†’"; "ā„²"; "ā†¦"; "ā‡"; "ā¤ž"; "ā‡¾"; "ā¤"; "ā¤"; "ā¤³"; ] ;
  ["ā‡’"; "ā¤‡"; "āž¾"; "ā‡Ø"; "ā¬€"; "āž”"; "ā¬ˆ"; "āž¤"; "āžø"; "ā‡‰"; "ā„°"; ] ;
- ["^"; "ā†‘"; "ā‡”"; ] ;
+ ["^"; "ā†‘"; "ā‡”"; "ā†„"; "ā–µ"; ] ;
  ["ā‡‘"; "ā‡§"; "ā¬†"; ] ; 
  ["ā‡“"; "ā‡©"; "ā¬‚"; "ā¬‡"; "ā¬Š"; "āž·"; ] ;
  ["ā‡•"; "ā‡³"; "ā¬"; "ā†•"; ];
  ["ā†”"; "ā‡”"; "ā¬„"; "ā¬Œ"; ] ; 
  ["ā‰¤"; "ā‰²"; "ā‰¼"; "ā‰°"; "ā‰“"; "ā‹ "; "āŠ†"; "ā«ƒ"; "āŠ‘"; ] ;
- ["_"; "ā†“"; "ā†™"; "ā‡£"; "ā‡ƒ"; "ā‡‚"; "āŽ½"; "āŽ¼"; "āŽ»"; "āŽŗ"; ];
+ ["_"; "ā†“"; "ā†™"; "ā‡£"; "ā‡ƒ"; "ā‡‚"; "āŽ½"; "āŽ¼"; "āŽ»"; "āŽŗ"; "ā–æ"; ];
  ["<"; "ā‰ŗ"; "ā‰®"; "āŠ€"; "āŒ©"; "Ā«"; "ā¬"; "ā®"; "ā°"; ] ;
  ["("; "āØ"; "āŖ"; "ā²"; "ļ¼ˆ"; ];
  [")"; "ā©"; "ā«"; "ā³"; "ļ¼‰"; ];
@@ -1530,7 +1530,7 @@ let predefined_classes = [
  ["{"; "ā“"; "ā¦ƒ" ] ;
  ["}"; "āµ"; "ā¦„" ] ;
  ["ā–”"; "ā—½"; "ā–Ŗ"; "ā—¾"; ];
- ["ā—Š"; "ā™¢"; "ā§«"; "ā™¦"; "āŸ"; "āŸ "; ] ;
+ ["Ć¢\97\8a"; "Ć¢Ā¬Ā¦"; "Ć¢\99Ā¢"; "Ć¢Ā§Ā«"; "Ć¢\99Ā¦"; "Ć¢\9f\90"; "Ć¢\9fĀ "; ] ;
  [">"; "ā­ƒ"; "ā§"; "āŒŖ"; "Ā»"; "ā­"; "āÆ"; "ā±"; "ā–ø"; "ā–ŗ"; "ā–¶"; "āŠƒ"; "āŠ"; ] ;
  ["ā‰„"; "āŖ€"; "ā‰½"; "āŖ“"; "ā„ø"; "āŠ’"; ]; 
  ["āˆØ"; "ā©–"; "āˆŖ"; "āˆ©"; "ā‹“"; "ā‹’" ] ;
@@ -1544,7 +1544,7 @@ let predefined_classes = [
  ["D"; "Ī”"; "š”»"; "ā……"; "šƒ"; "šš«"; "ā’¹"; "š——"; ] ;
  ["e"; "ɛ"; "Īµ"; "Ļµ"; "Š„"; "ā„Æ"; "š•–"; "ā…‡"; "šž"; "š›†"; "š›œ"; "ā“”"; ] ;
  ["E"; "ā„°"; "š”¼"; "š„"; "ā’ŗ"; ] ;
- ["f"; "Ļ†"; "Ļˆ"; "Ļ•"; "ā؍"; "š•—"; "šŸ"; "š›Ÿ"; "š›™"; "ā“•"; ] ;
+ ["f"; "Ə\86"; "Ə\88"; "Ə\95"; "Ć¢ĀØ\8d"; "Ć°\9d\95\97"; "Ć°\9d\90\9f"; "Ć°\9d\9b\97"; "Ć°\9d\9b\9f"; "Ć°\9d\9b\99"; "Ć¢\93\95"; ] ;
  ["F"; "Ī¦"; "ĪØ"; "ā„±"; "š”½"; "š…"; "šš½"; "ššæ"; "ā’»"; "š—™"; ] ;
  ["g"; "Ī³"; "ā„Š"; "š•˜"; "š "; "š›„"; "ā“–"; ] ;
  ["G"; "Ī“"; "š”¾"; "š†"; "ššŖ"; "ā’¼"; ] ;