| 
17480
 | 
     1  | 
(* $Id$ *)
  | 
| 
 | 
     2  | 
  | 
| 
 | 
     3  | 
theory If
  | 
| 
 | 
     4  | 
imports FOLP
  | 
| 
 | 
     5  | 
begin
  | 
| 
 | 
     6  | 
  | 
| 
 | 
     7  | 
constdefs
  | 
| 
19796
 | 
     8  | 
  "if" :: "[o,o,o]=>o"
  | 
| 
17480
 | 
     9  | 
  "if(P,Q,R) == P&Q | ~P&R"
  | 
| 
 | 
    10  | 
  | 
| 
25991
 | 
    11  | 
lemma ifI:
  | 
| 
 | 
    12  | 
  assumes "!!x. x : P ==> f(x) : Q"  "!!x. x : ~P ==> g(x) : R"
  | 
| 
 | 
    13  | 
  shows "?p : if(P,Q,R)"
  | 
| 
 | 
    14  | 
apply (unfold if_def)
  | 
| 
 | 
    15  | 
apply (tactic {* fast_tac (FOLP_cs addIs @{thms assms}) 1 *})
 | 
| 
 | 
    16  | 
done
  | 
| 
 | 
    17  | 
  | 
| 
 | 
    18  | 
lemma ifE:
  | 
| 
 | 
    19  | 
  assumes 1: "p : if(P,Q,R)" and
  | 
| 
 | 
    20  | 
    2: "!!x y. [| x : P; y : Q |] ==> f(x, y) : S" and
  | 
| 
 | 
    21  | 
    3: "!!x y. [| x : ~P; y : R |] ==> g(x, y) : S"
  | 
| 
 | 
    22  | 
  shows "?p : S"
  | 
| 
 | 
    23  | 
apply (insert 1)
  | 
| 
 | 
    24  | 
apply (unfold if_def)
  | 
| 
 | 
    25  | 
apply (tactic {* fast_tac (FOLP_cs addIs [@{thm 2}, @{thm 3}]) 1 *})
 | 
| 
 | 
    26  | 
done
  | 
| 
 | 
    27  | 
  | 
| 
 | 
    28  | 
lemma if_commute: "?p : if(P, if(Q,A,B), if(Q,C,D)) <-> if(Q, if(P,A,C), if(P,B,D))"
  | 
| 
 | 
    29  | 
apply (rule iffI)
  | 
| 
 | 
    30  | 
apply (erule ifE)
  | 
| 
 | 
    31  | 
apply (erule ifE)
  | 
| 
 | 
    32  | 
apply (rule ifI)
  | 
| 
 | 
    33  | 
apply (rule ifI)
  | 
| 
 | 
    34  | 
oops
  | 
| 
 | 
    35  | 
  | 
| 
 | 
    36  | 
ML {* val if_cs = FOLP_cs addSIs [@{thm ifI}] addSEs [@{thm ifE}] *}
 | 
| 
 | 
    37  | 
  | 
| 
 | 
    38  | 
lemma if_commute: "?p : if(P, if(Q,A,B), if(Q,C,D)) <-> if(Q, if(P,A,C), if(P,B,D))"
  | 
| 
 | 
    39  | 
apply (tactic {* fast_tac if_cs 1 *})
 | 
| 
 | 
    40  | 
done
  | 
| 
 | 
    41  | 
  | 
| 
 | 
    42  | 
lemma nested_ifs: "?p : if(if(P,Q,R), A, B) <-> if(P, if(Q,A,B), if(R,A,B))"
  | 
| 
 | 
    43  | 
apply (tactic {* fast_tac if_cs 1 *})
 | 
| 
 | 
    44  | 
done
  | 
| 
17480
 | 
    45  | 
  | 
| 
0
 | 
    46  | 
end
  |