Theory Infra_type

Up to index of Isabelle/HOL/HOL-Complex/CSP

theory Infra_type
imports Infra_common
begin

           (*-------------------------------------------*
            |        CSP-Prover on Isabelle2004         |
            |               November 2004               |
            |                   June 2005  (modified)   |
            |                   July 2005  (modified)   |
            |                                           |
            |        CSP-Prover on Isabelle2005         |
            |                October 2005  (modified)   |
            |                                           |
            |        Yoshinao Isobe (AIST JAPAN)        |
            *-------------------------------------------*)

theory Infra_type
imports Infra_common
begin

(*****************************************************
              Infinite Sequence type
 *****************************************************)

types 'a infinite_seq = "nat => 'a"           (* synonym *)

(********************************************************** 
                      set or nat
 **********************************************************)

datatype
  'a selector
   = sel_set "'a set"
   | sel_nat "nat"

lemma inj_sel_set[simp]: "inj sel_set"
by (simp add: inj_on_def)

lemma inj_sel_nat[simp]: "inj sel_nat"
by (simp add: inj_on_def)

lemma tri_compo_is:
  "ALL x. ( (EX b. x = sel_set b)
          | (EX c. x = sel_nat c) )"
apply (intro allI)
apply (induct_tac x)
by (auto)

lemma P_image_sel_set:
  "[| ALL x:X. P x ; y : (sel_set ` X) |] ==> P ((inv sel_set) y)"
by (auto)

lemma P_image_sel_nat:
  "[| ALL x:X. P x ; y : (sel_nat ` X) |] ==> P ((inv sel_nat) y)"
by (auto)

lemma P_inv_sel_set:
  "(ALL x. P (inv sel_set x)) = (ALL y. P y)"
apply (auto)
apply (drule_tac x="sel_set y" in spec)
by (simp)

lemma P_inv_sel_nat:
  "(ALL x. P (inv sel_nat x)) = (ALL y. P y)"
apply (auto)
apply (drule_tac x="sel_nat y" in spec)
by (simp)

lemma P_inv_sel_setI:
  "ALL x. P (inv sel_set x) ==> P y"
by (simp add: P_inv_sel_set)

lemma P_inv_sel_natI:
  "ALL x. P (inv sel_nat x) ==> P y"
by (simp add: P_inv_sel_nat)

end

lemma inj_sel_set:

  inj sel_set

lemma inj_sel_nat:

  inj sel_nat

lemma tri_compo_is:

x. (∃b. x = sel_set b) ∨ (∃c. x = sel_nat c)

lemma P_image_sel_set:

  [| ∀xX. P x; y ∈ sel_set ` X |] ==> P (inv sel_set y)

lemma P_image_sel_nat:

  [| ∀xX. P x; y ∈ sel_nat ` X |] ==> P (inv sel_nat y)

lemma P_inv_sel_set:

  (∀x. P (inv sel_set x)) = (∀y. P y)

lemma P_inv_sel_nat:

  (∀x. P (inv sel_nat x)) = (∀y. P y)

lemma P_inv_sel_setI:

x. P (inv sel_set x) ==> P y

lemma P_inv_sel_natI:

x. P (inv sel_nat x) ==> P y