src/HOL/ex/ReflectionEx.thy
changeset 29667 53103fc8ffa3
parent 28866 30cd9d89a0fb
child 29668 33ba3faeaa0e
equal deleted inserted replaced
29549:7187373c6cb1 29667:53103fc8ffa3
   181   "lin_add (C b1, C b2) = C (b1+b2)"
   181   "lin_add (C b1, C b2) = C (b1+b2)"
   182   "lin_add (a,b) = Add a b"
   182   "lin_add (a,b) = Add a b"
   183 lemma lin_add: "Inum (lin_add (t,s)) bs = Inum (Add t s) bs"
   183 lemma lin_add: "Inum (lin_add (t,s)) bs = Inum (Add t s) bs"
   184 apply (induct t s rule: lin_add.induct, simp_all add: Let_def)
   184 apply (induct t s rule: lin_add.induct, simp_all add: Let_def)
   185 apply (case_tac "c1+c2 = 0",case_tac "n1 \<le> n2", simp_all)
   185 apply (case_tac "c1+c2 = 0",case_tac "n1 \<le> n2", simp_all)
   186 by (case_tac "n1 = n2", simp_all add: ring_simps)
   186 by (case_tac "n1 = n2", simp_all add: algebra_simps)
   187 
   187 
   188 consts lin_mul :: "num \<Rightarrow> nat \<Rightarrow> num"
   188 consts lin_mul :: "num \<Rightarrow> nat \<Rightarrow> num"
   189 recdef lin_mul "measure size "
   189 recdef lin_mul "measure size "
   190   "lin_mul (C j) = (\<lambda> i. C (i*j))"
   190   "lin_mul (C j) = (\<lambda> i. C (i*j))"
   191   "lin_mul (CN n c a) = (\<lambda> i. if i=0 then (C 0) else CN n (i*c) (lin_mul a i))"
   191   "lin_mul (CN n c a) = (\<lambda> i. if i=0 then (C 0) else CN n (i*c) (lin_mul a i))"
   192   "lin_mul t = (\<lambda> i. Mul i t)"
   192   "lin_mul t = (\<lambda> i. Mul i t)"
   193 
   193 
   194 lemma lin_mul: "Inum (lin_mul t i) bs = Inum (Mul i t) bs"
   194 lemma lin_mul: "Inum (lin_mul t i) bs = Inum (Mul i t) bs"
   195 by (induct t arbitrary: i rule: lin_mul.induct, auto simp add: ring_simps)
   195 by (induct t arbitrary: i rule: lin_mul.induct, auto simp add: algebra_simps)
   196 
   196 
   197 consts linum:: "num \<Rightarrow> num"
   197 consts linum:: "num \<Rightarrow> num"
   198 recdef linum "measure num_size"
   198 recdef linum "measure num_size"
   199   "linum (C b) = C b"
   199   "linum (C b) = C b"
   200   "linum (Var n) = CN n 1 (C 0)"
   200   "linum (Var n) = CN n 1 (C 0)"