Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  DeBruijn.thy

  Sprache: Isabelle
 

theory DeBruijn
  imports Syntax
begin
  
subsectionDe Bruijn indices

textFunctions to find the free $\lambda$ and $\mu$ variables in an expression.

primrec flv_trm :: "trm ==> nat ==> nat set"
    and flv_cmd :: "cmd ==> nat ==> nat set"
where
    "flv_trm (`i) k = (if ik then {i-k} else {})"
  | "flv_trm (λ T : t) k = flv_trm t (k+1)"
  | "flv_trm (s🍋t) k = (flv_trm s k) (flv_trm t k)"
  | "flv_trm (μ T : c) k = flv_cmd c k"
  | "flv_cmd (<i> t) k = flv_trm t k"
    
primrec fmv_trm :: "trm ==> nat ==> nat set"
    and fmv_cmd :: "cmd ==> nat ==> nat set"
where
    "fmv_trm (`i) k = {}"
  | "fmv_trm (λ T : t) k = fmv_trm t k"
  | "fmv_trm (s🍋t) k = (fmv_trm s k) (fmv_trm t k)"
  | "fmv_trm (μ T : c) k = fmv_cmd c (k+1)"
  | "fmv_cmd (<i> t) k = (if ik then {i-k} (fmv_trm t k) else (fmv_trm t k))"
    
abbreviation lambda_closed :: "_" where
  "lambda_closed t flv_trm t 0 = {}"
  
abbreviation lambda_closedC :: "_" where
  "lambda_closedC c flv_cmd c 0 = {}"
    
textFree variables in a context.
  
primrec fmv_ctxt :: "ctxt ==> nat ==> nat set" where
    "fmv_ctxt k = {}"
  | "fmv_ctxt (E \<bullet> t) k = (fmv_ctxt E k) (fmv_trm t k)"     

textShift free $\lambda$ and $\mu$ variables in terms and commands to make substitution capture avoiding.    
    
primrec
  liftL_trm :: "[trm, nat] ==> trm" and
  liftL_cmd :: "[cmd, nat] ==> cmd"
where
  "liftL_trm (`i) k = (if i<k then `i else `(i+1))" |
  "liftL_trm (λ T : t) k = λ T : (liftL_trm t (k+1))" | 
  "liftL_trm (s 🍋 t) k = liftL_trm s k 🍋 liftL_trm t k" |
  "liftL_trm (μ T : c) k = μ T : (liftL_cmd c k)" |
  "liftL_cmd (<i> t) k = <i> (liftL_trm t k)"

primrec
  liftM_trm :: "[trm, nat] ==> trm" and
  liftM_cmd :: "[cmd, nat] ==> cmd"
where
  "liftM_trm (`i) k = `i" |
  "liftM_trm (λ T : t) k = λ T : (liftM_trm t k)" |
  "liftM_trm (s 🍋 t) k = liftM_trm s k 🍋 liftM_trm t k" |
  "liftM_trm (μ T : c) k = μ T : (liftM_cmd c (k+1))" |
  "liftM_cmd (<i> t) k =
      (if i<k then (<i> (liftM_trm t k)) else (<i+1> (liftM_trm t k)))"
  
textShift free $\lambda$ and $\mu$ variables in contexts to make structural substitution capture avoiding.
  
primrec liftL_ctxt :: "ctxt ==> nat ==> ctxt" where
  "liftL_ctxt n = " |
  "liftL_ctxt (E \<bullet> t) n = (liftL_ctxt E n) \<bullet> (liftL_trm t n)"

primrec liftM_ctxt :: "ctxt ==> nat ==> ctxt" where
  "liftM_ctxt n = " |
  "liftM_ctxt (E \<bullet> t) n = (liftM_ctxt E n) \<bullet> (liftM_trm t n)"  
  
textA function to decrement the indices of free $\mu$-variables when a $\mu$ surrounding the
 expression disappears as a result of a reduction


primrec
  dropM_trm :: "[trm, nat] ==> trm" and
  dropM_cmd :: "[cmd, nat] ==> cmd"
where
    "dropM_trm (`i) k = `i"
  | "dropM_trm (λ T : t) k = λ T : (dropM_trm t k)"
  | "dropM_trm (s 🍋 t) k = (dropM_trm s k) 🍋 (dropM_trm t k)"
  | "dropM_trm (μ T : c) k = μ T : (dropM_cmd c (k+1))"
  | "dropM_cmd (<i> t) k =
      (if i>k then (<i-1> (dropM_trm t k)) else (<i> (dropM_trm t k)))"
    
lemma fmv_liftL: 
   fmv_trm t n ==> β fmv_trm (liftL_trm t m) n"
   fmv_cmd c n ==> β fmv_cmd (liftL_cmd c m) n"
  by(induct t and c arbitrary: m n and m n) auto

lemma fmv_liftL_ctxt:
   fmv_ctxt E m ==> β fmv_ctxt (liftL_ctxt E n) m"
  by(induct E) (fastforce simp add: fmv_liftL)+
    
lemma fmv_suc:
   fmv_cmd c (Suc n) ==> (Suc β) fmv_cmd c n"
   fmv_trm t (Suc n) ==> (Suc β) fmv_trm t n"
proof (induct c and t arbitrary: n and n)
  case (MVar x1 x2)
  then show ?case
    by clarsimp (metis UnI1 UnI2 diff_Suc_1 diff_Suc_eq_diff_pred diff_commute diff_is_0_eq nat.simps(3) not_less_eq_eq singletonI)
qed (force)+

lemma flv_drop:
  "flv_trm t k = {} flv_trm (dropM_trm t j) k = {}"
  "flv_cmd c k = {} flv_cmd (dropM_cmd c j) k = {}"
  by (induct t and c arbitrary: j k and j k) clarsimp+
    
end

Messung V0.5 in Prozent
C=93 H=99 G=95

¤ Dauer der Verarbeitung: 0.12 Sekunden  (vorverarbeitet am  2026-06-10) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge