ex/PropLog.thy
changeset 135 a06a2d930a03
parent 130 e7dcf3c07865
equal deleted inserted replaced
134:4b7da5a895e7 135:a06a2d930a03
     1 (*  Title: 	HOL/ex/pl.thy
     1 (*  Title: 	HOL/ex/PropLog.thy
     2     ID:         $Id$
     2     ID:         $Id$
     3     Author: 	Tobias Nipkow
     3     Author: 	Tobias Nipkow
     4     Copyright   1994  TU Muenchen
     4     Copyright   1994  TU Muenchen
     5 
     5 
     6 Inductive definition of propositional logic.
     6 Inductive definition of propositional logic.
    26   K   "H |- p->q->p"
    26   K   "H |- p->q->p"
    27   S   "H |- (p->q->r) -> (p->q) -> p->r"
    27   S   "H |- (p->q->r) -> (p->q) -> p->r"
    28   DN  "H |- ((p->false) -> false) -> p"
    28   DN  "H |- ((p->false) -> false) -> p"
    29   MP  "[| H |- p->q; H |- p |] ==> H |- q"
    29   MP  "[| H |- p->q; H |- p |] ==> H |- q"
    30 
    30 
    31 rules
    31 defs
    32 
    32   sat_def  "H |= p  ==  (!tt. (!q:H. tt[q]) --> tt[p])"
    33   (** Proof theory for propositional logic
       
    34 
       
    35   axK_def   "axK ==  {x . ? p q.   x = p->q->p}"
       
    36   axS_def   "axS ==  {x . ? p q r. x = (p->q->r) -> (p->q) -> p->r}"
       
    37   axDN_def  "axDN == {x . ? p.     x = ((p->false) -> false) -> p}"
       
    38 
       
    39   (*the use of subsets simplifies the proof of monotonicity*)
       
    40   ruleMP_def  "ruleMP(X) == {q. ? p:X. p->q : X}"
       
    41 
       
    42   thms_def
       
    43    "thms(H) == lfp(%X. H Un axK Un axS Un axDN Un ruleMP(X))"
       
    44   
       
    45   conseq_def  "H |- p == p : thms(H)"
       
    46 **)
       
    47   sat_def "H |= p  ==  (!tt. (!q:H. tt[q]) --> tt[p])"
       
    48 
       
    49   eval_def "tt[p] == eval2(p,tt)"
    33   eval_def "tt[p] == eval2(p,tt)"
    50 
    34 
    51 primrec eval2 pl
    35 primrec eval2 pl
    52   eval2_false "eval2(false) = (%x.False)"
    36   eval2_false "eval2(false) = (%x.False)"
    53   eval2_var   "eval2(#v) = (%tt.v:tt)"
    37   eval2_var   "eval2(#v) = (%tt.v:tt)"