src/HOL/ex/ReflectionEx.thy
changeset 39246 9e58f0499f57
parent 35419 d78659d1723e
child 41413 64cd30d6b0b8
equal deleted inserted replaced
39215:7b2631c91a95 39246:9e58f0499f57
    44   apply (reify )
    44   apply (reify )
    45   oops
    45   oops
    46 
    46 
    47 datatype fm = And fm fm | Or fm fm | Imp fm fm | Iff fm fm | NOT fm | At nat
    47 datatype fm = And fm fm | Or fm fm | Imp fm fm | Iff fm fm | NOT fm | At nat
    48 
    48 
    49 consts Ifm :: "fm \<Rightarrow> bool list \<Rightarrow> bool"
    49 primrec Ifm :: "fm \<Rightarrow> bool list \<Rightarrow> bool" where
    50 primrec
       
    51   "Ifm (At n) vs = vs!n"
    50   "Ifm (At n) vs = vs!n"
    52   "Ifm (And p q) vs = (Ifm p vs \<and> Ifm q vs)"
    51 | "Ifm (And p q) vs = (Ifm p vs \<and> Ifm q vs)"
    53   "Ifm (Or p q) vs = (Ifm p vs \<or> Ifm q vs)"
    52 | "Ifm (Or p q) vs = (Ifm p vs \<or> Ifm q vs)"
    54   "Ifm (Imp p q) vs = (Ifm p vs \<longrightarrow> Ifm q vs)"
    53 | "Ifm (Imp p q) vs = (Ifm p vs \<longrightarrow> Ifm q vs)"
    55   "Ifm (Iff p q) vs = (Ifm p vs = Ifm q vs)"
    54 | "Ifm (Iff p q) vs = (Ifm p vs = Ifm q vs)"
    56   "Ifm (NOT p) vs = (\<not> (Ifm p vs))"
    55 | "Ifm (NOT p) vs = (\<not> (Ifm p vs))"
    57 
    56 
    58 lemma "Q \<longrightarrow> (D & F & ((~ D) & (~ F)))"
    57 lemma "Q \<longrightarrow> (D & F & ((~ D) & (~ F)))"
    59 apply (reify Ifm.simps)
    58 apply (reify Ifm.simps)
    60 oops
    59 oops
    61 
    60 
   397 | "Iprod One vs = 1"
   396 | "Iprod One vs = 1"
   398 | "Iprod (Var n) vs = vs!n"
   397 | "Iprod (Var n) vs = vs!n"
   399 | "Iprod (Mul a b) vs = (Iprod a vs * Iprod b vs)"
   398 | "Iprod (Mul a b) vs = (Iprod a vs * Iprod b vs)"
   400 | "Iprod (Pw a n) vs = ((Iprod a vs) ^ n)"
   399 | "Iprod (Pw a n) vs = ((Iprod a vs) ^ n)"
   401 | "Iprod (PNM n k t) vs = (vs ! n)^k * Iprod t vs"
   400 | "Iprod (PNM n k t) vs = (vs ! n)^k * Iprod t vs"
   402 consts prodmul:: "prod \<times> prod \<Rightarrow> prod"
   401 
   403 datatype sgn = Pos prod | Neg prod | ZeroEq prod | NZeroEq prod | Tr | F 
   402 datatype sgn = Pos prod | Neg prod | ZeroEq prod | NZeroEq prod | Tr | F 
   404   | Or sgn sgn | And sgn sgn
   403   | Or sgn sgn | And sgn sgn
   405 
   404 
   406 primrec Isgn :: " sgn \<Rightarrow> ('a::{linordered_idom}) list \<Rightarrow>bool"
   405 primrec Isgn :: " sgn \<Rightarrow> ('a::{linordered_idom}) list \<Rightarrow>bool"
   407 where 
   406 where