Precedence_ord.thy
author Christian Urban <christian dot urban at kcl dot ac dot uk>
Thu, 15 May 2014 16:02:44 +0100
changeset 33 9b9f2117561f
parent 0 110247f9d47e
child 63 b620a2a0806a
permissions -rw-r--r--
simplified the cp_rec proof

header {* Order on product types *}

theory Precedence_ord
imports Main
begin

datatype precedence = Prc nat nat

instantiation precedence :: order
begin

definition
  precedence_le_def: "x \<le> y \<longleftrightarrow> (case (x, y) of
                                   (Prc fx sx, Prc fy sy) \<Rightarrow> 
                                 fx < fy \<or> (fx \<le> fy \<and> sy \<le> sx))"

definition
  precedence_less_def: "x < y \<longleftrightarrow> (case (x, y) of
                               (Prc fx sx, Prc fy sy) \<Rightarrow> 
                                     fx < fy \<or> (fx \<le> fy \<and> sy < sx))"

instance
proof
qed (auto simp: precedence_le_def precedence_less_def 
              intro: order_trans split:precedence.splits)
end

instance precedence :: preorder ..

instance precedence :: linorder 
proof
qed (auto simp: precedence_le_def precedence_less_def 
              intro: order_trans split:precedence.splits)

instantiation precedence :: zero
begin

definition Zero_precedence_def:
  "0 = Prc 0 0"

instance ..

end

end