src/HOL/Library/Rewrite.thy
changeset 60054 ef4878146485
parent 60047 58e5b16cbd94
child 61383 6762c8445138
equal deleted inserted replaced
60053:0e9895ffab1d 60054:ef4878146485
    14 
    14 
    15 lemma eta_expand:
    15 lemma eta_expand:
    16   fixes f :: "'a::{} \<Rightarrow> 'b::{}"
    16   fixes f :: "'a::{} \<Rightarrow> 'b::{}"
    17   shows "f \<equiv> \<lambda>x. f x" .
    17   shows "f \<equiv> \<lambda>x. f x" .
    18 
    18 
       
    19 lemma rewr_imp:
       
    20   assumes "PROP A \<equiv> PROP B"
       
    21   shows "(PROP A \<Longrightarrow> PROP C) \<equiv> (PROP B \<Longrightarrow> PROP C)"
       
    22   apply (rule Pure.equal_intr_rule)
       
    23   apply (drule equal_elim_rule2[OF assms]; assumption)
       
    24   apply (drule equal_elim_rule1[OF assms]; assumption)
       
    25   done
       
    26 
       
    27 lemma imp_cong_eq:
       
    28   "(PROP A \<Longrightarrow> (PROP B \<Longrightarrow> PROP C) \<equiv> (PROP B' \<Longrightarrow> PROP C')) \<equiv> ((PROP B \<Longrightarrow> PROP A \<Longrightarrow> PROP C) \<equiv> (PROP B' \<Longrightarrow> PROP A \<Longrightarrow> PROP C'))"
       
    29   apply (intro Pure.equal_intr_rule)
       
    30      apply (drule (1) cut_rl; drule Pure.equal_elim_rule1 Pure.equal_elim_rule2; assumption)+
       
    31    apply (drule Pure.equal_elim_rule1 Pure.equal_elim_rule2; assumption)+
       
    32   done
       
    33 
    19 ML_file "cconv.ML"
    34 ML_file "cconv.ML"
    20 ML_file "rewrite.ML"
    35 ML_file "rewrite.ML"
    21 
    36 
    22 end
    37 end