src/HOL/Library/Conditional_Parametricity.thy
author haftmann
Thu, 18 Jun 2020 09:07:30 +0000
changeset 71953 428609096812
parent 69605 a96320074298
permissions -rw-r--r--
more lemmas and less name space pollution
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
67224
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
     1
(*  Title:    HOL/Library/Conditional_Parametricity.thy
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
     2
    Author:   Jan Gilcher, Andreas Lochbihler, Dmitriy Traytel, ETH Zürich
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
     3
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
     4
A conditional parametricity prover
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
     5
*)
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
     6
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
     7
theory Conditional_Parametricity
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
     8
imports Main
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
     9
keywords "parametric_constant" :: thy_decl
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    10
begin
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    11
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    12
context includes lifting_syntax begin
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    13
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    14
qualified definition Rel_match :: "('a \<Rightarrow> 'b \<Rightarrow> bool) \<Rightarrow> 'a \<Rightarrow> 'b \<Rightarrow> bool" where
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    15
  "Rel_match R x y = R x y"
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    16
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    17
named_theorems parametricity_preprocess
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    18
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    19
lemma bi_unique_Rel_match [parametricity_preprocess]:
67399
eab6ce8368fa ran isabelle update_op on all sources
nipkow
parents: 67224
diff changeset
    20
  "bi_unique A = Rel_match (A ===> A ===> (=)) (=) (=)"
67224
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    21
  unfolding bi_unique_alt_def2 Rel_match_def ..
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    22
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    23
lemma bi_total_Rel_match [parametricity_preprocess]:
67399
eab6ce8368fa ran isabelle update_op on all sources
nipkow
parents: 67224
diff changeset
    24
  "bi_total A = Rel_match ((A ===> (=)) ===> (=)) All All"
67224
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    25
  unfolding bi_total_alt_def2 Rel_match_def ..
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    26
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    27
lemma is_equality_Rel: "is_equality A \<Longrightarrow> Transfer.Rel A t t"
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    28
  by (fact transfer_raw)
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    29
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    30
lemma Rel_Rel_match: "Transfer.Rel R x y \<Longrightarrow> Rel_match R x y"
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    31
  unfolding Rel_match_def Rel_def .
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    32
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    33
lemma Rel_match_Rel: "Rel_match R x y \<Longrightarrow> Transfer.Rel R x y"
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    34
  unfolding Rel_match_def Rel_def .
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    35
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    36
lemma Rel_Rel_match_eq: "Transfer.Rel R x y = Rel_match R x y"
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    37
  using Rel_Rel_match Rel_match_Rel by fast
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    38
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    39
lemma Rel_match_app:
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    40
  assumes "Rel_match (A ===> B) f g" and "Transfer.Rel A x y"
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    41
  shows "Rel_match B (f x) (g y)"
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    42
  using assms Rel_match_Rel Rel_app Rel_Rel_match by fast
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    43
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    44
end
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    45
69605
a96320074298 isabelle update -u path_cartouches;
wenzelm
parents: 67399
diff changeset
    46
ML_file \<open>conditional_parametricity.ML\<close>
67224
341fbce5b26d a conditional paramitrecity prover
traytel
parents:
diff changeset
    47
67399
eab6ce8368fa ran isabelle update_op on all sources
nipkow
parents: 67224
diff changeset
    48
end