| author | haftmann | 
| Sun, 11 Nov 2012 19:24:01 +0100 | |
| changeset 50045 | 2214bc566f88 | 
| parent 49962 | a8cc904a6820 | 
| child 50282 | fe4d4bb9f4c2 | 
| permissions | -rw-r--r-- | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1  | 
(* Title: HOL/Decision_Procs/Parametric_Ferrante_Rackoff.thy  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2  | 
Author: Amine Chaieb  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
3  | 
*)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
4  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
5  | 
header{* A formalization of Ferrante and Rackoff's procedure with polynomial parameters, see Paper in CALCULEMUS 2008 *}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
6  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
7  | 
theory Parametric_Ferrante_Rackoff  | 
| 41849 | 8  | 
imports Reflected_Multivariate_Polynomial Dense_Linear_Order DP_Library  | 
| 
44013
 
5cfc1c36ae97
moved recdef package to HOL/Library/Old_Recdef.thy
 
krauss 
parents: 
42814 
diff
changeset
 | 
9  | 
"~~/src/HOL/Library/Efficient_Nat" "~~/src/HOL/Library/Old_Recdef"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
10  | 
begin  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
11  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
12  | 
subsection {* Terms *}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
13  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
14  | 
datatype tm = CP poly | Bound nat | Add tm tm | Mul poly tm  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
15  | 
| Neg tm | Sub tm tm | CNP nat poly tm  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
16  | 
(* A size for poly to make inductive proofs simpler*)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
17  | 
|
| 39246 | 18  | 
primrec tmsize :: "tm \<Rightarrow> nat" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
19  | 
"tmsize (CP c) = polysize c"  | 
| 39246 | 20  | 
| "tmsize (Bound n) = 1"  | 
21  | 
| "tmsize (Neg a) = 1 + tmsize a"  | 
|
22  | 
| "tmsize (Add a b) = 1 + tmsize a + tmsize b"  | 
|
23  | 
| "tmsize (Sub a b) = 3 + tmsize a + tmsize b"  | 
|
24  | 
| "tmsize (Mul c a) = 1 + polysize c + tmsize a"  | 
|
25  | 
| "tmsize (CNP n c a) = 3 + polysize c + tmsize a "  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
26  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
27  | 
(* Semantics of terms tm *)  | 
| 
47108
 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 
huffman 
parents: 
45499 
diff
changeset
 | 
28  | 
primrec Itm :: "'a::{field_char_0, field_inverse_zero} list \<Rightarrow> 'a list \<Rightarrow> tm \<Rightarrow> 'a" where
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
29  | 
"Itm vs bs (CP c) = (Ipoly vs c)"  | 
| 39246 | 30  | 
| "Itm vs bs (Bound n) = bs!n"  | 
31  | 
| "Itm vs bs (Neg a) = -(Itm vs bs a)"  | 
|
32  | 
| "Itm vs bs (Add a b) = Itm vs bs a + Itm vs bs b"  | 
|
33  | 
| "Itm vs bs (Sub a b) = Itm vs bs a - Itm vs bs b"  | 
|
34  | 
| "Itm vs bs (Mul c a) = (Ipoly vs c) * Itm vs bs a"  | 
|
35  | 
| "Itm vs bs (CNP n c t) = (Ipoly vs c)*(bs!n) + Itm vs bs t"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
36  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
37  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
38  | 
fun allpolys:: "(poly \<Rightarrow> bool) \<Rightarrow> tm \<Rightarrow> bool" where  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
39  | 
"allpolys P (CP c) = P c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
40  | 
| "allpolys P (CNP n c p) = (P c \<and> allpolys P p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
41  | 
| "allpolys P (Mul c p) = (P c \<and> allpolys P p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
42  | 
| "allpolys P (Neg p) = allpolys P p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
43  | 
| "allpolys P (Add p q) = (allpolys P p \<and> allpolys P q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
44  | 
| "allpolys P (Sub p q) = (allpolys P p \<and> allpolys P q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
45  | 
| "allpolys P p = True"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
46  | 
|
| 39246 | 47  | 
primrec tmboundslt:: "nat \<Rightarrow> tm \<Rightarrow> bool" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
48  | 
"tmboundslt n (CP c) = True"  | 
| 39246 | 49  | 
| "tmboundslt n (Bound m) = (m < n)"  | 
50  | 
| "tmboundslt n (CNP m c a) = (m < n \<and> tmboundslt n a)"  | 
|
51  | 
| "tmboundslt n (Neg a) = tmboundslt n a"  | 
|
52  | 
| "tmboundslt n (Add a b) = (tmboundslt n a \<and> tmboundslt n b)"  | 
|
53  | 
| "tmboundslt n (Sub a b) = (tmboundslt n a \<and> tmboundslt n b)"  | 
|
54  | 
| "tmboundslt n (Mul i a) = tmboundslt n a"  | 
|
55  | 
||
56  | 
primrec tmbound0:: "tm \<Rightarrow> bool" (* a tm is INDEPENDENT of Bound 0 *) where  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
57  | 
"tmbound0 (CP c) = True"  | 
| 39246 | 58  | 
| "tmbound0 (Bound n) = (n>0)"  | 
59  | 
| "tmbound0 (CNP n c a) = (n\<noteq>0 \<and> tmbound0 a)"  | 
|
60  | 
| "tmbound0 (Neg a) = tmbound0 a"  | 
|
61  | 
| "tmbound0 (Add a b) = (tmbound0 a \<and> tmbound0 b)"  | 
|
62  | 
| "tmbound0 (Sub a b) = (tmbound0 a \<and> tmbound0 b)"  | 
|
63  | 
| "tmbound0 (Mul i a) = tmbound0 a"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
64  | 
lemma tmbound0_I:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
65  | 
assumes nb: "tmbound0 a"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
66  | 
shows "Itm vs (b#bs) a = Itm vs (b'#bs) a"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
67  | 
using nb  | 
| 41842 | 68  | 
by (induct a rule: tm.induct,auto)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
69  | 
|
| 39246 | 70  | 
primrec tmbound:: "nat \<Rightarrow> tm \<Rightarrow> bool" (* a tm is INDEPENDENT of Bound n *) where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
71  | 
"tmbound n (CP c) = True"  | 
| 39246 | 72  | 
| "tmbound n (Bound m) = (n \<noteq> m)"  | 
73  | 
| "tmbound n (CNP m c a) = (n\<noteq>m \<and> tmbound n a)"  | 
|
74  | 
| "tmbound n (Neg a) = tmbound n a"  | 
|
75  | 
| "tmbound n (Add a b) = (tmbound n a \<and> tmbound n b)"  | 
|
76  | 
| "tmbound n (Sub a b) = (tmbound n a \<and> tmbound n b)"  | 
|
77  | 
| "tmbound n (Mul i a) = tmbound n a"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
78  | 
lemma tmbound0_tmbound_iff: "tmbound 0 t = tmbound0 t" by (induct t, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
79  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
80  | 
lemma tmbound_I:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
81  | 
assumes bnd: "tmboundslt (length bs) t" and nb: "tmbound n t" and le: "n \<le> length bs"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
82  | 
shows "Itm vs (bs[n:=x]) t = Itm vs bs t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
83  | 
using nb le bnd  | 
| 39246 | 84  | 
by (induct t rule: tm.induct , auto)  | 
85  | 
||
| 41821 | 86  | 
fun decrtm0:: "tm \<Rightarrow> tm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
87  | 
"decrtm0 (Bound n) = Bound (n - 1)"  | 
| 41821 | 88  | 
| "decrtm0 (Neg a) = Neg (decrtm0 a)"  | 
89  | 
| "decrtm0 (Add a b) = Add (decrtm0 a) (decrtm0 b)"  | 
|
90  | 
| "decrtm0 (Sub a b) = Sub (decrtm0 a) (decrtm0 b)"  | 
|
91  | 
| "decrtm0 (Mul c a) = Mul c (decrtm0 a)"  | 
|
92  | 
| "decrtm0 (CNP n c a) = CNP (n - 1) c (decrtm0 a)"  | 
|
93  | 
| "decrtm0 a = a"  | 
|
| 39246 | 94  | 
|
| 41821 | 95  | 
fun incrtm0:: "tm \<Rightarrow> tm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
96  | 
"incrtm0 (Bound n) = Bound (n + 1)"  | 
| 41821 | 97  | 
| "incrtm0 (Neg a) = Neg (incrtm0 a)"  | 
98  | 
| "incrtm0 (Add a b) = Add (incrtm0 a) (incrtm0 b)"  | 
|
99  | 
| "incrtm0 (Sub a b) = Sub (incrtm0 a) (incrtm0 b)"  | 
|
100  | 
| "incrtm0 (Mul c a) = Mul c (incrtm0 a)"  | 
|
101  | 
| "incrtm0 (CNP n c a) = CNP (n + 1) c (incrtm0 a)"  | 
|
102  | 
| "incrtm0 a = a"  | 
|
| 39246 | 103  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
104  | 
lemma decrtm0: assumes nb: "tmbound0 t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
105  | 
shows "Itm vs (x#bs) t = Itm vs bs (decrtm0 t)"  | 
| 41842 | 106  | 
using nb by (induct t rule: decrtm0.induct, simp_all)  | 
| 39246 | 107  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
108  | 
lemma incrtm0: "Itm vs (x#bs) (incrtm0 t) = Itm vs bs t"  | 
| 41842 | 109  | 
by (induct t rule: decrtm0.induct, simp_all)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
110  | 
|
| 39246 | 111  | 
primrec decrtm:: "nat \<Rightarrow> tm \<Rightarrow> tm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
112  | 
"decrtm m (CP c) = (CP c)"  | 
| 39246 | 113  | 
| "decrtm m (Bound n) = (if n < m then Bound n else Bound (n - 1))"  | 
114  | 
| "decrtm m (Neg a) = Neg (decrtm m a)"  | 
|
115  | 
| "decrtm m (Add a b) = Add (decrtm m a) (decrtm m b)"  | 
|
116  | 
| "decrtm m (Sub a b) = Sub (decrtm m a) (decrtm m b)"  | 
|
117  | 
| "decrtm m (Mul c a) = Mul c (decrtm m a)"  | 
|
118  | 
| "decrtm m (CNP n c a) = (if n < m then CNP n c (decrtm m a) else CNP (n - 1) c (decrtm m a))"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
119  | 
|
| 39246 | 120  | 
primrec removen:: "nat \<Rightarrow> 'a list \<Rightarrow> 'a list" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
121  | 
"removen n [] = []"  | 
| 39246 | 122  | 
| "removen n (x#xs) = (if n=0 then xs else (x#(removen (n - 1) xs)))"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
123  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
124  | 
lemma removen_same: "n \<ge> length xs \<Longrightarrow> removen n xs = xs"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
125  | 
by (induct xs arbitrary: n, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
126  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
127  | 
lemma nth_length_exceeds: "n \<ge> length xs \<Longrightarrow> xs!n = []!(n - length xs)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
128  | 
by (induct xs arbitrary: n, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
129  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
130  | 
lemma removen_length: "length (removen n xs) = (if n \<ge> length xs then length xs else length xs - 1)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
131  | 
by (induct xs arbitrary: n, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
132  | 
lemma removen_nth: "(removen n xs)!m = (if n \<ge> length xs then xs!m  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
133  | 
else if m < n then xs!m else if m \<le> length xs then xs!(Suc m) else []!(m - (length xs - 1)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
134  | 
proof(induct xs arbitrary: n m)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
135  | 
case Nil thus ?case by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
136  | 
next  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
137  | 
case (Cons x xs n m)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
138  | 
  {assume nxs: "n \<ge> length (x#xs)" hence ?case using removen_same[OF nxs] by simp}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
139  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
140  | 
  {assume nxs: "\<not> (n \<ge> length (x#xs))" 
 | 
| 41807 | 141  | 
    {assume mln: "m < n" hence ?case using Cons by (cases m, auto)}
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
142  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
143  | 
    {assume mln: "\<not> (m < n)" 
 | 
| 41807 | 144  | 
      {assume mxs: "m \<le> length (x#xs)" hence ?case using Cons by (cases m, auto)}
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
145  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
146  | 
      {assume mxs: "\<not> (m \<le> length (x#xs))" 
 | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
147  | 
have th: "length (removen n (x#xs)) = length xs"  | 
| 
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
148  | 
using removen_length[where n="n" and xs="x#xs"] nxs by simp  | 
| 
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
149  | 
with mxs have mxs':"m \<ge> length (removen n (x#xs))" by auto  | 
| 
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
150  | 
hence "(removen n (x#xs))!m = [] ! (m - length xs)"  | 
| 
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
151  | 
using th nth_length_exceeds[OF mxs'] by auto  | 
| 
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
152  | 
hence th: "(removen n (x#xs))!m = [] ! (m - (length (x#xs) - 1))"  | 
| 
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
153  | 
by auto  | 
| 
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
154  | 
hence ?case using nxs mln mxs by auto }  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
155  | 
ultimately have ?case by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
156  | 
}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
157  | 
ultimately have ?case by blast  | 
| 41807 | 158  | 
} ultimately show ?case by blast  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
159  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
160  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
161  | 
lemma decrtm: assumes bnd: "tmboundslt (length bs) t" and nb: "tmbound m t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
162  | 
and nle: "m \<le> length bs"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
163  | 
shows "Itm vs (removen m bs) (decrtm m t) = Itm vs bs t"  | 
| 41807 | 164  | 
using bnd nb nle by (induct t rule: tm.induct) (auto simp add: removen_nth)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
165  | 
|
| 39246 | 166  | 
primrec tmsubst0:: "tm \<Rightarrow> tm \<Rightarrow> tm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
167  | 
"tmsubst0 t (CP c) = CP c"  | 
| 39246 | 168  | 
| "tmsubst0 t (Bound n) = (if n=0 then t else Bound n)"  | 
169  | 
| "tmsubst0 t (CNP n c a) = (if n=0 then Add (Mul c t) (tmsubst0 t a) else CNP n c (tmsubst0 t a))"  | 
|
170  | 
| "tmsubst0 t (Neg a) = Neg (tmsubst0 t a)"  | 
|
171  | 
| "tmsubst0 t (Add a b) = Add (tmsubst0 t a) (tmsubst0 t b)"  | 
|
172  | 
| "tmsubst0 t (Sub a b) = Sub (tmsubst0 t a) (tmsubst0 t b)"  | 
|
173  | 
| "tmsubst0 t (Mul i a) = Mul i (tmsubst0 t a)"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
174  | 
lemma tmsubst0:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
175  | 
shows "Itm vs (x#bs) (tmsubst0 t a) = Itm vs ((Itm vs (x#bs) t)#bs) a"  | 
| 41842 | 176  | 
by (induct a rule: tm.induct) auto  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
177  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
178  | 
lemma tmsubst0_nb: "tmbound0 t \<Longrightarrow> tmbound0 (tmsubst0 t a)"  | 
| 41842 | 179  | 
by (induct a rule: tm.induct) auto  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
180  | 
|
| 39246 | 181  | 
primrec tmsubst:: "nat \<Rightarrow> tm \<Rightarrow> tm \<Rightarrow> tm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
182  | 
"tmsubst n t (CP c) = CP c"  | 
| 39246 | 183  | 
| "tmsubst n t (Bound m) = (if n=m then t else Bound m)"  | 
184  | 
| "tmsubst n t (CNP m c a) = (if n=m then Add (Mul c t) (tmsubst n t a)  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
185  | 
else CNP m c (tmsubst n t a))"  | 
| 39246 | 186  | 
| "tmsubst n t (Neg a) = Neg (tmsubst n t a)"  | 
187  | 
| "tmsubst n t (Add a b) = Add (tmsubst n t a) (tmsubst n t b)"  | 
|
188  | 
| "tmsubst n t (Sub a b) = Sub (tmsubst n t a) (tmsubst n t b)"  | 
|
189  | 
| "tmsubst n t (Mul i a) = Mul i (tmsubst n t a)"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
190  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
191  | 
lemma tmsubst: assumes nb: "tmboundslt (length bs) a" and nlt: "n \<le> length bs"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
192  | 
shows "Itm vs bs (tmsubst n t a) = Itm vs (bs[n:= Itm vs bs t]) a"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
193  | 
using nb nlt  | 
| 41842 | 194  | 
by (induct a rule: tm.induct,auto)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
195  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
196  | 
lemma tmsubst_nb0: assumes tnb: "tmbound0 t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
197  | 
shows "tmbound0 (tmsubst 0 t a)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
198  | 
using tnb  | 
| 39246 | 199  | 
by (induct a rule: tm.induct, auto)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
200  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
201  | 
lemma tmsubst_nb: assumes tnb: "tmbound m t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
202  | 
shows "tmbound m (tmsubst m t a)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
203  | 
using tnb  | 
| 39246 | 204  | 
by (induct a rule: tm.induct, auto)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
205  | 
lemma incrtm0_tmbound: "tmbound n t \<Longrightarrow> tmbound (Suc n) (incrtm0 t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
206  | 
by (induct t, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
207  | 
(* Simplification *)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
208  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
209  | 
consts  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
210  | 
tmadd:: "tm \<times> tm \<Rightarrow> tm"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
211  | 
recdef tmadd "measure (\<lambda> (t,s). size t + size s)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
212  | 
"tmadd (CNP n1 c1 r1,CNP n2 c2 r2) =  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
213  | 
(if n1=n2 then  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
214  | 
(let c = c1 +\<^sub>p c2  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
215  | 
in if c = 0\<^sub>p then tmadd(r1,r2) else CNP n1 c (tmadd (r1,r2)))  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
216  | 
else if n1 \<le> n2 then (CNP n1 c1 (tmadd (r1,CNP n2 c2 r2)))  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
217  | 
else (CNP n2 c2 (tmadd (CNP n1 c1 r1,r2))))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
218  | 
"tmadd (CNP n1 c1 r1,t) = CNP n1 c1 (tmadd (r1, t))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
219  | 
"tmadd (t,CNP n2 c2 r2) = CNP n2 c2 (tmadd (t,r2))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
220  | 
"tmadd (CP b1, CP b2) = CP (b1 +\<^sub>p b2)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
221  | 
"tmadd (a,b) = Add a b"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
222  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
223  | 
lemma tmadd[simp]: "Itm vs bs (tmadd (t,s)) = Itm vs bs (Add t s)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
224  | 
apply (induct t s rule: tmadd.induct, simp_all add: Let_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
225  | 
apply (case_tac "c1 +\<^sub>p c2 = 0\<^sub>p",case_tac "n1 \<le> n2", simp_all)  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
226  | 
apply (case_tac "n1 = n2", simp_all add: field_simps)  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
227  | 
apply (simp only: distrib_left[symmetric])  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
228  | 
by (auto simp del: polyadd simp add: polyadd[symmetric])  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
229  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
230  | 
lemma tmadd_nb0[simp]: "\<lbrakk> tmbound0 t ; tmbound0 s\<rbrakk> \<Longrightarrow> tmbound0 (tmadd (t,s))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
231  | 
by (induct t s rule: tmadd.induct, auto simp add: Let_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
232  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
233  | 
lemma tmadd_nb[simp]: "\<lbrakk> tmbound n t ; tmbound n s\<rbrakk> \<Longrightarrow> tmbound n (tmadd (t,s))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
234  | 
by (induct t s rule: tmadd.induct, auto simp add: Let_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
235  | 
lemma tmadd_blt[simp]: "\<lbrakk>tmboundslt n t ; tmboundslt n s\<rbrakk> \<Longrightarrow> tmboundslt n (tmadd (t,s))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
236  | 
by (induct t s rule: tmadd.induct, auto simp add: Let_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
237  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
238  | 
lemma tmadd_allpolys_npoly[simp]: "allpolys isnpoly t \<Longrightarrow> allpolys isnpoly s \<Longrightarrow> allpolys isnpoly (tmadd(t,s))" by (induct t s rule: tmadd.induct, simp_all add: Let_def polyadd_norm)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
239  | 
|
| 41821 | 240  | 
fun tmmul:: "tm \<Rightarrow> poly \<Rightarrow> tm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
241  | 
"tmmul (CP j) = (\<lambda> i. CP (i *\<^sub>p j))"  | 
| 41821 | 242  | 
| "tmmul (CNP n c a) = (\<lambda> i. CNP n (i *\<^sub>p c) (tmmul a i))"  | 
243  | 
| "tmmul t = (\<lambda> i. Mul i t)"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
244  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
245  | 
lemma tmmul[simp]: "Itm vs bs (tmmul t i) = Itm vs bs (Mul i t)"  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
246  | 
by (induct t arbitrary: i rule: tmmul.induct, simp_all add: field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
247  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
248  | 
lemma tmmul_nb0[simp]: "tmbound0 t \<Longrightarrow> tmbound0 (tmmul t i)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
249  | 
by (induct t arbitrary: i rule: tmmul.induct, auto )  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
250  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
251  | 
lemma tmmul_nb[simp]: "tmbound n t \<Longrightarrow> tmbound n (tmmul t i)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
252  | 
by (induct t arbitrary: n rule: tmmul.induct, auto )  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
253  | 
lemma tmmul_blt[simp]: "tmboundslt n t \<Longrightarrow> tmboundslt n (tmmul t i)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
254  | 
by (induct t arbitrary: i rule: tmmul.induct, auto simp add: Let_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
255  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
256  | 
lemma tmmul_allpolys_npoly[simp]:  | 
| 36409 | 257  | 
  assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
258  | 
shows "allpolys isnpoly t \<Longrightarrow> isnpoly c \<Longrightarrow> allpolys isnpoly (tmmul t c)" by (induct t rule: tmmul.induct, simp_all add: Let_def polymul_norm)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
259  | 
|
| 
35416
 
d8d7d1b785af
replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
 
haftmann 
parents: 
35267 
diff
changeset
 | 
260  | 
definition tmneg :: "tm \<Rightarrow> tm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
261  | 
"tmneg t \<equiv> tmmul t (C (- 1,1))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
262  | 
|
| 
35416
 
d8d7d1b785af
replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
 
haftmann 
parents: 
35267 
diff
changeset
 | 
263  | 
definition tmsub :: "tm \<Rightarrow> tm \<Rightarrow> tm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
264  | 
"tmsub s t \<equiv> (if s = t then CP 0\<^sub>p else tmadd (s,tmneg t))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
265  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
266  | 
lemma tmneg[simp]: "Itm vs bs (tmneg t) = Itm vs bs (Neg t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
267  | 
using tmneg_def[of t]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
268  | 
apply simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
269  | 
done  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
270  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
271  | 
lemma tmneg_nb0[simp]: "tmbound0 t \<Longrightarrow> tmbound0 (tmneg t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
272  | 
using tmneg_def by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
273  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
274  | 
lemma tmneg_nb[simp]: "tmbound n t \<Longrightarrow> tmbound n (tmneg t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
275  | 
using tmneg_def by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
276  | 
lemma tmneg_blt[simp]: "tmboundslt n t \<Longrightarrow> tmboundslt n (tmneg t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
277  | 
using tmneg_def by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
278  | 
lemma [simp]: "isnpoly (C (-1,1))" unfolding isnpoly_def by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
279  | 
lemma tmneg_allpolys_npoly[simp]:  | 
| 36409 | 280  | 
  assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
281  | 
shows "allpolys isnpoly t \<Longrightarrow> allpolys isnpoly (tmneg t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
282  | 
unfolding tmneg_def by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
283  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
284  | 
lemma tmsub[simp]: "Itm vs bs (tmsub a b) = Itm vs bs (Sub a b)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
285  | 
using tmsub_def by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
286  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
287  | 
lemma tmsub_nb0[simp]: "\<lbrakk> tmbound0 t ; tmbound0 s\<rbrakk> \<Longrightarrow> tmbound0 (tmsub t s)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
288  | 
using tmsub_def by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
289  | 
lemma tmsub_nb[simp]: "\<lbrakk> tmbound n t ; tmbound n s\<rbrakk> \<Longrightarrow> tmbound n (tmsub t s)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
290  | 
using tmsub_def by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
291  | 
lemma tmsub_blt[simp]: "\<lbrakk>tmboundslt n t ; tmboundslt n s\<rbrakk> \<Longrightarrow> tmboundslt n (tmsub t s )"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
292  | 
using tmsub_def by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
293  | 
lemma tmsub_allpolys_npoly[simp]:  | 
| 36409 | 294  | 
  assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
295  | 
shows "allpolys isnpoly t \<Longrightarrow> allpolys isnpoly s \<Longrightarrow> allpolys isnpoly (tmsub t s)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
296  | 
unfolding tmsub_def by (simp add: isnpoly_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
297  | 
|
| 41821 | 298  | 
fun simptm:: "tm \<Rightarrow> tm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
299  | 
"simptm (CP j) = CP (polynate j)"  | 
| 41821 | 300  | 
| "simptm (Bound n) = CNP n 1\<^sub>p (CP 0\<^sub>p)"  | 
301  | 
| "simptm (Neg t) = tmneg (simptm t)"  | 
|
302  | 
| "simptm (Add t s) = tmadd (simptm t,simptm s)"  | 
|
303  | 
| "simptm (Sub t s) = tmsub (simptm t) (simptm s)"  | 
|
304  | 
| "simptm (Mul i t) = (let i' = polynate i in if i' = 0\<^sub>p then CP 0\<^sub>p else tmmul (simptm t) i')"  | 
|
305  | 
| "simptm (CNP n c t) = (let c' = polynate c in if c' = 0\<^sub>p then simptm t else tmadd (CNP n c' (CP 0\<^sub>p ), simptm t))"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
306  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
307  | 
lemma polynate_stupid:  | 
| 36409 | 308  | 
  assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
309  | 
shows "polynate t = 0\<^sub>p \<Longrightarrow> Ipoly bs t = (0::'a)"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
310  | 
apply (subst polynate[symmetric])  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
311  | 
apply simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
312  | 
done  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
313  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
314  | 
lemma simptm_ci[simp]: "Itm vs bs (simptm t) = Itm vs bs t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
315  | 
by (induct t rule: simptm.induct, auto simp add: tmneg tmadd tmsub tmmul Let_def polynate_stupid)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
316  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
317  | 
lemma simptm_tmbound0[simp]:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
318  | 
"tmbound0 t \<Longrightarrow> tmbound0 (simptm t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
319  | 
by (induct t rule: simptm.induct, auto simp add: Let_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
320  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
321  | 
lemma simptm_nb[simp]: "tmbound n t \<Longrightarrow> tmbound n (simptm t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
322  | 
by (induct t rule: simptm.induct, auto simp add: Let_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
323  | 
lemma simptm_nlt[simp]: "tmboundslt n t \<Longrightarrow> tmboundslt n (simptm t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
324  | 
by (induct t rule: simptm.induct, auto simp add: Let_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
325  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
326  | 
lemma [simp]: "isnpoly 0\<^sub>p" and [simp]: "isnpoly (C(1,1))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
327  | 
by (simp_all add: isnpoly_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
328  | 
lemma simptm_allpolys_npoly[simp]:  | 
| 36409 | 329  | 
  assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
330  | 
shows "allpolys isnpoly (simptm p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
331  | 
by (induct p rule: simptm.induct, auto simp add: Let_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
332  | 
|
| 41822 | 333  | 
declare let_cong[fundef_cong del]  | 
334  | 
||
335  | 
fun split0 :: "tm \<Rightarrow> (poly \<times> tm)" where  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
336  | 
"split0 (Bound 0) = (1\<^sub>p, CP 0\<^sub>p)"  | 
| 41822 | 337  | 
| "split0 (CNP 0 c t) = (let (c',t') = split0 t in (c +\<^sub>p c',t'))"  | 
338  | 
| "split0 (Neg t) = (let (c,t') = split0 t in (~\<^sub>p c,Neg t'))"  | 
|
339  | 
| "split0 (CNP n c t) = (let (c',t') = split0 t in (c',CNP n c t'))"  | 
|
340  | 
| "split0 (Add s t) = (let (c1,s') = split0 s ; (c2,t') = split0 t in (c1 +\<^sub>p c2, Add s' t'))"  | 
|
341  | 
| "split0 (Sub s t) = (let (c1,s') = split0 s ; (c2,t') = split0 t in (c1 -\<^sub>p c2, Sub s' t'))"  | 
|
342  | 
| "split0 (Mul c t) = (let (c',t') = split0 t in (c *\<^sub>p c', Mul c t'))"  | 
|
343  | 
| "split0 t = (0\<^sub>p, t)"  | 
|
344  | 
||
345  | 
declare let_cong[fundef_cong]  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
346  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
347  | 
lemma split0_stupid[simp]: "\<exists>x y. (x,y) = split0 p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
348  | 
apply (rule exI[where x="fst (split0 p)"])  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
349  | 
apply (rule exI[where x="snd (split0 p)"])  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
350  | 
by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
351  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
352  | 
lemma split0:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
353  | 
"tmbound 0 (snd (split0 t)) \<and> (Itm vs bs (CNP 0 (fst (split0 t)) (snd (split0 t))) = Itm vs bs t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
354  | 
apply (induct t rule: split0.induct)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
355  | 
apply simp  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
356  | 
apply (simp add: Let_def split_def field_simps)  | 
| 
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
357  | 
apply (simp add: Let_def split_def field_simps)  | 
| 
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
358  | 
apply (simp add: Let_def split_def field_simps)  | 
| 
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
359  | 
apply (simp add: Let_def split_def field_simps)  | 
| 
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
360  | 
apply (simp add: Let_def split_def field_simps)  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
361  | 
apply (simp add: Let_def split_def mult_assoc distrib_left[symmetric])  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
362  | 
apply (simp add: Let_def split_def field_simps)  | 
| 
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
363  | 
apply (simp add: Let_def split_def field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
364  | 
done  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
365  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
366  | 
lemma split0_ci: "split0 t = (c',t') \<Longrightarrow> Itm vs bs t = Itm vs bs (CNP 0 c' t')"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
367  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
368  | 
fix c' t'  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
369  | 
assume "split0 t = (c', t')" hence "c' = fst (split0 t)" and "t' = snd (split0 t)" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
370  | 
with split0[where t="t" and bs="bs"] show "Itm vs bs t = Itm vs bs (CNP 0 c' t')" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
371  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
372  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
373  | 
lemma split0_nb0:  | 
| 36409 | 374  | 
  assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
375  | 
shows "split0 t = (c',t') \<Longrightarrow> tmbound 0 t'"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
376  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
377  | 
fix c' t'  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
378  | 
assume "split0 t = (c', t')" hence "c' = fst (split0 t)" and "t' = snd (split0 t)" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
379  | 
with conjunct1[OF split0[where t="t"]] show "tmbound 0 t'" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
380  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
381  | 
|
| 36409 | 382  | 
lemma split0_nb0'[simp]:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
383  | 
shows "tmbound0 (snd (split0 t))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
384  | 
using split0_nb0[of t "fst (split0 t)" "snd (split0 t)"] by (simp add: tmbound0_tmbound_iff)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
385  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
386  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
387  | 
lemma split0_nb: assumes nb:"tmbound n t" shows "tmbound n (snd (split0 t))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
388  | 
using nb by (induct t rule: split0.induct, auto simp add: Let_def split_def split0_stupid)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
389  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
390  | 
lemma split0_blt: assumes nb:"tmboundslt n t" shows "tmboundslt n (snd (split0 t))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
391  | 
using nb by (induct t rule: split0.induct, auto simp add: Let_def split_def split0_stupid)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
392  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
393  | 
lemma tmbound_split0: "tmbound 0 t \<Longrightarrow> Ipoly vs (fst(split0 t)) = 0"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
394  | 
by (induct t rule: split0.induct, auto simp add: Let_def split_def split0_stupid)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
395  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
396  | 
lemma tmboundslt_split0: "tmboundslt n t \<Longrightarrow> Ipoly vs (fst(split0 t)) = 0 \<or> n > 0"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
397  | 
by (induct t rule: split0.induct, auto simp add: Let_def split_def split0_stupid)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
398  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
399  | 
lemma tmboundslt0_split0: "tmboundslt 0 t \<Longrightarrow> Ipoly vs (fst(split0 t)) = 0"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
400  | 
by (induct t rule: split0.induct, auto simp add: Let_def split_def split0_stupid)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
401  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
402  | 
lemma allpolys_split0: "allpolys isnpoly p \<Longrightarrow> allpolys isnpoly (snd (split0 p))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
403  | 
by (induct p rule: split0.induct, auto simp add: isnpoly_def Let_def split_def split0_stupid)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
404  | 
|
| 36409 | 405  | 
lemma isnpoly_fst_split0:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
406  | 
shows  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
407  | 
"allpolys isnpoly p \<Longrightarrow> isnpoly (fst (split0 p))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
408  | 
by (induct p rule: split0.induct,  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
409  | 
auto simp add: polyadd_norm polysub_norm polyneg_norm polymul_norm  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
410  | 
Let_def split_def split0_stupid)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
411  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
412  | 
subsection{* Formulae *}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
413  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
414  | 
datatype fm = T| F| Le tm | Lt tm | Eq tm | NEq tm|  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
415  | 
NOT fm| And fm fm| Or fm fm| Imp fm fm| Iff fm fm| E fm| A fm  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
416  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
417  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
418  | 
(* A size for fm *)  | 
| 41822 | 419  | 
fun fmsize :: "fm \<Rightarrow> nat" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
420  | 
"fmsize (NOT p) = 1 + fmsize p"  | 
| 41822 | 421  | 
| "fmsize (And p q) = 1 + fmsize p + fmsize q"  | 
422  | 
| "fmsize (Or p q) = 1 + fmsize p + fmsize q"  | 
|
423  | 
| "fmsize (Imp p q) = 3 + fmsize p + fmsize q"  | 
|
424  | 
| "fmsize (Iff p q) = 3 + 2*(fmsize p + fmsize q)"  | 
|
425  | 
| "fmsize (E p) = 1 + fmsize p"  | 
|
426  | 
| "fmsize (A p) = 4+ fmsize p"  | 
|
427  | 
| "fmsize p = 1"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
428  | 
(* several lemmas about fmsize *)  | 
| 41822 | 429  | 
lemma fmsize_pos[termination_simp]: "fmsize p > 0"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
430  | 
by (induct p rule: fmsize.induct) simp_all  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
431  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
432  | 
(* Semantics of formulae (fm) *)  | 
| 
47108
 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 
huffman 
parents: 
45499 
diff
changeset
 | 
433  | 
primrec Ifm ::"'a::{linordered_field_inverse_zero} list \<Rightarrow> 'a list \<Rightarrow> fm \<Rightarrow> bool" where
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
434  | 
"Ifm vs bs T = True"  | 
| 39246 | 435  | 
| "Ifm vs bs F = False"  | 
436  | 
| "Ifm vs bs (Lt a) = (Itm vs bs a < 0)"  | 
|
437  | 
| "Ifm vs bs (Le a) = (Itm vs bs a \<le> 0)"  | 
|
438  | 
| "Ifm vs bs (Eq a) = (Itm vs bs a = 0)"  | 
|
439  | 
| "Ifm vs bs (NEq a) = (Itm vs bs a \<noteq> 0)"  | 
|
440  | 
| "Ifm vs bs (NOT p) = (\<not> (Ifm vs bs p))"  | 
|
441  | 
| "Ifm vs bs (And p q) = (Ifm vs bs p \<and> Ifm vs bs q)"  | 
|
442  | 
| "Ifm vs bs (Or p q) = (Ifm vs bs p \<or> Ifm vs bs q)"  | 
|
443  | 
| "Ifm vs bs (Imp p q) = ((Ifm vs bs p) \<longrightarrow> (Ifm vs bs q))"  | 
|
444  | 
| "Ifm vs bs (Iff p q) = (Ifm vs bs p = Ifm vs bs q)"  | 
|
445  | 
| "Ifm vs bs (E p) = (\<exists> x. Ifm vs (x#bs) p)"  | 
|
446  | 
| "Ifm vs bs (A p) = (\<forall> x. Ifm vs (x#bs) p)"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
447  | 
|
| 41822 | 448  | 
fun not:: "fm \<Rightarrow> fm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
449  | 
"not (NOT (NOT p)) = not p"  | 
| 41822 | 450  | 
| "not (NOT p) = p"  | 
451  | 
| "not T = F"  | 
|
452  | 
| "not F = T"  | 
|
453  | 
| "not (Lt t) = Le (tmneg t)"  | 
|
454  | 
| "not (Le t) = Lt (tmneg t)"  | 
|
455  | 
| "not (Eq t) = NEq t"  | 
|
456  | 
| "not (NEq t) = Eq t"  | 
|
457  | 
| "not p = NOT p"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
458  | 
lemma not[simp]: "Ifm vs bs (not p) = Ifm vs bs (NOT p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
459  | 
by (induct p rule: not.induct) auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
460  | 
|
| 
35416
 
d8d7d1b785af
replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
 
haftmann 
parents: 
35267 
diff
changeset
 | 
461  | 
definition conj :: "fm \<Rightarrow> fm \<Rightarrow> fm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
462  | 
"conj p q \<equiv> (if (p = F \<or> q=F) then F else if p=T then q else if q=T then p else  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
463  | 
if p = q then p else And p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
464  | 
lemma conj[simp]: "Ifm vs bs (conj p q) = Ifm vs bs (And p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
465  | 
by (cases "p=F \<or> q=F",simp_all add: conj_def) (cases p,simp_all)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
466  | 
|
| 
35416
 
d8d7d1b785af
replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
 
haftmann 
parents: 
35267 
diff
changeset
 | 
467  | 
definition disj :: "fm \<Rightarrow> fm \<Rightarrow> fm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
468  | 
"disj p q \<equiv> (if (p = T \<or> q=T) then T else if p=F then q else if q=F then p  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
469  | 
else if p=q then p else Or p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
470  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
471  | 
lemma disj[simp]: "Ifm vs bs (disj p q) = Ifm vs bs (Or p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
472  | 
by (cases "p=T \<or> q=T",simp_all add: disj_def) (cases p,simp_all)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
473  | 
|
| 
35416
 
d8d7d1b785af
replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
 
haftmann 
parents: 
35267 
diff
changeset
 | 
474  | 
definition imp :: "fm \<Rightarrow> fm \<Rightarrow> fm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
475  | 
"imp p q \<equiv> (if (p = F \<or> q=T \<or> p=q) then T else if p=T then q else if q=F then not p  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
476  | 
else Imp p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
477  | 
lemma imp[simp]: "Ifm vs bs (imp p q) = Ifm vs bs (Imp p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
478  | 
by (cases "p=F \<or> q=T",simp_all add: imp_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
479  | 
|
| 
35416
 
d8d7d1b785af
replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
 
haftmann 
parents: 
35267 
diff
changeset
 | 
480  | 
definition iff :: "fm \<Rightarrow> fm \<Rightarrow> fm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
481  | 
"iff p q \<equiv> (if (p = q) then T else if (p = NOT q \<or> NOT p = q) then F else  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
482  | 
if p=F then not q else if q=F then not p else if p=T then q else if q=T then p else  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
483  | 
Iff p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
484  | 
lemma iff[simp]: "Ifm vs bs (iff p q) = Ifm vs bs (Iff p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
485  | 
by (unfold iff_def,cases "p=q", simp,cases "p=NOT q", simp) (cases "NOT p= q", auto)  | 
| 41822 | 486  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
487  | 
(* Quantifier freeness *)  | 
| 41822 | 488  | 
fun qfree:: "fm \<Rightarrow> bool" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
489  | 
"qfree (E p) = False"  | 
| 41822 | 490  | 
| "qfree (A p) = False"  | 
491  | 
| "qfree (NOT p) = qfree p"  | 
|
492  | 
| "qfree (And p q) = (qfree p \<and> qfree q)"  | 
|
493  | 
| "qfree (Or p q) = (qfree p \<and> qfree q)"  | 
|
494  | 
| "qfree (Imp p q) = (qfree p \<and> qfree q)"  | 
|
495  | 
| "qfree (Iff p q) = (qfree p \<and> qfree q)"  | 
|
496  | 
| "qfree p = True"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
497  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
498  | 
(* Boundedness and substitution *)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
499  | 
|
| 39246 | 500  | 
primrec boundslt :: "nat \<Rightarrow> fm \<Rightarrow> bool" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
501  | 
"boundslt n T = True"  | 
| 39246 | 502  | 
| "boundslt n F = True"  | 
503  | 
| "boundslt n (Lt t) = (tmboundslt n t)"  | 
|
504  | 
| "boundslt n (Le t) = (tmboundslt n t)"  | 
|
505  | 
| "boundslt n (Eq t) = (tmboundslt n t)"  | 
|
506  | 
| "boundslt n (NEq t) = (tmboundslt n t)"  | 
|
507  | 
| "boundslt n (NOT p) = boundslt n p"  | 
|
508  | 
| "boundslt n (And p q) = (boundslt n p \<and> boundslt n q)"  | 
|
509  | 
| "boundslt n (Or p q) = (boundslt n p \<and> boundslt n q)"  | 
|
510  | 
| "boundslt n (Imp p q) = ((boundslt n p) \<and> (boundslt n q))"  | 
|
511  | 
| "boundslt n (Iff p q) = (boundslt n p \<and> boundslt n q)"  | 
|
512  | 
| "boundslt n (E p) = boundslt (Suc n) p"  | 
|
513  | 
| "boundslt n (A p) = boundslt (Suc n) p"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
514  | 
|
| 41822 | 515  | 
fun bound0:: "fm \<Rightarrow> bool" (* A Formula is independent of Bound 0 *) where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
516  | 
"bound0 T = True"  | 
| 41822 | 517  | 
| "bound0 F = True"  | 
518  | 
| "bound0 (Lt a) = tmbound0 a"  | 
|
519  | 
| "bound0 (Le a) = tmbound0 a"  | 
|
520  | 
| "bound0 (Eq a) = tmbound0 a"  | 
|
521  | 
| "bound0 (NEq a) = tmbound0 a"  | 
|
522  | 
| "bound0 (NOT p) = bound0 p"  | 
|
523  | 
| "bound0 (And p q) = (bound0 p \<and> bound0 q)"  | 
|
524  | 
| "bound0 (Or p q) = (bound0 p \<and> bound0 q)"  | 
|
525  | 
| "bound0 (Imp p q) = ((bound0 p) \<and> (bound0 q))"  | 
|
526  | 
| "bound0 (Iff p q) = (bound0 p \<and> bound0 q)"  | 
|
527  | 
| "bound0 p = False"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
528  | 
lemma bound0_I:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
529  | 
assumes bp: "bound0 p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
530  | 
shows "Ifm vs (b#bs) p = Ifm vs (b'#bs) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
531  | 
using bp tmbound0_I[where b="b" and bs="bs" and b'="b'"]  | 
| 41842 | 532  | 
by (induct p rule: bound0.induct,auto)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
533  | 
|
| 39246 | 534  | 
primrec bound:: "nat \<Rightarrow> fm \<Rightarrow> bool" (* A Formula is independent of Bound n *) where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
535  | 
"bound m T = True"  | 
| 39246 | 536  | 
| "bound m F = True"  | 
537  | 
| "bound m (Lt t) = tmbound m t"  | 
|
538  | 
| "bound m (Le t) = tmbound m t"  | 
|
539  | 
| "bound m (Eq t) = tmbound m t"  | 
|
540  | 
| "bound m (NEq t) = tmbound m t"  | 
|
541  | 
| "bound m (NOT p) = bound m p"  | 
|
542  | 
| "bound m (And p q) = (bound m p \<and> bound m q)"  | 
|
543  | 
| "bound m (Or p q) = (bound m p \<and> bound m q)"  | 
|
544  | 
| "bound m (Imp p q) = ((bound m p) \<and> (bound m q))"  | 
|
545  | 
| "bound m (Iff p q) = (bound m p \<and> bound m q)"  | 
|
546  | 
| "bound m (E p) = bound (Suc m) p"  | 
|
547  | 
| "bound m (A p) = bound (Suc m) p"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
548  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
549  | 
lemma bound_I:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
550  | 
assumes bnd: "boundslt (length bs) p" and nb: "bound n p" and le: "n \<le> length bs"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
551  | 
shows "Ifm vs (bs[n:=x]) p = Ifm vs bs p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
552  | 
using bnd nb le tmbound_I[where bs=bs and vs = vs]  | 
| 39246 | 553  | 
proof(induct p arbitrary: bs n rule: fm.induct)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
554  | 
case (E p bs n)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
555  | 
  {fix y
 | 
| 41807 | 556  | 
from E have bnd: "boundslt (length (y#bs)) p"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
557  | 
and nb: "bound (Suc n) p" and le: "Suc n \<le> length (y#bs)" by simp+  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
558  | 
from E.hyps[OF bnd nb le tmbound_I] have "Ifm vs ((y#bs)[Suc n:=x]) p = Ifm vs (y#bs) p" . }  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
559  | 
thus ?case by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
560  | 
next  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
561  | 
  case (A p bs n) {fix y
 | 
| 41807 | 562  | 
from A have bnd: "boundslt (length (y#bs)) p"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
563  | 
and nb: "bound (Suc n) p" and le: "Suc n \<le> length (y#bs)" by simp+  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
564  | 
from A.hyps[OF bnd nb le tmbound_I] have "Ifm vs ((y#bs)[Suc n:=x]) p = Ifm vs (y#bs) p" . }  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
565  | 
thus ?case by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
566  | 
qed auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
567  | 
|
| 41822 | 568  | 
fun decr0 :: "fm \<Rightarrow> fm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
569  | 
"decr0 (Lt a) = Lt (decrtm0 a)"  | 
| 41822 | 570  | 
| "decr0 (Le a) = Le (decrtm0 a)"  | 
571  | 
| "decr0 (Eq a) = Eq (decrtm0 a)"  | 
|
572  | 
| "decr0 (NEq a) = NEq (decrtm0 a)"  | 
|
573  | 
| "decr0 (NOT p) = NOT (decr0 p)"  | 
|
574  | 
| "decr0 (And p q) = conj (decr0 p) (decr0 q)"  | 
|
575  | 
| "decr0 (Or p q) = disj (decr0 p) (decr0 q)"  | 
|
576  | 
| "decr0 (Imp p q) = imp (decr0 p) (decr0 q)"  | 
|
577  | 
| "decr0 (Iff p q) = iff (decr0 p) (decr0 q)"  | 
|
578  | 
| "decr0 p = p"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
579  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
580  | 
lemma decr0: assumes nb: "bound0 p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
581  | 
shows "Ifm vs (x#bs) p = Ifm vs bs (decr0 p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
582  | 
using nb  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
583  | 
by (induct p rule: decr0.induct, simp_all add: decrtm0)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
584  | 
|
| 39246 | 585  | 
primrec decr :: "nat \<Rightarrow> fm \<Rightarrow> fm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
586  | 
"decr m T = T"  | 
| 39246 | 587  | 
| "decr m F = F"  | 
588  | 
| "decr m (Lt t) = (Lt (decrtm m t))"  | 
|
589  | 
| "decr m (Le t) = (Le (decrtm m t))"  | 
|
590  | 
| "decr m (Eq t) = (Eq (decrtm m t))"  | 
|
591  | 
| "decr m (NEq t) = (NEq (decrtm m t))"  | 
|
592  | 
| "decr m (NOT p) = NOT (decr m p)"  | 
|
593  | 
| "decr m (And p q) = conj (decr m p) (decr m q)"  | 
|
594  | 
| "decr m (Or p q) = disj (decr m p) (decr m q)"  | 
|
595  | 
| "decr m (Imp p q) = imp (decr m p) (decr m q)"  | 
|
596  | 
| "decr m (Iff p q) = iff (decr m p) (decr m q)"  | 
|
597  | 
| "decr m (E p) = E (decr (Suc m) p)"  | 
|
598  | 
| "decr m (A p) = A (decr (Suc m) p)"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
599  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
600  | 
lemma decr: assumes bnd: "boundslt (length bs) p" and nb: "bound m p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
601  | 
and nle: "m < length bs"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
602  | 
shows "Ifm vs (removen m bs) (decr m p) = Ifm vs bs p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
603  | 
using bnd nb nle  | 
| 39246 | 604  | 
proof(induct p arbitrary: bs m rule: fm.induct)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
605  | 
case (E p bs m)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
606  | 
  {fix x
 | 
| 41807 | 607  | 
from E have bnd: "boundslt (length (x#bs)) p" and nb: "bound (Suc m) p"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
608  | 
and nle: "Suc m < length (x#bs)" by auto  | 
| 41807 | 609  | 
from E(1)[OF bnd nb nle] have "Ifm vs (removen (Suc m) (x#bs)) (decr (Suc m) p) = Ifm vs (x#bs) p".  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
610  | 
} thus ?case by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
611  | 
next  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
612  | 
case (A p bs m)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
613  | 
  {fix x
 | 
| 41807 | 614  | 
from A have bnd: "boundslt (length (x#bs)) p" and nb: "bound (Suc m) p"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
615  | 
and nle: "Suc m < length (x#bs)" by auto  | 
| 41807 | 616  | 
from A(1)[OF bnd nb nle] have "Ifm vs (removen (Suc m) (x#bs)) (decr (Suc m) p) = Ifm vs (x#bs) p".  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
617  | 
} thus ?case by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
618  | 
qed (auto simp add: decrtm removen_nth)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
619  | 
|
| 39246 | 620  | 
primrec subst0:: "tm \<Rightarrow> fm \<Rightarrow> fm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
621  | 
"subst0 t T = T"  | 
| 39246 | 622  | 
| "subst0 t F = F"  | 
623  | 
| "subst0 t (Lt a) = Lt (tmsubst0 t a)"  | 
|
624  | 
| "subst0 t (Le a) = Le (tmsubst0 t a)"  | 
|
625  | 
| "subst0 t (Eq a) = Eq (tmsubst0 t a)"  | 
|
626  | 
| "subst0 t (NEq a) = NEq (tmsubst0 t a)"  | 
|
627  | 
| "subst0 t (NOT p) = NOT (subst0 t p)"  | 
|
628  | 
| "subst0 t (And p q) = And (subst0 t p) (subst0 t q)"  | 
|
629  | 
| "subst0 t (Or p q) = Or (subst0 t p) (subst0 t q)"  | 
|
630  | 
| "subst0 t (Imp p q) = Imp (subst0 t p) (subst0 t q)"  | 
|
631  | 
| "subst0 t (Iff p q) = Iff (subst0 t p) (subst0 t q)"  | 
|
632  | 
| "subst0 t (E p) = E p"  | 
|
633  | 
| "subst0 t (A p) = A p"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
634  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
635  | 
lemma subst0: assumes qf: "qfree p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
636  | 
shows "Ifm vs (x#bs) (subst0 t p) = Ifm vs ((Itm vs (x#bs) t)#bs) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
637  | 
using qf tmsubst0[where x="x" and bs="bs" and t="t"]  | 
| 39246 | 638  | 
by (induct p rule: fm.induct, auto)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
639  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
640  | 
lemma subst0_nb:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
641  | 
assumes bp: "tmbound0 t" and qf: "qfree p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
642  | 
shows "bound0 (subst0 t p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
643  | 
using qf tmsubst0_nb[OF bp] bp  | 
| 39246 | 644  | 
by (induct p rule: fm.induct, auto)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
645  | 
|
| 39246 | 646  | 
primrec subst:: "nat \<Rightarrow> tm \<Rightarrow> fm \<Rightarrow> fm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
647  | 
"subst n t T = T"  | 
| 39246 | 648  | 
| "subst n t F = F"  | 
649  | 
| "subst n t (Lt a) = Lt (tmsubst n t a)"  | 
|
650  | 
| "subst n t (Le a) = Le (tmsubst n t a)"  | 
|
651  | 
| "subst n t (Eq a) = Eq (tmsubst n t a)"  | 
|
652  | 
| "subst n t (NEq a) = NEq (tmsubst n t a)"  | 
|
653  | 
| "subst n t (NOT p) = NOT (subst n t p)"  | 
|
654  | 
| "subst n t (And p q) = And (subst n t p) (subst n t q)"  | 
|
655  | 
| "subst n t (Or p q) = Or (subst n t p) (subst n t q)"  | 
|
656  | 
| "subst n t (Imp p q) = Imp (subst n t p) (subst n t q)"  | 
|
657  | 
| "subst n t (Iff p q) = Iff (subst n t p) (subst n t q)"  | 
|
658  | 
| "subst n t (E p) = E (subst (Suc n) (incrtm0 t) p)"  | 
|
659  | 
| "subst n t (A p) = A (subst (Suc n) (incrtm0 t) p)"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
660  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
661  | 
lemma subst: assumes nb: "boundslt (length bs) p" and nlm: "n \<le> length bs"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
662  | 
shows "Ifm vs bs (subst n t p) = Ifm vs (bs[n:= Itm vs bs t]) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
663  | 
using nb nlm  | 
| 39246 | 664  | 
proof (induct p arbitrary: bs n t rule: fm.induct)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
665  | 
case (E p bs n)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
666  | 
  {fix x 
 | 
| 41807 | 667  | 
from E have bn: "boundslt (length (x#bs)) p" by simp  | 
668  | 
from E have nlm: "Suc n \<le> length (x#bs)" by simp  | 
|
669  | 
from E(1)[OF bn nlm] have "Ifm vs (x#bs) (subst (Suc n) (incrtm0 t) p) = Ifm vs ((x#bs)[Suc n:= Itm vs (x#bs) (incrtm0 t)]) p" by simp  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
670  | 
hence "Ifm vs (x#bs) (subst (Suc n) (incrtm0 t) p) = Ifm vs (x#bs[n:= Itm vs bs t]) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
671  | 
by (simp add: incrtm0[where x="x" and bs="bs" and t="t"]) }  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
672  | 
thus ?case by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
673  | 
next  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
674  | 
case (A p bs n)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
675  | 
  {fix x 
 | 
| 41807 | 676  | 
from A have bn: "boundslt (length (x#bs)) p" by simp  | 
677  | 
from A have nlm: "Suc n \<le> length (x#bs)" by simp  | 
|
678  | 
from A(1)[OF bn nlm] have "Ifm vs (x#bs) (subst (Suc n) (incrtm0 t) p) = Ifm vs ((x#bs)[Suc n:= Itm vs (x#bs) (incrtm0 t)]) p" by simp  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
679  | 
hence "Ifm vs (x#bs) (subst (Suc n) (incrtm0 t) p) = Ifm vs (x#bs[n:= Itm vs bs t]) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
680  | 
by (simp add: incrtm0[where x="x" and bs="bs" and t="t"]) }  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
681  | 
thus ?case by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
682  | 
qed(auto simp add: tmsubst)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
683  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
684  | 
lemma subst_nb: assumes tnb: "tmbound m t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
685  | 
shows "bound m (subst m t p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
686  | 
using tnb tmsubst_nb incrtm0_tmbound  | 
| 39246 | 687  | 
by (induct p arbitrary: m t rule: fm.induct, auto)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
688  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
689  | 
lemma not_qf[simp]: "qfree p \<Longrightarrow> qfree (not p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
690  | 
by (induct p rule: not.induct, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
691  | 
lemma not_bn0[simp]: "bound0 p \<Longrightarrow> bound0 (not p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
692  | 
by (induct p rule: not.induct, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
693  | 
lemma not_nb[simp]: "bound n p \<Longrightarrow> bound n (not p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
694  | 
by (induct p rule: not.induct, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
695  | 
lemma not_blt[simp]: "boundslt n p \<Longrightarrow> boundslt n (not p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
696  | 
by (induct p rule: not.induct, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
697  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
698  | 
lemma conj_qf[simp]: "\<lbrakk>qfree p ; qfree q\<rbrakk> \<Longrightarrow> qfree (conj p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
699  | 
using conj_def by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
700  | 
lemma conj_nb0[simp]: "\<lbrakk>bound0 p ; bound0 q\<rbrakk> \<Longrightarrow> bound0 (conj p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
701  | 
using conj_def by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
702  | 
lemma conj_nb[simp]: "\<lbrakk>bound n p ; bound n q\<rbrakk> \<Longrightarrow> bound n (conj p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
703  | 
using conj_def by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
704  | 
lemma conj_blt[simp]: "boundslt n p \<Longrightarrow> boundslt n q \<Longrightarrow> boundslt n (conj p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
705  | 
using conj_def by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
706  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
707  | 
lemma disj_qf[simp]: "\<lbrakk>qfree p ; qfree q\<rbrakk> \<Longrightarrow> qfree (disj p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
708  | 
using disj_def by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
709  | 
lemma disj_nb0[simp]: "\<lbrakk>bound0 p ; bound0 q\<rbrakk> \<Longrightarrow> bound0 (disj p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
710  | 
using disj_def by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
711  | 
lemma disj_nb[simp]: "\<lbrakk>bound n p ; bound n q\<rbrakk> \<Longrightarrow> bound n (disj p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
712  | 
using disj_def by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
713  | 
lemma disj_blt[simp]: "boundslt n p \<Longrightarrow> boundslt n q \<Longrightarrow> boundslt n (disj p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
714  | 
using disj_def by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
715  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
716  | 
lemma imp_qf[simp]: "\<lbrakk>qfree p ; qfree q\<rbrakk> \<Longrightarrow> qfree (imp p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
717  | 
using imp_def by (cases "p=F \<or> q=T",simp_all add: imp_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
718  | 
lemma imp_nb0[simp]: "\<lbrakk>bound0 p ; bound0 q\<rbrakk> \<Longrightarrow> bound0 (imp p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
719  | 
using imp_def by (cases "p=F \<or> q=T \<or> p=q",simp_all add: imp_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
720  | 
lemma imp_nb[simp]: "\<lbrakk>bound n p ; bound n q\<rbrakk> \<Longrightarrow> bound n (imp p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
721  | 
using imp_def by (cases "p=F \<or> q=T \<or> p=q",simp_all add: imp_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
722  | 
lemma imp_blt[simp]: "boundslt n p \<Longrightarrow> boundslt n q \<Longrightarrow> boundslt n (imp p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
723  | 
using imp_def by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
724  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
725  | 
lemma iff_qf[simp]: "\<lbrakk>qfree p ; qfree q\<rbrakk> \<Longrightarrow> qfree (iff p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
726  | 
by (unfold iff_def,cases "p=q", auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
727  | 
lemma iff_nb0[simp]: "\<lbrakk>bound0 p ; bound0 q\<rbrakk> \<Longrightarrow> bound0 (iff p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
728  | 
using iff_def by (unfold iff_def,cases "p=q", auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
729  | 
lemma iff_nb[simp]: "\<lbrakk>bound n p ; bound n q\<rbrakk> \<Longrightarrow> bound n (iff p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
730  | 
using iff_def by (unfold iff_def,cases "p=q", auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
731  | 
lemma iff_blt[simp]: "boundslt n p \<Longrightarrow> boundslt n q \<Longrightarrow> boundslt n (iff p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
732  | 
using iff_def by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
733  | 
lemma decr0_qf: "bound0 p \<Longrightarrow> qfree (decr0 p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
734  | 
by (induct p, simp_all)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
735  | 
|
| 41822 | 736  | 
fun isatom :: "fm \<Rightarrow> bool" (* test for atomicity *) where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
737  | 
"isatom T = True"  | 
| 41822 | 738  | 
| "isatom F = True"  | 
739  | 
| "isatom (Lt a) = True"  | 
|
740  | 
| "isatom (Le a) = True"  | 
|
741  | 
| "isatom (Eq a) = True"  | 
|
742  | 
| "isatom (NEq a) = True"  | 
|
743  | 
| "isatom p = False"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
744  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
745  | 
lemma bound0_qf: "bound0 p \<Longrightarrow> qfree p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
746  | 
by (induct p, simp_all)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
747  | 
|
| 
35416
 
d8d7d1b785af
replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
 
haftmann 
parents: 
35267 
diff
changeset
 | 
748  | 
definition djf :: "('a \<Rightarrow> fm) \<Rightarrow> 'a \<Rightarrow> fm \<Rightarrow> fm" where
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
749  | 
"djf f p q \<equiv> (if q=T then T else if q=F then f p else  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
750  | 
(let fp = f p in case fp of T \<Rightarrow> T | F \<Rightarrow> q | _ \<Rightarrow> Or (f p) q))"  | 
| 
35416
 
d8d7d1b785af
replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
 
haftmann 
parents: 
35267 
diff
changeset
 | 
751  | 
definition evaldjf :: "('a \<Rightarrow> fm) \<Rightarrow> 'a list \<Rightarrow> fm" where
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
752  | 
"evaldjf f ps \<equiv> foldr (djf f) ps F"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
753  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
754  | 
lemma djf_Or: "Ifm vs bs (djf f p q) = Ifm vs bs (Or (f p) q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
755  | 
by (cases "q=T", simp add: djf_def,cases "q=F",simp add: djf_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
756  | 
(cases "f p", simp_all add: Let_def djf_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
757  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
758  | 
lemma evaldjf_ex: "Ifm vs bs (evaldjf f ps) = (\<exists> p \<in> set ps. Ifm vs bs (f p))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
759  | 
by(induct ps, simp_all add: evaldjf_def djf_Or)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
760  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
761  | 
lemma evaldjf_bound0:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
762  | 
assumes nb: "\<forall> x\<in> set xs. bound0 (f x)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
763  | 
shows "bound0 (evaldjf f xs)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
764  | 
using nb by (induct xs, auto simp add: evaldjf_def djf_def Let_def) (case_tac "f a", auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
765  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
766  | 
lemma evaldjf_qf:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
767  | 
assumes nb: "\<forall> x\<in> set xs. qfree (f x)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
768  | 
shows "qfree (evaldjf f xs)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
769  | 
using nb by (induct xs, auto simp add: evaldjf_def djf_def Let_def) (case_tac "f a", auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
770  | 
|
| 41822 | 771  | 
fun disjuncts :: "fm \<Rightarrow> fm list" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
772  | 
"disjuncts (Or p q) = (disjuncts p) @ (disjuncts q)"  | 
| 41822 | 773  | 
| "disjuncts F = []"  | 
774  | 
| "disjuncts p = [p]"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
775  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
776  | 
lemma disjuncts: "(\<exists> q\<in> set (disjuncts p). Ifm vs bs q) = Ifm vs bs p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
777  | 
by(induct p rule: disjuncts.induct, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
778  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
779  | 
lemma disjuncts_nb: "bound0 p \<Longrightarrow> \<forall> q\<in> set (disjuncts p). bound0 q"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
780  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
781  | 
assume nb: "bound0 p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
782  | 
hence "list_all bound0 (disjuncts p)" by (induct p rule:disjuncts.induct,auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
783  | 
thus ?thesis by (simp only: list_all_iff)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
784  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
785  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
786  | 
lemma disjuncts_qf: "qfree p \<Longrightarrow> \<forall> q\<in> set (disjuncts p). qfree q"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
787  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
788  | 
assume qf: "qfree p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
789  | 
hence "list_all qfree (disjuncts p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
790  | 
by (induct p rule: disjuncts.induct, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
791  | 
thus ?thesis by (simp only: list_all_iff)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
792  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
793  | 
|
| 
35416
 
d8d7d1b785af
replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
 
haftmann 
parents: 
35267 
diff
changeset
 | 
794  | 
definition DJ :: "(fm \<Rightarrow> fm) \<Rightarrow> fm \<Rightarrow> fm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
795  | 
"DJ f p \<equiv> evaldjf f (disjuncts p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
796  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
797  | 
lemma DJ: assumes fdj: "\<forall> p q. Ifm vs bs (f (Or p q)) = Ifm vs bs (Or (f p) (f q))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
798  | 
and fF: "f F = F"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
799  | 
shows "Ifm vs bs (DJ f p) = Ifm vs bs (f p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
800  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
801  | 
have "Ifm vs bs (DJ f p) = (\<exists> q \<in> set (disjuncts p). Ifm vs bs (f q))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
802  | 
by (simp add: DJ_def evaldjf_ex)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
803  | 
also have "\<dots> = Ifm vs bs (f p)" using fdj fF by (induct p rule: disjuncts.induct, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
804  | 
finally show ?thesis .  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
805  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
806  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
807  | 
lemma DJ_qf: assumes  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
808  | 
fqf: "\<forall> p. qfree p \<longrightarrow> qfree (f p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
809  | 
shows "\<forall>p. qfree p \<longrightarrow> qfree (DJ f p) "  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
810  | 
proof(clarify)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
811  | 
fix p assume qf: "qfree p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
812  | 
have th: "DJ f p = evaldjf f (disjuncts p)" by (simp add: DJ_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
813  | 
from disjuncts_qf[OF qf] have "\<forall> q\<in> set (disjuncts p). qfree q" .  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
814  | 
with fqf have th':"\<forall> q\<in> set (disjuncts p). qfree (f q)" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
815  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
816  | 
from evaldjf_qf[OF th'] th show "qfree (DJ f p)" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
817  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
818  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
819  | 
lemma DJ_qe: assumes qe: "\<forall> bs p. qfree p \<longrightarrow> qfree (qe p) \<and> (Ifm vs bs (qe p) = Ifm vs bs (E p))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
820  | 
shows "\<forall> bs p. qfree p \<longrightarrow> qfree (DJ qe p) \<and> (Ifm vs bs ((DJ qe p)) = Ifm vs bs (E p))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
821  | 
proof(clarify)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
822  | 
fix p::fm and bs  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
823  | 
assume qf: "qfree p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
824  | 
from qe have qth: "\<forall> p. qfree p \<longrightarrow> qfree (qe p)" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
825  | 
from DJ_qf[OF qth] qf have qfth:"qfree (DJ qe p)" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
826  | 
have "Ifm vs bs (DJ qe p) = (\<exists> q\<in> set (disjuncts p). Ifm vs bs (qe q))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
827  | 
by (simp add: DJ_def evaldjf_ex)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
828  | 
also have "\<dots> = (\<exists> q \<in> set(disjuncts p). Ifm vs bs (E q))" using qe disjuncts_qf[OF qf] by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
829  | 
also have "\<dots> = Ifm vs bs (E p)" by (induct p rule: disjuncts.induct, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
830  | 
finally show "qfree (DJ qe p) \<and> Ifm vs bs (DJ qe p) = Ifm vs bs (E p)" using qfth by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
831  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
832  | 
|
| 41822 | 833  | 
fun conjuncts :: "fm \<Rightarrow> fm list" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
834  | 
"conjuncts (And p q) = (conjuncts p) @ (conjuncts q)"  | 
| 41822 | 835  | 
| "conjuncts T = []"  | 
836  | 
| "conjuncts p = [p]"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
837  | 
|
| 
35416
 
d8d7d1b785af
replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
 
haftmann 
parents: 
35267 
diff
changeset
 | 
838  | 
definition list_conj :: "fm list \<Rightarrow> fm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
839  | 
"list_conj ps \<equiv> foldr conj ps T"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
840  | 
|
| 
35416
 
d8d7d1b785af
replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
 
haftmann 
parents: 
35267 
diff
changeset
 | 
841  | 
definition CJNB :: "(fm \<Rightarrow> fm) \<Rightarrow> fm \<Rightarrow> fm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
842  | 
"CJNB f p \<equiv> (let cjs = conjuncts p ; (yes,no) = partition bound0 cjs  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
843  | 
in conj (decr0 (list_conj yes)) (f (list_conj no)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
844  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
845  | 
lemma conjuncts_qf: "qfree p \<Longrightarrow> \<forall> q\<in> set (conjuncts p). qfree q"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
846  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
847  | 
assume qf: "qfree p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
848  | 
hence "list_all qfree (conjuncts p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
849  | 
by (induct p rule: conjuncts.induct, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
850  | 
thus ?thesis by (simp only: list_all_iff)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
851  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
852  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
853  | 
lemma conjuncts: "(\<forall> q\<in> set (conjuncts p). Ifm vs bs q) = Ifm vs bs p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
854  | 
by(induct p rule: conjuncts.induct, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
855  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
856  | 
lemma conjuncts_nb: "bound0 p \<Longrightarrow> \<forall> q\<in> set (conjuncts p). bound0 q"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
857  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
858  | 
assume nb: "bound0 p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
859  | 
hence "list_all bound0 (conjuncts p)" by (induct p rule:conjuncts.induct,auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
860  | 
thus ?thesis by (simp only: list_all_iff)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
861  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
862  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
863  | 
fun islin :: "fm \<Rightarrow> bool" where  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
864  | 
"islin (And p q) = (islin p \<and> islin q \<and> p \<noteq> T \<and> p \<noteq> F \<and> q \<noteq> T \<and> q \<noteq> F)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
865  | 
| "islin (Or p q) = (islin p \<and> islin q \<and> p \<noteq> T \<and> p \<noteq> F \<and> q \<noteq> T \<and> q \<noteq> F)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
866  | 
| "islin (Eq (CNP 0 c s)) = (isnpoly c \<and> c \<noteq> 0\<^sub>p \<and> tmbound0 s \<and> allpolys isnpoly s)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
867  | 
| "islin (NEq (CNP 0 c s)) = (isnpoly c \<and> c \<noteq> 0\<^sub>p \<and> tmbound0 s \<and> allpolys isnpoly s)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
868  | 
| "islin (Lt (CNP 0 c s)) = (isnpoly c \<and> c \<noteq> 0\<^sub>p \<and> tmbound0 s \<and> allpolys isnpoly s)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
869  | 
| "islin (Le (CNP 0 c s)) = (isnpoly c \<and> c \<noteq> 0\<^sub>p \<and> tmbound0 s \<and> allpolys isnpoly s)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
870  | 
| "islin (NOT p) = False"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
871  | 
| "islin (Imp p q) = False"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
872  | 
| "islin (Iff p q) = False"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
873  | 
| "islin p = bound0 p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
874  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
875  | 
lemma islin_stupid: assumes nb: "tmbound0 p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
876  | 
shows "islin (Lt p)" and "islin (Le p)" and "islin (Eq p)" and "islin (NEq p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
877  | 
using nb by (cases p, auto, case_tac nat, auto)+  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
878  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
879  | 
definition "lt p = (case p of CP (C c) \<Rightarrow> if 0>\<^sub>N c then T else F| _ \<Rightarrow> Lt p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
880  | 
definition "le p = (case p of CP (C c) \<Rightarrow> if 0\<ge>\<^sub>N c then T else F | _ \<Rightarrow> Le p)"  | 
| 
38864
 
4abe644fcea5
formerly unnamed infix equality now named HOL.eq
 
haftmann 
parents: 
38795 
diff
changeset
 | 
881  | 
definition eq where "eq p = (case p of CP (C c) \<Rightarrow> if c = 0\<^sub>N then T else F | _ \<Rightarrow> Eq p)"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
882  | 
definition "neq p = not (eq p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
883  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
884  | 
lemma lt: "allpolys isnpoly p \<Longrightarrow> Ifm vs bs (lt p) = Ifm vs bs (Lt p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
885  | 
apply(simp add: lt_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
886  | 
apply(cases p, simp_all)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
887  | 
apply (case_tac poly, simp_all add: isnpoly_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
888  | 
done  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
889  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
890  | 
lemma le: "allpolys isnpoly p \<Longrightarrow> Ifm vs bs (le p) = Ifm vs bs (Le p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
891  | 
apply(simp add: le_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
892  | 
apply(cases p, simp_all)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
893  | 
apply (case_tac poly, simp_all add: isnpoly_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
894  | 
done  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
895  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
896  | 
lemma eq: "allpolys isnpoly p \<Longrightarrow> Ifm vs bs (eq p) = Ifm vs bs (Eq p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
897  | 
apply(simp add: eq_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
898  | 
apply(cases p, simp_all)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
899  | 
apply (case_tac poly, simp_all add: isnpoly_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
900  | 
done  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
901  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
902  | 
lemma neq: "allpolys isnpoly p \<Longrightarrow> Ifm vs bs (neq p) = Ifm vs bs (NEq p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
903  | 
by(simp add: neq_def eq)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
904  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
905  | 
lemma lt_lin: "tmbound0 p \<Longrightarrow> islin (lt p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
906  | 
apply (simp add: lt_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
907  | 
apply (cases p, simp_all)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
908  | 
apply (case_tac poly, simp_all)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
909  | 
apply (case_tac nat, simp_all)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
910  | 
done  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
911  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
912  | 
lemma le_lin: "tmbound0 p \<Longrightarrow> islin (le p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
913  | 
apply (simp add: le_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
914  | 
apply (cases p, simp_all)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
915  | 
apply (case_tac poly, simp_all)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
916  | 
apply (case_tac nat, simp_all)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
917  | 
done  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
918  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
919  | 
lemma eq_lin: "tmbound0 p \<Longrightarrow> islin (eq p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
920  | 
apply (simp add: eq_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
921  | 
apply (cases p, simp_all)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
922  | 
apply (case_tac poly, simp_all)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
923  | 
apply (case_tac nat, simp_all)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
924  | 
done  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
925  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
926  | 
lemma neq_lin: "tmbound0 p \<Longrightarrow> islin (neq p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
927  | 
apply (simp add: neq_def eq_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
928  | 
apply (cases p, simp_all)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
929  | 
apply (case_tac poly, simp_all)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
930  | 
apply (case_tac nat, simp_all)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
931  | 
done  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
932  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
933  | 
definition "simplt t = (let (c,s) = split0 (simptm t) in if c= 0\<^sub>p then lt s else Lt (CNP 0 c s))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
934  | 
definition "simple t = (let (c,s) = split0 (simptm t) in if c= 0\<^sub>p then le s else Le (CNP 0 c s))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
935  | 
definition "simpeq t = (let (c,s) = split0 (simptm t) in if c= 0\<^sub>p then eq s else Eq (CNP 0 c s))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
936  | 
definition "simpneq t = (let (c,s) = split0 (simptm t) in if c= 0\<^sub>p then neq s else NEq (CNP 0 c s))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
937  | 
|
| 36409 | 938  | 
lemma simplt_islin[simp]:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
939  | 
shows "islin (simplt t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
940  | 
unfolding simplt_def  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
941  | 
using split0_nb0'  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
942  | 
by (auto simp add: lt_lin Let_def split_def isnpoly_fst_split0[OF simptm_allpolys_npoly] islin_stupid allpolys_split0[OF simptm_allpolys_npoly])  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
943  | 
|
| 36409 | 944  | 
lemma simple_islin[simp]:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
945  | 
shows "islin (simple t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
946  | 
unfolding simple_def  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
947  | 
using split0_nb0'  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
948  | 
by (auto simp add: Let_def split_def isnpoly_fst_split0[OF simptm_allpolys_npoly] islin_stupid allpolys_split0[OF simptm_allpolys_npoly] le_lin)  | 
| 36409 | 949  | 
lemma simpeq_islin[simp]:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
950  | 
shows "islin (simpeq t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
951  | 
unfolding simpeq_def  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
952  | 
using split0_nb0'  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
953  | 
by (auto simp add: Let_def split_def isnpoly_fst_split0[OF simptm_allpolys_npoly] islin_stupid allpolys_split0[OF simptm_allpolys_npoly] eq_lin)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
954  | 
|
| 36409 | 955  | 
lemma simpneq_islin[simp]:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
956  | 
shows "islin (simpneq t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
957  | 
unfolding simpneq_def  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
958  | 
using split0_nb0'  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
959  | 
by (auto simp add: Let_def split_def isnpoly_fst_split0[OF simptm_allpolys_npoly] islin_stupid allpolys_split0[OF simptm_allpolys_npoly] neq_lin)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
960  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
961  | 
lemma really_stupid: "\<not> (\<forall>c1 s'. (c1, s') \<noteq> split0 s)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
962  | 
by (cases "split0 s", auto)  | 
| 36409 | 963  | 
lemma split0_npoly:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
964  | 
and n: "allpolys isnpoly t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
965  | 
shows "isnpoly (fst (split0 t))" and "allpolys isnpoly (snd (split0 t))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
966  | 
using n  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
967  | 
by (induct t rule: split0.induct, auto simp add: Let_def split_def polyadd_norm polymul_norm polyneg_norm polysub_norm really_stupid)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
968  | 
lemma simplt[simp]:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
969  | 
shows "Ifm vs bs (simplt t) = Ifm vs bs (Lt t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
970  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
971  | 
have n: "allpolys isnpoly (simptm t)" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
972  | 
let ?t = "simptm t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
973  | 
  {assume "fst (split0 ?t) = 0\<^sub>p" hence ?thesis
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
974  | 
using split0[of "simptm t" vs bs] lt[OF split0_npoly(2)[OF n], of vs bs]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
975  | 
by (simp add: simplt_def Let_def split_def lt)}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
976  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
977  | 
  {assume "fst (split0 ?t) \<noteq> 0\<^sub>p"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
978  | 
hence ?thesis using split0[of "simptm t" vs bs] by (simp add: simplt_def Let_def split_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
979  | 
}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
980  | 
ultimately show ?thesis by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
981  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
982  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
983  | 
lemma simple[simp]:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
984  | 
shows "Ifm vs bs (simple t) = Ifm vs bs (Le t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
985  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
986  | 
have n: "allpolys isnpoly (simptm t)" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
987  | 
let ?t = "simptm t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
988  | 
  {assume "fst (split0 ?t) = 0\<^sub>p" hence ?thesis
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
989  | 
using split0[of "simptm t" vs bs] le[OF split0_npoly(2)[OF n], of vs bs]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
990  | 
by (simp add: simple_def Let_def split_def le)}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
991  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
992  | 
  {assume "fst (split0 ?t) \<noteq> 0\<^sub>p"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
993  | 
hence ?thesis using split0[of "simptm t" vs bs] by (simp add: simple_def Let_def split_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
994  | 
}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
995  | 
ultimately show ?thesis by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
996  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
997  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
998  | 
lemma simpeq[simp]:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
999  | 
shows "Ifm vs bs (simpeq t) = Ifm vs bs (Eq t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1000  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1001  | 
have n: "allpolys isnpoly (simptm t)" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1002  | 
let ?t = "simptm t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1003  | 
  {assume "fst (split0 ?t) = 0\<^sub>p" hence ?thesis
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1004  | 
using split0[of "simptm t" vs bs] eq[OF split0_npoly(2)[OF n], of vs bs]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1005  | 
by (simp add: simpeq_def Let_def split_def)}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1006  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1007  | 
  {assume "fst (split0 ?t) \<noteq> 0\<^sub>p"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1008  | 
hence ?thesis using split0[of "simptm t" vs bs] by (simp add: simpeq_def Let_def split_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1009  | 
}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1010  | 
ultimately show ?thesis by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1011  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1012  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1013  | 
lemma simpneq[simp]:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1014  | 
shows "Ifm vs bs (simpneq t) = Ifm vs bs (NEq t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1015  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1016  | 
have n: "allpolys isnpoly (simptm t)" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1017  | 
let ?t = "simptm t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1018  | 
  {assume "fst (split0 ?t) = 0\<^sub>p" hence ?thesis
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1019  | 
using split0[of "simptm t" vs bs] neq[OF split0_npoly(2)[OF n], of vs bs]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1020  | 
by (simp add: simpneq_def Let_def split_def )}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1021  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1022  | 
  {assume "fst (split0 ?t) \<noteq> 0\<^sub>p"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1023  | 
hence ?thesis using split0[of "simptm t" vs bs] by (simp add: simpneq_def Let_def split_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1024  | 
}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1025  | 
ultimately show ?thesis by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1026  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1027  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1028  | 
lemma lt_nb: "tmbound0 t \<Longrightarrow> bound0 (lt t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1029  | 
apply (simp add: lt_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1030  | 
apply (cases t, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1031  | 
apply (case_tac poly, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1032  | 
done  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1033  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1034  | 
lemma le_nb: "tmbound0 t \<Longrightarrow> bound0 (le t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1035  | 
apply (simp add: le_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1036  | 
apply (cases t, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1037  | 
apply (case_tac poly, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1038  | 
done  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1039  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1040  | 
lemma eq_nb: "tmbound0 t \<Longrightarrow> bound0 (eq t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1041  | 
apply (simp add: eq_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1042  | 
apply (cases t, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1043  | 
apply (case_tac poly, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1044  | 
done  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1045  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1046  | 
lemma neq_nb: "tmbound0 t \<Longrightarrow> bound0 (neq t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1047  | 
apply (simp add: neq_def eq_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1048  | 
apply (cases t, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1049  | 
apply (case_tac poly, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1050  | 
done  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1051  | 
|
| 36409 | 1052  | 
lemma simplt_nb[simp]:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1053  | 
shows "tmbound0 t \<Longrightarrow> bound0 (simplt t)"  | 
| 
48562
 
f6d6d58fa318
tuned proofs -- avoid odd situations of polymorphic Frees in goal state;
 
wenzelm 
parents: 
47108 
diff
changeset
 | 
1054  | 
using split0 [of "simptm t" "vs::'a list" bs]  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1055  | 
proof(simp add: simplt_def Let_def split_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1056  | 
assume nb: "tmbound0 t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1057  | 
hence nb': "tmbound0 (simptm t)" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1058  | 
let ?c = "fst (split0 (simptm t))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1059  | 
from tmbound_split0[OF nb'[unfolded tmbound0_tmbound_iff[symmetric]]]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1060  | 
have th: "\<forall>bs. Ipoly bs ?c = Ipoly bs 0\<^sub>p" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1061  | 
from isnpoly_fst_split0[OF simptm_allpolys_npoly[of t]]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1062  | 
have ths: "isnpolyh ?c 0" "isnpolyh 0\<^sub>p 0" by (simp_all add: isnpoly_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1063  | 
from iffD1[OF isnpolyh_unique[OF ths] th]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1064  | 
have "fst (split0 (simptm t)) = 0\<^sub>p" .  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1065  | 
thus "(fst (split0 (simptm t)) = 0\<^sub>p \<longrightarrow> bound0 (lt (snd (split0 (simptm t))))) \<and>  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1066  | 
fst (split0 (simptm t)) = 0\<^sub>p" by (simp add: simplt_def Let_def split_def lt_nb)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1067  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1068  | 
|
| 36409 | 1069  | 
lemma simple_nb[simp]:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1070  | 
shows "tmbound0 t \<Longrightarrow> bound0 (simple t)"  | 
| 
48562
 
f6d6d58fa318
tuned proofs -- avoid odd situations of polymorphic Frees in goal state;
 
wenzelm 
parents: 
47108 
diff
changeset
 | 
1071  | 
using split0 [of "simptm t" "vs::'a list" bs]  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1072  | 
proof(simp add: simple_def Let_def split_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1073  | 
assume nb: "tmbound0 t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1074  | 
hence nb': "tmbound0 (simptm t)" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1075  | 
let ?c = "fst (split0 (simptm t))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1076  | 
from tmbound_split0[OF nb'[unfolded tmbound0_tmbound_iff[symmetric]]]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1077  | 
have th: "\<forall>bs. Ipoly bs ?c = Ipoly bs 0\<^sub>p" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1078  | 
from isnpoly_fst_split0[OF simptm_allpolys_npoly[of t]]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1079  | 
have ths: "isnpolyh ?c 0" "isnpolyh 0\<^sub>p 0" by (simp_all add: isnpoly_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1080  | 
from iffD1[OF isnpolyh_unique[OF ths] th]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1081  | 
have "fst (split0 (simptm t)) = 0\<^sub>p" .  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1082  | 
thus "(fst (split0 (simptm t)) = 0\<^sub>p \<longrightarrow> bound0 (le (snd (split0 (simptm t))))) \<and>  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1083  | 
fst (split0 (simptm t)) = 0\<^sub>p" by (simp add: simplt_def Let_def split_def le_nb)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1084  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1085  | 
|
| 36409 | 1086  | 
lemma simpeq_nb[simp]:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1087  | 
shows "tmbound0 t \<Longrightarrow> bound0 (simpeq t)"  | 
| 
48562
 
f6d6d58fa318
tuned proofs -- avoid odd situations of polymorphic Frees in goal state;
 
wenzelm 
parents: 
47108 
diff
changeset
 | 
1088  | 
using split0 [of "simptm t" "vs::'a list" bs]  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1089  | 
proof(simp add: simpeq_def Let_def split_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1090  | 
assume nb: "tmbound0 t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1091  | 
hence nb': "tmbound0 (simptm t)" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1092  | 
let ?c = "fst (split0 (simptm t))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1093  | 
from tmbound_split0[OF nb'[unfolded tmbound0_tmbound_iff[symmetric]]]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1094  | 
have th: "\<forall>bs. Ipoly bs ?c = Ipoly bs 0\<^sub>p" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1095  | 
from isnpoly_fst_split0[OF simptm_allpolys_npoly[of t]]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1096  | 
have ths: "isnpolyh ?c 0" "isnpolyh 0\<^sub>p 0" by (simp_all add: isnpoly_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1097  | 
from iffD1[OF isnpolyh_unique[OF ths] th]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1098  | 
have "fst (split0 (simptm t)) = 0\<^sub>p" .  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1099  | 
thus "(fst (split0 (simptm t)) = 0\<^sub>p \<longrightarrow> bound0 (eq (snd (split0 (simptm t))))) \<and>  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1100  | 
fst (split0 (simptm t)) = 0\<^sub>p" by (simp add: simpeq_def Let_def split_def eq_nb)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1101  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1102  | 
|
| 36409 | 1103  | 
lemma simpneq_nb[simp]:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1104  | 
shows "tmbound0 t \<Longrightarrow> bound0 (simpneq t)"  | 
| 
48562
 
f6d6d58fa318
tuned proofs -- avoid odd situations of polymorphic Frees in goal state;
 
wenzelm 
parents: 
47108 
diff
changeset
 | 
1105  | 
using split0 [of "simptm t" "vs::'a list" bs]  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1106  | 
proof(simp add: simpneq_def Let_def split_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1107  | 
assume nb: "tmbound0 t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1108  | 
hence nb': "tmbound0 (simptm t)" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1109  | 
let ?c = "fst (split0 (simptm t))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1110  | 
from tmbound_split0[OF nb'[unfolded tmbound0_tmbound_iff[symmetric]]]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1111  | 
have th: "\<forall>bs. Ipoly bs ?c = Ipoly bs 0\<^sub>p" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1112  | 
from isnpoly_fst_split0[OF simptm_allpolys_npoly[of t]]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1113  | 
have ths: "isnpolyh ?c 0" "isnpolyh 0\<^sub>p 0" by (simp_all add: isnpoly_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1114  | 
from iffD1[OF isnpolyh_unique[OF ths] th]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1115  | 
have "fst (split0 (simptm t)) = 0\<^sub>p" .  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1116  | 
thus "(fst (split0 (simptm t)) = 0\<^sub>p \<longrightarrow> bound0 (neq (snd (split0 (simptm t))))) \<and>  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1117  | 
fst (split0 (simptm t)) = 0\<^sub>p" by (simp add: simpneq_def Let_def split_def neq_nb)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1118  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1119  | 
|
| 41822 | 1120  | 
fun conjs :: "fm \<Rightarrow> fm list" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1121  | 
"conjs (And p q) = (conjs p)@(conjs q)"  | 
| 41822 | 1122  | 
| "conjs T = []"  | 
1123  | 
| "conjs p = [p]"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1124  | 
lemma conjs_ci: "(\<forall> q \<in> set (conjs p). Ifm vs bs q) = Ifm vs bs p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1125  | 
by (induct p rule: conjs.induct, auto)  | 
| 
35416
 
d8d7d1b785af
replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
 
haftmann 
parents: 
35267 
diff
changeset
 | 
1126  | 
definition list_disj :: "fm list \<Rightarrow> fm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1127  | 
"list_disj ps \<equiv> foldr disj ps F"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1128  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1129  | 
lemma list_conj: "Ifm vs bs (list_conj ps) = (\<forall>p\<in> set ps. Ifm vs bs p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1130  | 
by (induct ps, auto simp add: list_conj_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1131  | 
lemma list_conj_qf: " \<forall>p\<in> set ps. qfree p \<Longrightarrow> qfree (list_conj ps)"  | 
| 
50045
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
1132  | 
by (induct ps, auto simp add: list_conj_def)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1133  | 
lemma list_disj: "Ifm vs bs (list_disj ps) = (\<exists>p\<in> set ps. Ifm vs bs p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1134  | 
by (induct ps, auto simp add: list_disj_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1135  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1136  | 
lemma conj_boundslt: "boundslt n p \<Longrightarrow> boundslt n q \<Longrightarrow> boundslt n (conj p q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1137  | 
unfolding conj_def by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1138  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1139  | 
lemma conjs_nb: "bound n p \<Longrightarrow> \<forall>q\<in> set (conjs p). bound n q"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1140  | 
apply (induct p rule: conjs.induct)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1141  | 
apply (unfold conjs.simps)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1142  | 
apply (unfold set_append)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1143  | 
apply (unfold ball_Un)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1144  | 
apply (unfold bound.simps)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1145  | 
apply auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1146  | 
done  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1147  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1148  | 
lemma conjs_boundslt: "boundslt n p \<Longrightarrow> \<forall>q\<in> set (conjs p). boundslt n q"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1149  | 
apply (induct p rule: conjs.induct)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1150  | 
apply (unfold conjs.simps)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1151  | 
apply (unfold set_append)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1152  | 
apply (unfold ball_Un)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1153  | 
apply (unfold boundslt.simps)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1154  | 
apply blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1155  | 
by simp_all  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1156  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1157  | 
lemma list_conj_boundslt: " \<forall>p\<in> set ps. boundslt n p \<Longrightarrow> boundslt n (list_conj ps)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1158  | 
unfolding list_conj_def  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1159  | 
by (induct ps, auto simp add: conj_boundslt)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1160  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1161  | 
lemma list_conj_nb: assumes bnd: "\<forall>p\<in> set ps. bound n p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1162  | 
shows "bound n (list_conj ps)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1163  | 
using bnd  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1164  | 
unfolding list_conj_def  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1165  | 
by (induct ps, auto simp add: conj_nb)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1166  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1167  | 
lemma list_conj_nb': "\<forall>p\<in>set ps. bound0 p \<Longrightarrow> bound0 (list_conj ps)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1168  | 
unfolding list_conj_def by (induct ps , auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1169  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1170  | 
lemma CJNB_qe:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1171  | 
assumes qe: "\<forall> bs p. qfree p \<longrightarrow> qfree (qe p) \<and> (Ifm vs bs (qe p) = Ifm vs bs (E p))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1172  | 
shows "\<forall> bs p. qfree p \<longrightarrow> qfree (CJNB qe p) \<and> (Ifm vs bs ((CJNB qe p)) = Ifm vs bs (E p))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1173  | 
proof(clarify)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1174  | 
fix bs p  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1175  | 
assume qfp: "qfree p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1176  | 
let ?cjs = "conjuncts p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1177  | 
let ?yes = "fst (partition bound0 ?cjs)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1178  | 
let ?no = "snd (partition bound0 ?cjs)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1179  | 
let ?cno = "list_conj ?no"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1180  | 
let ?cyes = "list_conj ?yes"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1181  | 
have part: "partition bound0 ?cjs = (?yes,?no)" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1182  | 
from partition_P[OF part] have "\<forall> q\<in> set ?yes. bound0 q" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1183  | 
hence yes_nb: "bound0 ?cyes" by (simp add: list_conj_nb')  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1184  | 
hence yes_qf: "qfree (decr0 ?cyes )" by (simp add: decr0_qf)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1185  | 
from conjuncts_qf[OF qfp] partition_set[OF part]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1186  | 
have " \<forall>q\<in> set ?no. qfree q" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1187  | 
hence no_qf: "qfree ?cno"by (simp add: list_conj_qf)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1188  | 
with qe have cno_qf:"qfree (qe ?cno )"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1189  | 
and noE: "Ifm vs bs (qe ?cno) = Ifm vs bs (E ?cno)" by blast+  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1190  | 
from cno_qf yes_qf have qf: "qfree (CJNB qe p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1191  | 
by (simp add: CJNB_def Let_def conj_qf split_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1192  | 
  {fix bs
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1193  | 
from conjuncts have "Ifm vs bs p = (\<forall>q\<in> set ?cjs. Ifm vs bs q)" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1194  | 
also have "\<dots> = ((\<forall>q\<in> set ?yes. Ifm vs bs q) \<and> (\<forall>q\<in> set ?no. Ifm vs bs q))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1195  | 
using partition_set[OF part] by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1196  | 
finally have "Ifm vs bs p = ((Ifm vs bs ?cyes) \<and> (Ifm vs bs ?cno))" using list_conj[of vs bs] by simp}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1197  | 
hence "Ifm vs bs (E p) = (\<exists>x. (Ifm vs (x#bs) ?cyes) \<and> (Ifm vs (x#bs) ?cno))" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1198  | 
also have "\<dots> = (\<exists>x. (Ifm vs (y#bs) ?cyes) \<and> (Ifm vs (x#bs) ?cno))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1199  | 
using bound0_I[OF yes_nb, where bs="bs" and b'="y"] by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1200  | 
also have "\<dots> = (Ifm vs bs (decr0 ?cyes) \<and> Ifm vs bs (E ?cno))"  | 
| 
33639
 
603320b93668
New list theorems; added map_map to simpset, this is the prefered direction; allow sorting by a key
 
hoelzl 
parents: 
33268 
diff
changeset
 | 
1201  | 
by (auto simp add: decr0[OF yes_nb] simp del: partition_filter_conv)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1202  | 
also have "\<dots> = (Ifm vs bs (conj (decr0 ?cyes) (qe ?cno)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1203  | 
using qe[rule_format, OF no_qf] by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1204  | 
finally have "Ifm vs bs (E p) = Ifm vs bs (CJNB qe p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1205  | 
by (simp add: Let_def CJNB_def split_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1206  | 
with qf show "qfree (CJNB qe p) \<and> Ifm vs bs (CJNB qe p) = Ifm vs bs (E p)" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1207  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1208  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1209  | 
consts simpfm :: "fm \<Rightarrow> fm"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1210  | 
recdef simpfm "measure fmsize"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1211  | 
"simpfm (Lt t) = simplt (simptm t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1212  | 
"simpfm (Le t) = simple (simptm t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1213  | 
"simpfm (Eq t) = simpeq(simptm t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1214  | 
"simpfm (NEq t) = simpneq(simptm t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1215  | 
"simpfm (And p q) = conj (simpfm p) (simpfm q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1216  | 
"simpfm (Or p q) = disj (simpfm p) (simpfm q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1217  | 
"simpfm (Imp p q) = disj (simpfm (NOT p)) (simpfm q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1218  | 
"simpfm (Iff p q) = disj (conj (simpfm p) (simpfm q)) (conj (simpfm (NOT p)) (simpfm (NOT q)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1219  | 
"simpfm (NOT (And p q)) = disj (simpfm (NOT p)) (simpfm (NOT q))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1220  | 
"simpfm (NOT (Or p q)) = conj (simpfm (NOT p)) (simpfm (NOT q))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1221  | 
"simpfm (NOT (Imp p q)) = conj (simpfm p) (simpfm (NOT q))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1222  | 
"simpfm (NOT (Iff p q)) = disj (conj (simpfm p) (simpfm (NOT q))) (conj (simpfm (NOT p)) (simpfm q))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1223  | 
"simpfm (NOT (Eq t)) = simpneq t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1224  | 
"simpfm (NOT (NEq t)) = simpeq t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1225  | 
"simpfm (NOT (Le t)) = simplt (Neg t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1226  | 
"simpfm (NOT (Lt t)) = simple (Neg t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1227  | 
"simpfm (NOT (NOT p)) = simpfm p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1228  | 
"simpfm (NOT T) = F"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1229  | 
"simpfm (NOT F) = T"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1230  | 
"simpfm p = p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1231  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1232  | 
lemma simpfm[simp]: "Ifm vs bs (simpfm p) = Ifm vs bs p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1233  | 
by(induct p arbitrary: bs rule: simpfm.induct, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1234  | 
|
| 36409 | 1235  | 
lemma simpfm_bound0:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1236  | 
shows "bound0 p \<Longrightarrow> bound0 (simpfm p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1237  | 
by (induct p rule: simpfm.induct, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1238  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1239  | 
lemma lt_qf[simp]: "qfree (lt t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1240  | 
apply (cases t, auto simp add: lt_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1241  | 
by (case_tac poly, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1242  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1243  | 
lemma le_qf[simp]: "qfree (le t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1244  | 
apply (cases t, auto simp add: le_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1245  | 
by (case_tac poly, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1246  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1247  | 
lemma eq_qf[simp]: "qfree (eq t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1248  | 
apply (cases t, auto simp add: eq_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1249  | 
by (case_tac poly, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1250  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1251  | 
lemma neq_qf[simp]: "qfree (neq t)" by (simp add: neq_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1252  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1253  | 
lemma simplt_qf[simp]: "qfree (simplt t)" by (simp add: simplt_def Let_def split_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1254  | 
lemma simple_qf[simp]: "qfree (simple t)" by (simp add: simple_def Let_def split_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1255  | 
lemma simpeq_qf[simp]: "qfree (simpeq t)" by (simp add: simpeq_def Let_def split_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1256  | 
lemma simpneq_qf[simp]: "qfree (simpneq t)" by (simp add: simpneq_def Let_def split_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1257  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1258  | 
lemma simpfm_qf[simp]: "qfree p \<Longrightarrow> qfree (simpfm p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1259  | 
by (induct p rule: simpfm.induct, auto simp add: disj_qf imp_qf iff_qf conj_qf not_qf Let_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1260  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1261  | 
lemma disj_lin: "islin p \<Longrightarrow> islin q \<Longrightarrow> islin (disj p q)" by (simp add: disj_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1262  | 
lemma conj_lin: "islin p \<Longrightarrow> islin q \<Longrightarrow> islin (conj p q)" by (simp add: conj_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1263  | 
|
| 36409 | 1264  | 
lemma   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1265  | 
shows "qfree p \<Longrightarrow> islin (simpfm p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1266  | 
apply (induct p rule: simpfm.induct)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1267  | 
apply (simp_all add: conj_lin disj_lin)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1268  | 
done  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1269  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1270  | 
consts prep :: "fm \<Rightarrow> fm"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1271  | 
recdef prep "measure fmsize"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1272  | 
"prep (E T) = T"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1273  | 
"prep (E F) = F"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1274  | 
"prep (E (Or p q)) = disj (prep (E p)) (prep (E q))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1275  | 
"prep (E (Imp p q)) = disj (prep (E (NOT p))) (prep (E q))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1276  | 
"prep (E (Iff p q)) = disj (prep (E (And p q))) (prep (E (And (NOT p) (NOT q))))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1277  | 
"prep (E (NOT (And p q))) = disj (prep (E (NOT p))) (prep (E(NOT q)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1278  | 
"prep (E (NOT (Imp p q))) = prep (E (And p (NOT q)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1279  | 
"prep (E (NOT (Iff p q))) = disj (prep (E (And p (NOT q)))) (prep (E(And (NOT p) q)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1280  | 
"prep (E p) = E (prep p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1281  | 
"prep (A (And p q)) = conj (prep (A p)) (prep (A q))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1282  | 
"prep (A p) = prep (NOT (E (NOT p)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1283  | 
"prep (NOT (NOT p)) = prep p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1284  | 
"prep (NOT (And p q)) = disj (prep (NOT p)) (prep (NOT q))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1285  | 
"prep (NOT (A p)) = prep (E (NOT p))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1286  | 
"prep (NOT (Or p q)) = conj (prep (NOT p)) (prep (NOT q))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1287  | 
"prep (NOT (Imp p q)) = conj (prep p) (prep (NOT q))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1288  | 
"prep (NOT (Iff p q)) = disj (prep (And p (NOT q))) (prep (And (NOT p) q))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1289  | 
"prep (NOT p) = not (prep p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1290  | 
"prep (Or p q) = disj (prep p) (prep q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1291  | 
"prep (And p q) = conj (prep p) (prep q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1292  | 
"prep (Imp p q) = prep (Or (NOT p) q)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1293  | 
"prep (Iff p q) = disj (prep (And p q)) (prep (And (NOT p) (NOT q)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1294  | 
"prep p = p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1295  | 
(hints simp add: fmsize_pos)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1296  | 
lemma prep: "Ifm vs bs (prep p) = Ifm vs bs p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1297  | 
by (induct p arbitrary: bs rule: prep.induct, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1298  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1299  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1300  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1301  | 
(* Generic quantifier elimination *)  | 
| 41822 | 1302  | 
function (sequential) qelim :: "fm \<Rightarrow> (fm \<Rightarrow> fm) \<Rightarrow> fm" where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1303  | 
"qelim (E p) = (\<lambda> qe. DJ (CJNB qe) (qelim p qe))"  | 
| 41822 | 1304  | 
| "qelim (A p) = (\<lambda> qe. not (qe ((qelim (NOT p) qe))))"  | 
1305  | 
| "qelim (NOT p) = (\<lambda> qe. not (qelim p qe))"  | 
|
1306  | 
| "qelim (And p q) = (\<lambda> qe. conj (qelim p qe) (qelim q qe))"  | 
|
1307  | 
| "qelim (Or p q) = (\<lambda> qe. disj (qelim p qe) (qelim q qe))"  | 
|
1308  | 
| "qelim (Imp p q) = (\<lambda> qe. imp (qelim p qe) (qelim q qe))"  | 
|
1309  | 
| "qelim (Iff p q) = (\<lambda> qe. iff (qelim p qe) (qelim q qe))"  | 
|
1310  | 
| "qelim p = (\<lambda> y. simpfm p)"  | 
|
1311  | 
by pat_completeness simp_all  | 
|
1312  | 
termination by (relation "measure fmsize") auto  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1313  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1314  | 
lemma qelim:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1315  | 
assumes qe_inv: "\<forall> bs p. qfree p \<longrightarrow> qfree (qe p) \<and> (Ifm vs bs (qe p) = Ifm vs bs (E p))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1316  | 
shows "\<And> bs. qfree (qelim p qe) \<and> (Ifm vs bs (qelim p qe) = Ifm vs bs p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1317  | 
using qe_inv DJ_qe[OF CJNB_qe[OF qe_inv]]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1318  | 
by (induct p rule: qelim.induct) auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1319  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1320  | 
subsection{* Core Procedure *}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1321  | 
|
| 41822 | 1322  | 
fun minusinf:: "fm \<Rightarrow> fm" (* Virtual substitution of -\<infinity>*) where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1323  | 
"minusinf (And p q) = conj (minusinf p) (minusinf q)"  | 
| 41822 | 1324  | 
| "minusinf (Or p q) = disj (minusinf p) (minusinf q)"  | 
1325  | 
| "minusinf (Eq (CNP 0 c e)) = conj (eq (CP c)) (eq e)"  | 
|
1326  | 
| "minusinf (NEq (CNP 0 c e)) = disj (not (eq e)) (not (eq (CP c)))"  | 
|
1327  | 
| "minusinf (Lt (CNP 0 c e)) = disj (conj (eq (CP c)) (lt e)) (lt (CP (~\<^sub>p c)))"  | 
|
1328  | 
| "minusinf (Le (CNP 0 c e)) = disj (conj (eq (CP c)) (le e)) (lt (CP (~\<^sub>p c)))"  | 
|
1329  | 
| "minusinf p = p"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1330  | 
|
| 41822 | 1331  | 
fun plusinf:: "fm \<Rightarrow> fm" (* Virtual substitution of +\<infinity>*) where  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1332  | 
"plusinf (And p q) = conj (plusinf p) (plusinf q)"  | 
| 41822 | 1333  | 
| "plusinf (Or p q) = disj (plusinf p) (plusinf q)"  | 
1334  | 
| "plusinf (Eq (CNP 0 c e)) = conj (eq (CP c)) (eq e)"  | 
|
1335  | 
| "plusinf (NEq (CNP 0 c e)) = disj (not (eq e)) (not (eq (CP c)))"  | 
|
1336  | 
| "plusinf (Lt (CNP 0 c e)) = disj (conj (eq (CP c)) (lt e)) (lt (CP c))"  | 
|
1337  | 
| "plusinf (Le (CNP 0 c e)) = disj (conj (eq (CP c)) (le e)) (lt (CP c))"  | 
|
1338  | 
| "plusinf p = p"  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1339  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1340  | 
lemma minusinf_inf: assumes lp:"islin p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1341  | 
shows "\<exists>z. \<forall>x < z. Ifm vs (x#bs) (minusinf p) \<longleftrightarrow> Ifm vs (x#bs) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1342  | 
using lp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1343  | 
proof (induct p rule: minusinf.induct)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1344  | 
case 1 thus ?case by (auto,rule_tac x="min z za" in exI, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1345  | 
next  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1346  | 
case 2 thus ?case by (auto,rule_tac x="min z za" in exI, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1347  | 
next  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1348  | 
case (3 c e) hence nbe: "tmbound0 e" by simp  | 
| 41807 | 1349  | 
from 3 have nc: "allpolys isnpoly (CP c)" "allpolys isnpoly e" by simp_all  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1350  | 
note eqs = eq[OF nc(1), where ?'a = 'a] eq[OF nc(2), where ?'a = 'a]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1351  | 
let ?c = "Ipoly vs c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1352  | 
let ?e = "Itm vs (y#bs) e"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1353  | 
have "?c=0 \<or> ?c > 0 \<or> ?c < 0" by arith  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1354  | 
  moreover {assume "?c = 0" hence ?case 
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1355  | 
using eq[OF nc(2), of vs] eq[OF nc(1), of vs] by auto}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1356  | 
  moreover {assume cp: "?c > 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1357  | 
    {fix x assume xz: "x < -?e / ?c" hence "?c * x < - ?e"
 | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1358  | 
using pos_less_divide_eq[OF cp, where a="x" and b="-?e"] by (simp add: mult_commute)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1359  | 
hence "?c * x + ?e < 0" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1360  | 
hence "Ifm vs (x#bs) (Eq (CNP 0 c e)) = Ifm vs (x#bs) (minusinf (Eq (CNP 0 c e)))"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1361  | 
using eqs tmbound0_I[OF nbe, where b="y" and b'="x" and vs=vs and bs=bs] by auto} hence ?case by auto}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1362  | 
  moreover {assume cp: "?c < 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1363  | 
    {fix x assume xz: "x < -?e / ?c" hence "?c * x > - ?e"
 | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1364  | 
using neg_less_divide_eq[OF cp, where a="x" and b="-?e"] by (simp add: mult_commute)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1365  | 
hence "?c * x + ?e > 0" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1366  | 
hence "Ifm vs (x#bs) (Eq (CNP 0 c e)) = Ifm vs (x#bs) (minusinf (Eq (CNP 0 c e)))"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1367  | 
using tmbound0_I[OF nbe, where b="y" and b'="x"] eqs by auto} hence ?case by auto}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1368  | 
ultimately show ?case by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1369  | 
next  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1370  | 
case (4 c e) hence nbe: "tmbound0 e" by simp  | 
| 41807 | 1371  | 
from 4 have nc: "allpolys isnpoly (CP c)" "allpolys isnpoly e" by simp_all  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1372  | 
note eqs = eq[OF nc(1), where ?'a = 'a] eq[OF nc(2), where ?'a = 'a]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1373  | 
let ?c = "Ipoly vs c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1374  | 
let ?e = "Itm vs (y#bs) e"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1375  | 
have "?c=0 \<or> ?c > 0 \<or> ?c < 0" by arith  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1376  | 
  moreover {assume "?c = 0" hence ?case using eqs by auto}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1377  | 
  moreover {assume cp: "?c > 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1378  | 
    {fix x assume xz: "x < -?e / ?c" hence "?c * x < - ?e"
 | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1379  | 
using pos_less_divide_eq[OF cp, where a="x" and b="-?e"] by (simp add: mult_commute)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1380  | 
hence "?c * x + ?e < 0" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1381  | 
hence "Ifm vs (x#bs) (NEq (CNP 0 c e)) = Ifm vs (x#bs) (minusinf (NEq (CNP 0 c e)))"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1382  | 
using eqs tmbound0_I[OF nbe, where b="y" and b'="x"] by auto} hence ?case by auto}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1383  | 
  moreover {assume cp: "?c < 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1384  | 
    {fix x assume xz: "x < -?e / ?c" hence "?c * x > - ?e"
 | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1385  | 
using neg_less_divide_eq[OF cp, where a="x" and b="-?e"] by (simp add: mult_commute)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1386  | 
hence "?c * x + ?e > 0" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1387  | 
hence "Ifm vs (x#bs) (NEq (CNP 0 c e)) = Ifm vs (x#bs) (minusinf (NEq (CNP 0 c e)))"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1388  | 
using eqs tmbound0_I[OF nbe, where b="y" and b'="x"] by auto} hence ?case by auto}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1389  | 
ultimately show ?case by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1390  | 
next  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1391  | 
case (5 c e) hence nbe: "tmbound0 e" by simp  | 
| 41807 | 1392  | 
from 5 have nc: "allpolys isnpoly (CP c)" "allpolys isnpoly e" by simp_all  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1393  | 
hence nc': "allpolys isnpoly (CP (~\<^sub>p c))" by (simp add: polyneg_norm)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1394  | 
note eqs = lt[OF nc', where ?'a = 'a] eq [OF nc(1), where ?'a = 'a] lt[OF nc(2), where ?'a = 'a]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1395  | 
let ?c = "Ipoly vs c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1396  | 
let ?e = "Itm vs (y#bs) e"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1397  | 
have "?c=0 \<or> ?c > 0 \<or> ?c < 0" by arith  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1398  | 
  moreover {assume "?c = 0" hence ?case using eqs by auto}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1399  | 
  moreover {assume cp: "?c > 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1400  | 
    {fix x assume xz: "x < -?e / ?c" hence "?c * x < - ?e"
 | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1401  | 
using pos_less_divide_eq[OF cp, where a="x" and b="-?e"] by (simp add: mult_commute)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1402  | 
hence "?c * x + ?e < 0" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1403  | 
hence "Ifm vs (x#bs) (Lt (CNP 0 c e)) = Ifm vs (x#bs) (minusinf (Lt (CNP 0 c e)))"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1404  | 
using tmbound0_I[OF nbe, where b="y" and b'="x"] cp eqs by auto} hence ?case by auto}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1405  | 
  moreover {assume cp: "?c < 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1406  | 
    {fix x assume xz: "x < -?e / ?c" hence "?c * x > - ?e"
 | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1407  | 
using neg_less_divide_eq[OF cp, where a="x" and b="-?e"] by (simp add: mult_commute)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1408  | 
hence "?c * x + ?e > 0" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1409  | 
hence "Ifm vs (x#bs) (Lt (CNP 0 c e)) = Ifm vs (x#bs) (minusinf (Lt (CNP 0 c e)))"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1410  | 
using eqs tmbound0_I[OF nbe, where b="y" and b'="x"] cp by auto} hence ?case by auto}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1411  | 
ultimately show ?case by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1412  | 
next  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1413  | 
case (6 c e) hence nbe: "tmbound0 e" by simp  | 
| 41807 | 1414  | 
from 6 have nc: "allpolys isnpoly (CP c)" "allpolys isnpoly e" by simp_all  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1415  | 
hence nc': "allpolys isnpoly (CP (~\<^sub>p c))" by (simp add: polyneg_norm)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1416  | 
note eqs = lt[OF nc', where ?'a = 'a] eq [OF nc(1), where ?'a = 'a] le[OF nc(2), where ?'a = 'a]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1417  | 
let ?c = "Ipoly vs c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1418  | 
let ?e = "Itm vs (y#bs) e"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1419  | 
have "?c=0 \<or> ?c > 0 \<or> ?c < 0" by arith  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1420  | 
  moreover {assume "?c = 0" hence ?case using eqs by auto}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1421  | 
  moreover {assume cp: "?c > 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1422  | 
    {fix x assume xz: "x < -?e / ?c" hence "?c * x < - ?e"
 | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1423  | 
using pos_less_divide_eq[OF cp, where a="x" and b="-?e"] by (simp add: mult_commute)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1424  | 
hence "?c * x + ?e < 0" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1425  | 
hence "Ifm vs (x#bs) (Le (CNP 0 c e)) = Ifm vs (x#bs) (minusinf (Le (CNP 0 c e)))"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1426  | 
using tmbound0_I[OF nbe, where b="y" and b'="x"] cp eqs by auto} hence ?case by auto}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1427  | 
  moreover {assume cp: "?c < 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1428  | 
    {fix x assume xz: "x < -?e / ?c" hence "?c * x > - ?e"
 | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1429  | 
using neg_less_divide_eq[OF cp, where a="x" and b="-?e"] by (simp add: mult_commute)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1430  | 
hence "?c * x + ?e > 0" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1431  | 
hence "Ifm vs (x#bs) (Le (CNP 0 c e)) = Ifm vs (x#bs) (minusinf (Le (CNP 0 c e)))"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1432  | 
using tmbound0_I[OF nbe, where b="y" and b'="x"] cp eqs by auto} hence ?case by auto}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1433  | 
ultimately show ?case by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1434  | 
qed (auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1435  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1436  | 
lemma plusinf_inf: assumes lp:"islin p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1437  | 
shows "\<exists>z. \<forall>x > z. Ifm vs (x#bs) (plusinf p) \<longleftrightarrow> Ifm vs (x#bs) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1438  | 
using lp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1439  | 
proof (induct p rule: plusinf.induct)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1440  | 
case 1 thus ?case by (auto,rule_tac x="max z za" in exI, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1441  | 
next  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1442  | 
case 2 thus ?case by (auto,rule_tac x="max z za" in exI, auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1443  | 
next  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1444  | 
case (3 c e) hence nbe: "tmbound0 e" by simp  | 
| 41807 | 1445  | 
from 3 have nc: "allpolys isnpoly (CP c)" "allpolys isnpoly e" by simp_all  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1446  | 
note eqs = eq[OF nc(1), where ?'a = 'a] eq[OF nc(2), where ?'a = 'a]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1447  | 
let ?c = "Ipoly vs c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1448  | 
let ?e = "Itm vs (y#bs) e"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1449  | 
have "?c=0 \<or> ?c > 0 \<or> ?c < 0" by arith  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1450  | 
  moreover {assume "?c = 0" hence ?case 
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1451  | 
using eq[OF nc(2), of vs] eq[OF nc(1), of vs] by auto}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1452  | 
  moreover {assume cp: "?c > 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1453  | 
    {fix x assume xz: "x > -?e / ?c" hence "?c * x > - ?e" 
 | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1454  | 
using pos_divide_less_eq[OF cp, where a="x" and b="-?e"] by (simp add: mult_commute)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1455  | 
hence "?c * x + ?e > 0" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1456  | 
hence "Ifm vs (x#bs) (Eq (CNP 0 c e)) = Ifm vs (x#bs) (plusinf (Eq (CNP 0 c e)))"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1457  | 
using eqs tmbound0_I[OF nbe, where b="y" and b'="x" and vs=vs and bs=bs] by auto} hence ?case by auto}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1458  | 
  moreover {assume cp: "?c < 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1459  | 
    {fix x assume xz: "x > -?e / ?c" hence "?c * x < - ?e"
 | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1460  | 
using neg_divide_less_eq[OF cp, where a="x" and b="-?e"] by (simp add: mult_commute)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1461  | 
hence "?c * x + ?e < 0" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1462  | 
hence "Ifm vs (x#bs) (Eq (CNP 0 c e)) = Ifm vs (x#bs) (plusinf (Eq (CNP 0 c e)))"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1463  | 
using tmbound0_I[OF nbe, where b="y" and b'="x"] eqs by auto} hence ?case by auto}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1464  | 
ultimately show ?case by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1465  | 
next  | 
| 41807 | 1466  | 
case (4 c e) hence nbe: "tmbound0 e" by simp  | 
1467  | 
from 4 have nc: "allpolys isnpoly (CP c)" "allpolys isnpoly e" by simp_all  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1468  | 
note eqs = eq[OF nc(1), where ?'a = 'a] eq[OF nc(2), where ?'a = 'a]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1469  | 
let ?c = "Ipoly vs c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1470  | 
let ?e = "Itm vs (y#bs) e"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1471  | 
have "?c=0 \<or> ?c > 0 \<or> ?c < 0" by arith  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1472  | 
  moreover {assume "?c = 0" hence ?case using eqs by auto}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1473  | 
  moreover {assume cp: "?c > 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1474  | 
    {fix x assume xz: "x > -?e / ?c" hence "?c * x > - ?e"
 | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1475  | 
using pos_divide_less_eq[OF cp, where a="x" and b="-?e"] by (simp add: mult_commute)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1476  | 
hence "?c * x + ?e > 0" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1477  | 
hence "Ifm vs (x#bs) (NEq (CNP 0 c e)) = Ifm vs (x#bs) (plusinf (NEq (CNP 0 c e)))"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1478  | 
using eqs tmbound0_I[OF nbe, where b="y" and b'="x"] by auto} hence ?case by auto}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1479  | 
  moreover {assume cp: "?c < 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1480  | 
    {fix x assume xz: "x > -?e / ?c" hence "?c * x < - ?e"
 | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1481  | 
using neg_divide_less_eq[OF cp, where a="x" and b="-?e"] by (simp add: mult_commute)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1482  | 
hence "?c * x + ?e < 0" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1483  | 
hence "Ifm vs (x#bs) (NEq (CNP 0 c e)) = Ifm vs (x#bs) (plusinf (NEq (CNP 0 c e)))"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1484  | 
using eqs tmbound0_I[OF nbe, where b="y" and b'="x"] by auto} hence ?case by auto}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1485  | 
ultimately show ?case by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1486  | 
next  | 
| 41807 | 1487  | 
case (5 c e) hence nbe: "tmbound0 e" by simp  | 
1488  | 
from 5 have nc: "allpolys isnpoly (CP c)" "allpolys isnpoly e" by simp_all  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1489  | 
hence nc': "allpolys isnpoly (CP (~\<^sub>p c))" by (simp add: polyneg_norm)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1490  | 
note eqs = lt[OF nc(1), where ?'a = 'a] lt[OF nc', where ?'a = 'a] eq [OF nc(1), where ?'a = 'a] lt[OF nc(2), where ?'a = 'a]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1491  | 
let ?c = "Ipoly vs c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1492  | 
let ?e = "Itm vs (y#bs) e"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1493  | 
have "?c=0 \<or> ?c > 0 \<or> ?c < 0" by arith  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1494  | 
  moreover {assume "?c = 0" hence ?case using eqs by auto}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1495  | 
  moreover {assume cp: "?c > 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1496  | 
    {fix x assume xz: "x > -?e / ?c" hence "?c * x > - ?e"
 | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1497  | 
using pos_divide_less_eq[OF cp, where a="x" and b="-?e"] by (simp add: mult_commute)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1498  | 
hence "?c * x + ?e > 0" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1499  | 
hence "Ifm vs (x#bs) (Lt (CNP 0 c e)) = Ifm vs (x#bs) (plusinf (Lt (CNP 0 c e)))"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1500  | 
using tmbound0_I[OF nbe, where b="y" and b'="x"] cp eqs by auto} hence ?case by auto}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1501  | 
  moreover {assume cp: "?c < 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1502  | 
    {fix x assume xz: "x > -?e / ?c" hence "?c * x < - ?e"
 | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1503  | 
using neg_divide_less_eq[OF cp, where a="x" and b="-?e"] by (simp add: mult_commute)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1504  | 
hence "?c * x + ?e < 0" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1505  | 
hence "Ifm vs (x#bs) (Lt (CNP 0 c e)) = Ifm vs (x#bs) (plusinf (Lt (CNP 0 c e)))"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1506  | 
using eqs tmbound0_I[OF nbe, where b="y" and b'="x"] cp by auto} hence ?case by auto}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1507  | 
ultimately show ?case by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1508  | 
next  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1509  | 
case (6 c e) hence nbe: "tmbound0 e" by simp  | 
| 41807 | 1510  | 
from 6 have nc: "allpolys isnpoly (CP c)" "allpolys isnpoly e" by simp_all  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1511  | 
hence nc': "allpolys isnpoly (CP (~\<^sub>p c))" by (simp add: polyneg_norm)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1512  | 
note eqs = lt[OF nc(1), where ?'a = 'a] eq [OF nc(1), where ?'a = 'a] le[OF nc(2), where ?'a = 'a]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1513  | 
let ?c = "Ipoly vs c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1514  | 
let ?e = "Itm vs (y#bs) e"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1515  | 
have "?c=0 \<or> ?c > 0 \<or> ?c < 0" by arith  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1516  | 
  moreover {assume "?c = 0" hence ?case using eqs by auto}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1517  | 
  moreover {assume cp: "?c > 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1518  | 
    {fix x assume xz: "x > -?e / ?c" hence "?c * x > - ?e"
 | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1519  | 
using pos_divide_less_eq[OF cp, where a="x" and b="-?e"] by (simp add: mult_commute)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1520  | 
hence "?c * x + ?e > 0" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1521  | 
hence "Ifm vs (x#bs) (Le (CNP 0 c e)) = Ifm vs (x#bs) (plusinf (Le (CNP 0 c e)))"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1522  | 
using tmbound0_I[OF nbe, where b="y" and b'="x"] cp eqs by auto} hence ?case by auto}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1523  | 
  moreover {assume cp: "?c < 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1524  | 
    {fix x assume xz: "x > -?e / ?c" hence "?c * x < - ?e"
 | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1525  | 
using neg_divide_less_eq[OF cp, where a="x" and b="-?e"] by (simp add: mult_commute)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1526  | 
hence "?c * x + ?e < 0" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1527  | 
hence "Ifm vs (x#bs) (Le (CNP 0 c e)) = Ifm vs (x#bs) (plusinf (Le (CNP 0 c e)))"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1528  | 
using tmbound0_I[OF nbe, where b="y" and b'="x"] cp eqs by auto} hence ?case by auto}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1529  | 
ultimately show ?case by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1530  | 
qed (auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1531  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1532  | 
lemma minusinf_nb: "islin p \<Longrightarrow> bound0 (minusinf p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1533  | 
by (induct p rule: minusinf.induct, auto simp add: eq_nb lt_nb le_nb)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1534  | 
lemma plusinf_nb: "islin p \<Longrightarrow> bound0 (plusinf p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1535  | 
by (induct p rule: minusinf.induct, auto simp add: eq_nb lt_nb le_nb)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1536  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1537  | 
lemma minusinf_ex: assumes lp: "islin p" and ex: "Ifm vs (x#bs) (minusinf p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1538  | 
shows "\<exists>x. Ifm vs (x#bs) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1539  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1540  | 
from bound0_I [OF minusinf_nb[OF lp], where b="a" and bs ="bs"] ex  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1541  | 
have th: "\<forall> x. Ifm vs (x#bs) (minusinf p)" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1542  | 
from minusinf_inf[OF lp, where bs="bs"]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1543  | 
obtain z where z_def: "\<forall>x<z. Ifm vs (x # bs) (minusinf p) = Ifm vs (x # bs) p" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1544  | 
from th have "Ifm vs ((z - 1)#bs) (minusinf p)" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1545  | 
moreover have "z - 1 < z" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1546  | 
ultimately show ?thesis using z_def by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1547  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1548  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1549  | 
lemma plusinf_ex: assumes lp: "islin p" and ex: "Ifm vs (x#bs) (plusinf p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1550  | 
shows "\<exists>x. Ifm vs (x#bs) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1551  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1552  | 
from bound0_I [OF plusinf_nb[OF lp], where b="a" and bs ="bs"] ex  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1553  | 
have th: "\<forall> x. Ifm vs (x#bs) (plusinf p)" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1554  | 
from plusinf_inf[OF lp, where bs="bs"]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1555  | 
obtain z where z_def: "\<forall>x>z. Ifm vs (x # bs) (plusinf p) = Ifm vs (x # bs) p" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1556  | 
from th have "Ifm vs ((z + 1)#bs) (plusinf p)" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1557  | 
moreover have "z + 1 > z" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1558  | 
ultimately show ?thesis using z_def by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1559  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1560  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1561  | 
fun uset :: "fm \<Rightarrow> (poly \<times> tm) list" where  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1562  | 
"uset (And p q) = uset p @ uset q"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1563  | 
| "uset (Or p q) = uset p @ uset q"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1564  | 
| "uset (Eq (CNP 0 a e)) = [(a,e)]"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1565  | 
| "uset (Le (CNP 0 a e)) = [(a,e)]"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1566  | 
| "uset (Lt (CNP 0 a e)) = [(a,e)]"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1567  | 
| "uset (NEq (CNP 0 a e)) = [(a,e)]"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1568  | 
| "uset p = []"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1569  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1570  | 
lemma uset_l:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1571  | 
assumes lp: "islin p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1572  | 
shows "\<forall> (c,s) \<in> set (uset p). isnpoly c \<and> c \<noteq> 0\<^sub>p \<and> tmbound0 s \<and> allpolys isnpoly s"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1573  | 
using lp by(induct p rule: uset.induct,auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1574  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1575  | 
lemma minusinf_uset0:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1576  | 
assumes lp: "islin p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1577  | 
and nmi: "\<not> (Ifm vs (x#bs) (minusinf p))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1578  | 
and ex: "Ifm vs (x#bs) p" (is "?I x p")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1579  | 
shows "\<exists> (c,s) \<in> set (uset p). x \<ge> - Itm vs (x#bs) s / Ipoly vs c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1580  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1581  | 
have "\<exists> (c,s) \<in> set (uset p). (Ipoly vs c < 0 \<and> Ipoly vs c * x \<le> - Itm vs (x#bs) s) \<or> (Ipoly vs c > 0 \<and> Ipoly vs c * x \<ge> - Itm vs (x#bs) s)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1582  | 
using lp nmi ex  | 
| 41842 | 1583  | 
apply (induct p rule: minusinf.induct, auto simp add: eq le lt polyneg_norm)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1584  | 
apply (auto simp add: linorder_not_less order_le_less)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1585  | 
done  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1586  | 
then obtain c s where csU: "(c,s) \<in> set (uset p)" and x: "(Ipoly vs c < 0 \<and> Ipoly vs c * x \<le> - Itm vs (x#bs) s) \<or> (Ipoly vs c > 0 \<and> Ipoly vs c * x \<ge> - Itm vs (x#bs) s)" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1587  | 
hence "x \<ge> (- Itm vs (x#bs) s) / Ipoly vs c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1588  | 
using divide_le_eq[of "- Itm vs (x#bs) s" "Ipoly vs c" x]  | 
| 
50045
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
1589  | 
by (auto simp add: mult_commute)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1590  | 
thus ?thesis using csU by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1591  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1592  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1593  | 
lemma minusinf_uset:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1594  | 
assumes lp: "islin p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1595  | 
and nmi: "\<not> (Ifm vs (a#bs) (minusinf p))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1596  | 
and ex: "Ifm vs (x#bs) p" (is "?I x p")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1597  | 
shows "\<exists> (c,s) \<in> set (uset p). x \<ge> - Itm vs (a#bs) s / Ipoly vs c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1598  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1599  | 
from nmi have nmi': "\<not> (Ifm vs (x#bs) (minusinf p))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1600  | 
by (simp add: bound0_I[OF minusinf_nb[OF lp], where b=x and b'=a])  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1601  | 
from minusinf_uset0[OF lp nmi' ex]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1602  | 
obtain c s where csU: "(c,s) \<in> set (uset p)" and th: "x \<ge> - Itm vs (x#bs) s / Ipoly vs c" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1603  | 
from uset_l[OF lp, rule_format, OF csU] have nb: "tmbound0 s" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1604  | 
from th tmbound0_I[OF nb, of vs x bs a] csU show ?thesis by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1605  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1606  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1607  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1608  | 
lemma plusinf_uset0:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1609  | 
assumes lp: "islin p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1610  | 
and nmi: "\<not> (Ifm vs (x#bs) (plusinf p))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1611  | 
and ex: "Ifm vs (x#bs) p" (is "?I x p")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1612  | 
shows "\<exists> (c,s) \<in> set (uset p). x \<le> - Itm vs (x#bs) s / Ipoly vs c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1613  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1614  | 
have "\<exists> (c,s) \<in> set (uset p). (Ipoly vs c < 0 \<and> Ipoly vs c * x \<ge> - Itm vs (x#bs) s) \<or> (Ipoly vs c > 0 \<and> Ipoly vs c * x \<le> - Itm vs (x#bs) s)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1615  | 
using lp nmi ex  | 
| 41842 | 1616  | 
apply (induct p rule: minusinf.induct, auto simp add: eq le lt polyneg_norm)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1617  | 
apply (auto simp add: linorder_not_less order_le_less)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1618  | 
done  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1619  | 
then obtain c s where csU: "(c,s) \<in> set (uset p)" and x: "(Ipoly vs c < 0 \<and> Ipoly vs c * x \<ge> - Itm vs (x#bs) s) \<or> (Ipoly vs c > 0 \<and> Ipoly vs c * x \<le> - Itm vs (x#bs) s)" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1620  | 
hence "x \<le> (- Itm vs (x#bs) s) / Ipoly vs c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1621  | 
using le_divide_eq[of x "- Itm vs (x#bs) s" "Ipoly vs c"]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1622  | 
by (auto simp add: mult_commute del: divide_minus_left)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1623  | 
thus ?thesis using csU by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1624  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1625  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1626  | 
lemma plusinf_uset:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1627  | 
assumes lp: "islin p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1628  | 
and nmi: "\<not> (Ifm vs (a#bs) (plusinf p))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1629  | 
and ex: "Ifm vs (x#bs) p" (is "?I x p")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1630  | 
shows "\<exists> (c,s) \<in> set (uset p). x \<le> - Itm vs (a#bs) s / Ipoly vs c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1631  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1632  | 
from nmi have nmi': "\<not> (Ifm vs (x#bs) (plusinf p))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1633  | 
by (simp add: bound0_I[OF plusinf_nb[OF lp], where b=x and b'=a])  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1634  | 
from plusinf_uset0[OF lp nmi' ex]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1635  | 
obtain c s where csU: "(c,s) \<in> set (uset p)" and th: "x \<le> - Itm vs (x#bs) s / Ipoly vs c" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1636  | 
from uset_l[OF lp, rule_format, OF csU] have nb: "tmbound0 s" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1637  | 
from th tmbound0_I[OF nb, of vs x bs a] csU show ?thesis by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1638  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1639  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1640  | 
lemma lin_dense:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1641  | 
assumes lp: "islin p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1642  | 
and noS: "\<forall> t. l < t \<and> t< u \<longrightarrow> t \<notin> (\<lambda> (c,t). - Itm vs (x#bs) t / Ipoly vs c) ` set (uset p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1643  | 
(is "\<forall> t. _ \<and> _ \<longrightarrow> t \<notin> (\<lambda> (c,t). - ?Nt x t / ?N c) ` ?U p")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1644  | 
and lx: "l < x" and xu:"x < u" and px:" Ifm vs (x#bs) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1645  | 
and ly: "l < y" and yu: "y < u"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1646  | 
shows "Ifm vs (y#bs) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1647  | 
using lp px noS  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1648  | 
proof (induct p rule: islin.induct)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1649  | 
case (5 c s)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1650  | 
from "5.prems"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1651  | 
have lin: "isnpoly c" "c \<noteq> 0\<^sub>p" "tmbound0 s" "allpolys isnpoly s"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1652  | 
and px: "Ifm vs (x # bs) (Lt (CNP 0 c s))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1653  | 
and noS: "\<forall>t. l < t \<and> t < u \<longrightarrow> t \<noteq> - Itm vs (x # bs) s / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>" by simp_all  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1654  | 
from ly yu noS have yne: "y \<noteq> - ?Nt x s / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1655  | 
hence ycs: "y < - ?Nt x s / ?N c \<or> y > -?Nt x s / ?N c" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1656  | 
have ccs: "?N c = 0 \<or> ?N c < 0 \<or> ?N c > 0" by dlo  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1657  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1658  | 
  {assume "?N c = 0" hence ?case using px by (simp add: tmbound0_I[OF lin(3), where bs="bs" and b="x" and b'="y"])}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1659  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1660  | 
  {assume c: "?N c > 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1661  | 
from px pos_less_divide_eq[OF c, where a="x" and b="-?Nt x s"]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1662  | 
have px': "x < - ?Nt x s / ?N c"  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
1663  | 
by (auto simp add: not_less field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1664  | 
    {assume y: "y < - ?Nt x s / ?N c" 
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1665  | 
hence "y * ?N c < - ?Nt x s"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1666  | 
by (simp add: pos_less_divide_eq[OF c, where a="y" and b="-?Nt x s", symmetric])  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
1667  | 
hence "?N c * y + ?Nt x s < 0" by (simp add: field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1668  | 
hence ?case using tmbound0_I[OF lin(3), where bs="bs" and b="x" and b'="y"] by simp}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1669  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1670  | 
    {assume y: "y > -?Nt x s / ?N c" 
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1671  | 
with yu have eu: "u > - ?Nt x s / ?N c" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1672  | 
with noS ly yu have th: "- ?Nt x s / ?N c \<le> l" by (cases "- ?Nt x s / ?N c > l", auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1673  | 
with lx px' have "False" by simp hence ?case by simp }  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1674  | 
ultimately have ?case using ycs by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1675  | 
}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1676  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1677  | 
  {assume c: "?N c < 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1678  | 
from px neg_divide_less_eq[OF c, where a="x" and b="-?Nt x s"]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1679  | 
have px': "x > - ?Nt x s / ?N c"  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
1680  | 
by (auto simp add: not_less field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1681  | 
    {assume y: "y > - ?Nt x s / ?N c" 
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1682  | 
hence "y * ?N c < - ?Nt x s"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1683  | 
by (simp add: neg_divide_less_eq[OF c, where a="y" and b="-?Nt x s", symmetric])  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
1684  | 
hence "?N c * y + ?Nt x s < 0" by (simp add: field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1685  | 
hence ?case using tmbound0_I[OF lin(3), where bs="bs" and b="x" and b'="y"] by simp}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1686  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1687  | 
    {assume y: "y < -?Nt x s / ?N c" 
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1688  | 
with ly have eu: "l < - ?Nt x s / ?N c" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1689  | 
with noS ly yu have th: "- ?Nt x s / ?N c \<ge> u" by (cases "- ?Nt x s / ?N c < u", auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1690  | 
with xu px' have "False" by simp hence ?case by simp }  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1691  | 
ultimately have ?case using ycs by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1692  | 
}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1693  | 
ultimately show ?case by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1694  | 
next  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1695  | 
case (6 c s)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1696  | 
from "6.prems"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1697  | 
have lin: "isnpoly c" "c \<noteq> 0\<^sub>p" "tmbound0 s" "allpolys isnpoly s"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1698  | 
and px: "Ifm vs (x # bs) (Le (CNP 0 c s))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1699  | 
and noS: "\<forall>t. l < t \<and> t < u \<longrightarrow> t \<noteq> - Itm vs (x # bs) s / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>" by simp_all  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1700  | 
from ly yu noS have yne: "y \<noteq> - ?Nt x s / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1701  | 
hence ycs: "y < - ?Nt x s / ?N c \<or> y > -?Nt x s / ?N c" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1702  | 
have ccs: "?N c = 0 \<or> ?N c < 0 \<or> ?N c > 0" by dlo  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1703  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1704  | 
  {assume "?N c = 0" hence ?case using px by (simp add: tmbound0_I[OF lin(3), where bs="bs" and b="x" and b'="y"])}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1705  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1706  | 
  {assume c: "?N c > 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1707  | 
from px pos_le_divide_eq[OF c, where a="x" and b="-?Nt x s"]  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
1708  | 
have px': "x <= - ?Nt x s / ?N c" by (simp add: not_less field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1709  | 
    {assume y: "y < - ?Nt x s / ?N c" 
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1710  | 
hence "y * ?N c < - ?Nt x s"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1711  | 
by (simp add: pos_less_divide_eq[OF c, where a="y" and b="-?Nt x s", symmetric])  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
1712  | 
hence "?N c * y + ?Nt x s < 0" by (simp add: field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1713  | 
hence ?case using tmbound0_I[OF lin(3), where bs="bs" and b="x" and b'="y"] by simp}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1714  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1715  | 
    {assume y: "y > -?Nt x s / ?N c" 
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1716  | 
with yu have eu: "u > - ?Nt x s / ?N c" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1717  | 
with noS ly yu have th: "- ?Nt x s / ?N c \<le> l" by (cases "- ?Nt x s / ?N c > l", auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1718  | 
with lx px' have "False" by simp hence ?case by simp }  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1719  | 
ultimately have ?case using ycs by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1720  | 
}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1721  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1722  | 
  {assume c: "?N c < 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1723  | 
from px neg_divide_le_eq[OF c, where a="x" and b="-?Nt x s"]  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
1724  | 
have px': "x >= - ?Nt x s / ?N c" by (simp add: field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1725  | 
    {assume y: "y > - ?Nt x s / ?N c" 
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1726  | 
hence "y * ?N c < - ?Nt x s"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1727  | 
by (simp add: neg_divide_less_eq[OF c, where a="y" and b="-?Nt x s", symmetric])  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
1728  | 
hence "?N c * y + ?Nt x s < 0" by (simp add: field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1729  | 
hence ?case using tmbound0_I[OF lin(3), where bs="bs" and b="x" and b'="y"] by simp}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1730  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1731  | 
    {assume y: "y < -?Nt x s / ?N c" 
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1732  | 
with ly have eu: "l < - ?Nt x s / ?N c" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1733  | 
with noS ly yu have th: "- ?Nt x s / ?N c \<ge> u" by (cases "- ?Nt x s / ?N c < u", auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1734  | 
with xu px' have "False" by simp hence ?case by simp }  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1735  | 
ultimately have ?case using ycs by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1736  | 
}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1737  | 
ultimately show ?case by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1738  | 
next  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1739  | 
case (3 c s)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1740  | 
from "3.prems"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1741  | 
have lin: "isnpoly c" "c \<noteq> 0\<^sub>p" "tmbound0 s" "allpolys isnpoly s"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1742  | 
and px: "Ifm vs (x # bs) (Eq (CNP 0 c s))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1743  | 
and noS: "\<forall>t. l < t \<and> t < u \<longrightarrow> t \<noteq> - Itm vs (x # bs) s / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>" by simp_all  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1744  | 
from ly yu noS have yne: "y \<noteq> - ?Nt x s / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1745  | 
hence ycs: "y < - ?Nt x s / ?N c \<or> y > -?Nt x s / ?N c" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1746  | 
have ccs: "?N c = 0 \<or> ?N c < 0 \<or> ?N c > 0" by dlo  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1747  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1748  | 
  {assume "?N c = 0" hence ?case using px by (simp add: tmbound0_I[OF lin(3), where bs="bs" and b="x" and b'="y"])}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1749  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1750  | 
  {assume c: "?N c > 0" hence cnz: "?N c \<noteq> 0" by simp
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1751  | 
from px eq_divide_eq[of "x" "-?Nt x s" "?N c"] cnz  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
1752  | 
have px': "x = - ?Nt x s / ?N c" by (simp add: field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1753  | 
    {assume y: "y < -?Nt x s / ?N c" 
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1754  | 
with ly have eu: "l < - ?Nt x s / ?N c" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1755  | 
with noS ly yu have th: "- ?Nt x s / ?N c \<ge> u" by (cases "- ?Nt x s / ?N c < u", auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1756  | 
with xu px' have "False" by simp hence ?case by simp }  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1757  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1758  | 
    {assume y: "y > -?Nt x s / ?N c" 
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1759  | 
with yu have eu: "u > - ?Nt x s / ?N c" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1760  | 
with noS ly yu have th: "- ?Nt x s / ?N c \<le> l" by (cases "- ?Nt x s / ?N c > l", auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1761  | 
with lx px' have "False" by simp hence ?case by simp }  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1762  | 
ultimately have ?case using ycs by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1763  | 
}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1764  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1765  | 
  {assume c: "?N c < 0" hence cnz: "?N c \<noteq> 0" by simp
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1766  | 
from px eq_divide_eq[of "x" "-?Nt x s" "?N c"] cnz  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
1767  | 
have px': "x = - ?Nt x s / ?N c" by (simp add: field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1768  | 
    {assume y: "y < -?Nt x s / ?N c" 
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1769  | 
with ly have eu: "l < - ?Nt x s / ?N c" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1770  | 
with noS ly yu have th: "- ?Nt x s / ?N c \<ge> u" by (cases "- ?Nt x s / ?N c < u", auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1771  | 
with xu px' have "False" by simp hence ?case by simp }  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1772  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1773  | 
    {assume y: "y > -?Nt x s / ?N c" 
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1774  | 
with yu have eu: "u > - ?Nt x s / ?N c" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1775  | 
with noS ly yu have th: "- ?Nt x s / ?N c \<le> l" by (cases "- ?Nt x s / ?N c > l", auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1776  | 
with lx px' have "False" by simp hence ?case by simp }  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1777  | 
ultimately have ?case using ycs by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1778  | 
}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1779  | 
ultimately show ?case by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1780  | 
next  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1781  | 
case (4 c s)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1782  | 
from "4.prems"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1783  | 
have lin: "isnpoly c" "c \<noteq> 0\<^sub>p" "tmbound0 s" "allpolys isnpoly s"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1784  | 
and px: "Ifm vs (x # bs) (NEq (CNP 0 c s))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1785  | 
and noS: "\<forall>t. l < t \<and> t < u \<longrightarrow> t \<noteq> - Itm vs (x # bs) s / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>" by simp_all  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1786  | 
from ly yu noS have yne: "y \<noteq> - ?Nt x s / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1787  | 
hence ycs: "y < - ?Nt x s / ?N c \<or> y > -?Nt x s / ?N c" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1788  | 
have ccs: "?N c = 0 \<or> ?N c \<noteq> 0" by dlo  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1789  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1790  | 
  {assume "?N c = 0" hence ?case using px by (simp add: tmbound0_I[OF lin(3), where bs="bs" and b="x" and b'="y"])}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1791  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1792  | 
  {assume c: "?N c \<noteq> 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1793  | 
from yne c eq_divide_eq[of "y" "- ?Nt x s" "?N c"] have ?case  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
1794  | 
by (simp add: field_simps tmbound0_I[OF lin(3), of vs x bs y] sum_eq[symmetric]) }  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1795  | 
ultimately show ?case by blast  | 
| 41842 | 1796  | 
qed (auto simp add: tmbound0_I[where vs=vs and bs="bs" and b="y" and b'="x"] bound0_I[where vs=vs and bs="bs" and b="y" and b'="x"])  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1797  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1798  | 
lemma inf_uset:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1799  | 
assumes lp: "islin p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1800  | 
and nmi: "\<not> (Ifm vs (x#bs) (minusinf p))" (is "\<not> (Ifm vs (x#bs) (?M p))")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1801  | 
and npi: "\<not> (Ifm vs (x#bs) (plusinf p))" (is "\<not> (Ifm vs (x#bs) (?P p))")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1802  | 
and ex: "\<exists> x. Ifm vs (x#bs) p" (is "\<exists> x. ?I x p")  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1803  | 
shows "\<exists> (c,t) \<in> set (uset p). \<exists> (d,s) \<in> set (uset p). ?I ((- Itm vs (x#bs) t / Ipoly vs c + - Itm vs (x#bs) s / Ipoly vs d) / 2) p"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1804  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1805  | 
let ?Nt = "\<lambda> x t. Itm vs (x#bs) t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1806  | 
let ?N = "Ipoly vs"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1807  | 
let ?U = "set (uset p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1808  | 
from ex obtain a where pa: "?I a p" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1809  | 
from bound0_I[OF minusinf_nb[OF lp], where bs="bs" and b="x" and b'="a"] nmi  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1810  | 
have nmi': "\<not> (?I a (?M p))" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1811  | 
from bound0_I[OF plusinf_nb[OF lp], where bs="bs" and b="x" and b'="a"] npi  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1812  | 
have npi': "\<not> (?I a (?P p))" by simp  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1813  | 
have "\<exists> (c,t) \<in> set (uset p). \<exists> (d,s) \<in> set (uset p). ?I ((- ?Nt a t/?N c + - ?Nt a s /?N d) / 2) p"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1814  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1815  | 
let ?M = "(\<lambda> (c,t). - ?Nt a t / ?N c) ` ?U"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1816  | 
have fM: "finite ?M" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1817  | 
from minusinf_uset[OF lp nmi pa] plusinf_uset[OF lp npi pa]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1818  | 
have "\<exists> (c,t) \<in> set (uset p). \<exists> (d,s) \<in> set (uset p). a \<le> - ?Nt x t / ?N c \<and> a \<ge> - ?Nt x s / ?N d" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1819  | 
then obtain "c" "t" "d" "s" where  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1820  | 
ctU: "(c,t) \<in> ?U" and dsU: "(d,s) \<in> ?U"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1821  | 
and xs1: "a \<le> - ?Nt x s / ?N d" and tx1: "a \<ge> - ?Nt x t / ?N c" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1822  | 
from uset_l[OF lp] ctU dsU tmbound0_I[where bs="bs" and b="x" and b'="a"] xs1 tx1  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1823  | 
have xs: "a \<le> - ?Nt a s / ?N d" and tx: "a \<ge> - ?Nt a t / ?N c" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1824  | 
    from ctU have Mne: "?M \<noteq> {}" by auto
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1825  | 
    hence Une: "?U \<noteq> {}" by simp
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1826  | 
let ?l = "Min ?M"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1827  | 
let ?u = "Max ?M"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1828  | 
have linM: "?l \<in> ?M" using fM Mne by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1829  | 
have uinM: "?u \<in> ?M" using fM Mne by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1830  | 
have ctM: "- ?Nt a t / ?N c \<in> ?M" using ctU by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1831  | 
have dsM: "- ?Nt a s / ?N d \<in> ?M" using dsU by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1832  | 
have lM: "\<forall> t\<in> ?M. ?l \<le> t" using Mne fM by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1833  | 
have Mu: "\<forall> t\<in> ?M. t \<le> ?u" using Mne fM by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1834  | 
have "?l \<le> - ?Nt a t / ?N c" using ctM Mne by simp hence lx: "?l \<le> a" using tx by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1835  | 
have "- ?Nt a s / ?N d \<le> ?u" using dsM Mne by simp hence xu: "a \<le> ?u" using xs by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1836  | 
from finite_set_intervals2[where P="\<lambda> x. ?I x p",OF pa lx xu linM uinM fM lM Mu]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1837  | 
have "(\<exists> s\<in> ?M. ?I s p) \<or>  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1838  | 
(\<exists> t1\<in> ?M. \<exists> t2 \<in> ?M. (\<forall> y. t1 < y \<and> y < t2 \<longrightarrow> y \<notin> ?M) \<and> t1 < a \<and> a < t2 \<and> ?I a p)" .  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1839  | 
    moreover {fix u assume um: "u\<in> ?M" and pu: "?I u p"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1840  | 
hence "\<exists> (nu,tu) \<in> ?U. u = - ?Nt a tu / ?N nu" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1841  | 
then obtain "tu" "nu" where tuU: "(nu,tu) \<in> ?U" and tuu:"u= - ?Nt a tu / ?N nu" by blast  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1842  | 
from pu tuu  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1843  | 
have "?I (((- ?Nt a tu / ?N nu) + (- ?Nt a tu / ?N nu)) / 2) p" by simp  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1844  | 
with tuU have ?thesis by blast}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1845  | 
    moreover{
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1846  | 
assume "\<exists> t1\<in> ?M. \<exists> t2 \<in> ?M. (\<forall> y. t1 < y \<and> y < t2 \<longrightarrow> y \<notin> ?M) \<and> t1 < a \<and> a < t2 \<and> ?I a p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1847  | 
then obtain t1 and t2 where t1M: "t1 \<in> ?M" and t2M: "t2\<in> ?M"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1848  | 
and noM: "\<forall> y. t1 < y \<and> y < t2 \<longrightarrow> y \<notin> ?M" and t1x: "t1 < a" and xt2: "a < t2" and px: "?I a p"  | 
| 
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
1849  | 
by blast  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1850  | 
from t1M have "\<exists> (t1n,t1u) \<in> ?U. t1 = - ?Nt a t1u / ?N t1n" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1851  | 
then obtain "t1u" "t1n" where t1uU: "(t1n,t1u) \<in> ?U" and t1u: "t1 = - ?Nt a t1u / ?N t1n" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1852  | 
from t2M have "\<exists> (t2n,t2u) \<in> ?U. t2 = - ?Nt a t2u / ?N t2n" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1853  | 
then obtain "t2u" "t2n" where t2uU: "(t2n,t2u) \<in> ?U" and t2u: "t2 = - ?Nt a t2u / ?N t2n" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1854  | 
from t1x xt2 have t1t2: "t1 < t2" by simp  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1855  | 
let ?u = "(t1 + t2) / 2"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1856  | 
from less_half_sum[OF t1t2] gt_half_sum[OF t1t2] have t1lu: "t1 < ?u" and ut2: "?u < t2" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1857  | 
from lin_dense[OF lp noM t1x xt2 px t1lu ut2] have "?I ?u p" .  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1858  | 
with t1uU t2uU t1u t2u have ?thesis by blast}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1859  | 
ultimately show ?thesis by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1860  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1861  | 
then obtain "l" "n" "s" "m" where lnU: "(n,l) \<in> ?U" and smU:"(m,s) \<in> ?U"  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1862  | 
and pu: "?I ((- ?Nt a l / ?N n + - ?Nt a s / ?N m) / 2) p" by blast  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1863  | 
from lnU smU uset_l[OF lp] have nbl: "tmbound0 l" and nbs: "tmbound0 s" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1864  | 
from tmbound0_I[OF nbl, where bs="bs" and b="a" and b'="x"]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1865  | 
tmbound0_I[OF nbs, where bs="bs" and b="a" and b'="x"] pu  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1866  | 
have "?I ((- ?Nt x l / ?N n + - ?Nt x s / ?N m) / 2) p" by simp  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1867  | 
with lnU smU  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1868  | 
show ?thesis by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1869  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1870  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1871  | 
(* The Ferrante - Rackoff Theorem *)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1872  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1873  | 
theorem fr_eq:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1874  | 
assumes lp: "islin p"  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1875  | 
shows "(\<exists> x. Ifm vs (x#bs) p) = ((Ifm vs (x#bs) (minusinf p)) \<or> (Ifm vs (x#bs) (plusinf p)) \<or> (\<exists> (n,t) \<in> set (uset p). \<exists> (m,s) \<in> set (uset p). Ifm vs (((- Itm vs (x#bs) t / Ipoly vs n + - Itm vs (x#bs) s / Ipoly vs m) / 2)#bs) p))"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1876  | 
(is "(\<exists> x. ?I x p) = (?M \<or> ?P \<or> ?F)" is "?E = ?D")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1877  | 
proof  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1878  | 
assume px: "\<exists> x. ?I x p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1879  | 
have "?M \<or> ?P \<or> (\<not> ?M \<and> \<not> ?P)" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1880  | 
  moreover {assume "?M \<or> ?P" hence "?D" by blast}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1881  | 
  moreover {assume nmi: "\<not> ?M" and npi: "\<not> ?P"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1882  | 
from inf_uset[OF lp nmi npi] have "?F" using px by blast hence "?D" by blast}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1883  | 
ultimately show "?D" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1884  | 
next  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1885  | 
assume "?D"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1886  | 
  moreover {assume m:"?M" from minusinf_ex[OF lp m] have "?E" .}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1887  | 
  moreover {assume p: "?P" from plusinf_ex[OF lp p] have "?E" . }
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1888  | 
  moreover {assume f:"?F" hence "?E" by blast}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1889  | 
ultimately show "?E" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1890  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1891  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1892  | 
section{* First implementation : Naive by encoding all case splits locally *}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1893  | 
definition "msubsteq c t d s a r =  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1894  | 
evaldjf (split conj)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1895  | 
[(let cd = c *\<^sub>p d in (NEq (CP cd), Eq (Add (Mul (~\<^sub>p a) (Add (Mul d t) (Mul c s))) (Mul (2\<^sub>p *\<^sub>p cd) r)))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1896  | 
(conj (Eq (CP c)) (NEq (CP d)) , Eq (Add (Mul (~\<^sub>p a) s) (Mul (2\<^sub>p *\<^sub>p d) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1897  | 
(conj (NEq (CP c)) (Eq (CP d)) , Eq (Add (Mul (~\<^sub>p a) t) (Mul (2\<^sub>p *\<^sub>p c) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1898  | 
(conj (Eq (CP c)) (Eq (CP d)) , Eq r)]"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1899  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1900  | 
lemma msubsteq_nb: assumes lp: "islin (Eq (CNP 0 a r))" and t: "tmbound0 t" and s: "tmbound0 s"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1901  | 
shows "bound0 (msubsteq c t d s a r)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1902  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1903  | 
have th: "\<forall>x\<in> set [(let cd = c *\<^sub>p d in (NEq (CP cd), Eq (Add (Mul (~\<^sub>p a) (Add (Mul d t) (Mul c s))) (Mul (2\<^sub>p *\<^sub>p cd) r)))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1904  | 
(conj (Eq (CP c)) (NEq (CP d)) , Eq (Add (Mul (~\<^sub>p a) s) (Mul (2\<^sub>p *\<^sub>p d) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1905  | 
(conj (NEq (CP c)) (Eq (CP d)) , Eq (Add (Mul (~\<^sub>p a) t) (Mul (2\<^sub>p *\<^sub>p c) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1906  | 
(conj (Eq (CP c)) (Eq (CP d)) , Eq r)]. bound0 (split conj x)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1907  | 
using lp by (simp add: Let_def t s )  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1908  | 
from evaldjf_bound0[OF th] show ?thesis by (simp add: msubsteq_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1909  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1910  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1911  | 
lemma msubsteq: assumes lp: "islin (Eq (CNP 0 a r))"  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1912  | 
shows "Ifm vs (x#bs) (msubsteq c t d s a r) = Ifm vs (((- Itm vs (x#bs) t / Ipoly vs c + - Itm vs (x#bs) s / Ipoly vs d) / 2)#bs) (Eq (CNP 0 a r))" (is "?lhs = ?rhs")  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1913  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1914  | 
let ?Nt = "\<lambda>(x::'a) t. Itm vs (x#bs) t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1915  | 
let ?N = "\<lambda>p. Ipoly vs p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1916  | 
let ?c = "?N c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1917  | 
let ?d = "?N d"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1918  | 
let ?t = "?Nt x t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1919  | 
let ?s = "?Nt x s"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1920  | 
let ?a = "?N a"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1921  | 
let ?r = "?Nt x r"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1922  | 
from lp have lin:"isnpoly a" "a \<noteq> 0\<^sub>p" "tmbound0 r" "allpolys isnpoly r" by simp_all  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1923  | 
note r= tmbound0_I[OF lin(3), of vs _ bs x]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1924  | 
have cd_cs: "?c * ?d \<noteq> 0 \<or> (?c = 0 \<and> ?d = 0) \<or> (?c = 0 \<and> ?d \<noteq> 0) \<or> (?c \<noteq> 0 \<and> ?d = 0)" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1925  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1926  | 
  {assume c: "?c = 0" and d: "?d=0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1927  | 
hence ?thesis by (simp add: r[of 0] msubsteq_def Let_def evaldjf_ex)}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1928  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1929  | 
  {assume c: "?c = 0" and d: "?d\<noteq>0"
 | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1930  | 
from c have th: "(- ?t / ?c + - ?s / ?d)/2 = -?s / (2*?d)" by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1931  | 
have "?rhs = Ifm vs (-?s / (2*?d) # bs) (Eq (CNP 0 a r))" by (simp only: th)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1932  | 
also have "\<dots> \<longleftrightarrow> ?a * (-?s / (2*?d)) + ?r = 0" by (simp add: r[of "- (Itm vs (x # bs) s / (2 * \<lparr>d\<rparr>\<^sub>p\<^bsup>vs\<^esup>))"])  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1933  | 
also have "\<dots> \<longleftrightarrow> 2*?d * (?a * (-?s / (2*?d)) + ?r) = 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1934  | 
using d mult_cancel_left[of "2*?d" "(?a * (-?s / (2*?d)) + ?r)" 0] by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1935  | 
also have "\<dots> \<longleftrightarrow> (- ?a * ?s) * (2*?d / (2*?d)) + 2*?d*?r= 0"  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
1936  | 
by (simp add: field_simps distrib_left[of "2*?d"] del: distrib_left)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1937  | 
|
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1938  | 
also have "\<dots> \<longleftrightarrow> - (?a * ?s) + 2*?d*?r = 0" using d by simp  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1939  | 
finally have ?thesis using c d  | 
| 
47108
 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 
huffman 
parents: 
45499 
diff
changeset
 | 
1940  | 
by (simp add: r[of "- (Itm vs (x # bs) s / (2 * \<lparr>d\<rparr>\<^sub>p\<^bsup>vs\<^esup>))"] msubsteq_def Let_def evaldjf_ex)  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1941  | 
}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1942  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1943  | 
  {assume c: "?c \<noteq> 0" and d: "?d=0"
 | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1944  | 
from d have th: "(- ?t / ?c + - ?s / ?d)/2 = -?t / (2*?c)" by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1945  | 
have "?rhs = Ifm vs (-?t / (2*?c) # bs) (Eq (CNP 0 a r))" by (simp only: th)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1946  | 
also have "\<dots> \<longleftrightarrow> ?a * (-?t / (2*?c)) + ?r = 0" by (simp add: r[of "- (?t/ (2 * ?c))"])  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1947  | 
also have "\<dots> \<longleftrightarrow> 2*?c * (?a * (-?t / (2*?c)) + ?r) = 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1948  | 
using c mult_cancel_left[of "2*?c" "(?a * (-?t / (2*?c)) + ?r)" 0] by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1949  | 
also have "\<dots> \<longleftrightarrow> (?a * -?t)* (2*?c) / (2*?c) + 2*?c*?r= 0"  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
1950  | 
by (simp add: field_simps distrib_left[of "2*?c"] del: distrib_left)  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1951  | 
also have "\<dots> \<longleftrightarrow> - (?a * ?t) + 2*?c*?r = 0" using c by simp  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1952  | 
finally have ?thesis using c d  | 
| 
47108
 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 
huffman 
parents: 
45499 
diff
changeset
 | 
1953  | 
by (simp add: r[of "- (?t/ (2*?c))"] msubsteq_def Let_def evaldjf_ex)  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1954  | 
}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1955  | 
moreover  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1956  | 
  {assume c: "?c \<noteq> 0" and d: "?d\<noteq>0" hence dc: "?c * ?d *2 \<noteq> 0" by simp
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1957  | 
from add_frac_eq[OF c d, of "- ?t" "- ?s"]  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1958  | 
have th: "(- ?t / ?c + - ?s / ?d)/2 = - (?d * ?t + ?c* ?s )/ (2*?c*?d)"  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
1959  | 
by (simp add: field_simps)  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1960  | 
have "?rhs \<longleftrightarrow> Ifm vs (- (?d * ?t + ?c* ?s )/ (2*?c*?d) # bs) (Eq (CNP 0 a r))" by (simp only: th)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1961  | 
also have "\<dots> \<longleftrightarrow> ?a * (- (?d * ?t + ?c* ?s )/ (2*?c*?d)) + ?r = 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1962  | 
by (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / (2 * ?c * ?d)"])  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1963  | 
also have "\<dots> \<longleftrightarrow> (2 * ?c * ?d) * (?a * (- (?d * ?t + ?c* ?s )/ (2*?c*?d)) + ?r) =0 "  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1964  | 
using c d mult_cancel_left[of "2 * ?c * ?d" "?a * (- (?d * ?t + ?c* ?s)/ (2*?c*?d)) + ?r" 0] by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1965  | 
also have "\<dots> \<longleftrightarrow> ?a * (- (?d * ?t + ?c* ?s )) + 2*?c*?d*?r =0"  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
1966  | 
using nonzero_mult_divide_cancel_left [OF dc] c d  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
1967  | 
by (simp add: algebra_simps diff_divide_distrib del: distrib_right)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1968  | 
finally have ?thesis using c d  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1969  | 
by (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / (2 * ?c * ?d)"] msubsteq_def Let_def evaldjf_ex field_simps)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1970  | 
}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1971  | 
ultimately show ?thesis by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1972  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1973  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1974  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1975  | 
definition "msubstneq c t d s a r =  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1976  | 
evaldjf (split conj)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1977  | 
[(let cd = c *\<^sub>p d in (NEq (CP cd), NEq (Add (Mul (~\<^sub>p a) (Add (Mul d t) (Mul c s))) (Mul (2\<^sub>p *\<^sub>p cd) r)))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1978  | 
(conj (Eq (CP c)) (NEq (CP d)) , NEq (Add (Mul (~\<^sub>p a) s) (Mul (2\<^sub>p *\<^sub>p d) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1979  | 
(conj (NEq (CP c)) (Eq (CP d)) , NEq (Add (Mul (~\<^sub>p a) t) (Mul (2\<^sub>p *\<^sub>p c) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1980  | 
(conj (Eq (CP c)) (Eq (CP d)) , NEq r)]"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1981  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1982  | 
lemma msubstneq_nb: assumes lp: "islin (NEq (CNP 0 a r))" and t: "tmbound0 t" and s: "tmbound0 s"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1983  | 
shows "bound0 (msubstneq c t d s a r)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1984  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1985  | 
have th: "\<forall>x\<in> set [(let cd = c *\<^sub>p d in (NEq (CP cd), NEq (Add (Mul (~\<^sub>p a) (Add (Mul d t) (Mul c s))) (Mul (2\<^sub>p *\<^sub>p cd) r)))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1986  | 
(conj (Eq (CP c)) (NEq (CP d)) , NEq (Add (Mul (~\<^sub>p a) s) (Mul (2\<^sub>p *\<^sub>p d) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1987  | 
(conj (NEq (CP c)) (Eq (CP d)) , NEq (Add (Mul (~\<^sub>p a) t) (Mul (2\<^sub>p *\<^sub>p c) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1988  | 
(conj (Eq (CP c)) (Eq (CP d)) , NEq r)]. bound0 (split conj x)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1989  | 
using lp by (simp add: Let_def t s )  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1990  | 
from evaldjf_bound0[OF th] show ?thesis by (simp add: msubstneq_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1991  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1992  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1993  | 
lemma msubstneq: assumes lp: "islin (Eq (CNP 0 a r))"  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
1994  | 
shows "Ifm vs (x#bs) (msubstneq c t d s a r) = Ifm vs (((- Itm vs (x#bs) t / Ipoly vs c + - Itm vs (x#bs) s / Ipoly vs d) /2)#bs) (NEq (CNP 0 a r))" (is "?lhs = ?rhs")  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1995  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1996  | 
let ?Nt = "\<lambda>(x::'a) t. Itm vs (x#bs) t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1997  | 
let ?N = "\<lambda>p. Ipoly vs p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1998  | 
let ?c = "?N c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
1999  | 
let ?d = "?N d"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2000  | 
let ?t = "?Nt x t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2001  | 
let ?s = "?Nt x s"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2002  | 
let ?a = "?N a"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2003  | 
let ?r = "?Nt x r"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2004  | 
from lp have lin:"isnpoly a" "a \<noteq> 0\<^sub>p" "tmbound0 r" "allpolys isnpoly r" by simp_all  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2005  | 
note r= tmbound0_I[OF lin(3), of vs _ bs x]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2006  | 
have cd_cs: "?c * ?d \<noteq> 0 \<or> (?c = 0 \<and> ?d = 0) \<or> (?c = 0 \<and> ?d \<noteq> 0) \<or> (?c \<noteq> 0 \<and> ?d = 0)" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2007  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2008  | 
  {assume c: "?c = 0" and d: "?d=0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2009  | 
hence ?thesis by (simp add: r[of 0] msubstneq_def Let_def evaldjf_ex)}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2010  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2011  | 
  {assume c: "?c = 0" and d: "?d\<noteq>0"
 | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2012  | 
from c have th: "(- ?t / ?c + - ?s / ?d)/2 = -?s / (2*?d)" by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2013  | 
have "?rhs = Ifm vs (-?s / (2*?d) # bs) (NEq (CNP 0 a r))" by (simp only: th)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2014  | 
also have "\<dots> \<longleftrightarrow> ?a * (-?s / (2*?d)) + ?r \<noteq> 0" by (simp add: r[of "- (Itm vs (x # bs) s / (2 * \<lparr>d\<rparr>\<^sub>p\<^bsup>vs\<^esup>))"])  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2015  | 
also have "\<dots> \<longleftrightarrow> 2*?d * (?a * (-?s / (2*?d)) + ?r) \<noteq> 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2016  | 
using d mult_cancel_left[of "2*?d" "(?a * (-?s / (2*?d)) + ?r)" 0] by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2017  | 
also have "\<dots> \<longleftrightarrow> (- ?a * ?s) * (2*?d / (2*?d)) + 2*?d*?r\<noteq> 0"  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
2018  | 
by (simp add: field_simps distrib_left[of "2*?d"] del: distrib_left)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2019  | 
|
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2020  | 
also have "\<dots> \<longleftrightarrow> - (?a * ?s) + 2*?d*?r \<noteq> 0" using d by simp  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2021  | 
finally have ?thesis using c d  | 
| 
47108
 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 
huffman 
parents: 
45499 
diff
changeset
 | 
2022  | 
by (simp add: r[of "- (Itm vs (x # bs) s / (2 * \<lparr>d\<rparr>\<^sub>p\<^bsup>vs\<^esup>))"] msubstneq_def Let_def evaldjf_ex)  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2023  | 
}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2024  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2025  | 
  {assume c: "?c \<noteq> 0" and d: "?d=0"
 | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2026  | 
from d have th: "(- ?t / ?c + - ?s / ?d)/2 = -?t / (2*?c)" by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2027  | 
have "?rhs = Ifm vs (-?t / (2*?c) # bs) (NEq (CNP 0 a r))" by (simp only: th)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2028  | 
also have "\<dots> \<longleftrightarrow> ?a * (-?t / (2*?c)) + ?r \<noteq> 0" by (simp add: r[of "- (?t/ (2 * ?c))"])  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2029  | 
also have "\<dots> \<longleftrightarrow> 2*?c * (?a * (-?t / (2*?c)) + ?r) \<noteq> 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2030  | 
using c mult_cancel_left[of "2*?c" "(?a * (-?t / (2*?c)) + ?r)" 0] by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2031  | 
also have "\<dots> \<longleftrightarrow> (?a * -?t)* (2*?c) / (2*?c) + 2*?c*?r \<noteq> 0"  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
2032  | 
by (simp add: field_simps distrib_left[of "2*?c"] del: distrib_left)  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2033  | 
also have "\<dots> \<longleftrightarrow> - (?a * ?t) + 2*?c*?r \<noteq> 0" using c by simp  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2034  | 
finally have ?thesis using c d  | 
| 
47108
 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 
huffman 
parents: 
45499 
diff
changeset
 | 
2035  | 
by (simp add: r[of "- (?t/ (2*?c))"] msubstneq_def Let_def evaldjf_ex)  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2036  | 
}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2037  | 
moreover  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2038  | 
  {assume c: "?c \<noteq> 0" and d: "?d\<noteq>0" hence dc: "?c * ?d *2 \<noteq> 0" by simp
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2039  | 
from add_frac_eq[OF c d, of "- ?t" "- ?s"]  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2040  | 
have th: "(- ?t / ?c + - ?s / ?d)/2 = - (?d * ?t + ?c* ?s )/ (2*?c*?d)"  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
2041  | 
by (simp add: field_simps)  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2042  | 
have "?rhs \<longleftrightarrow> Ifm vs (- (?d * ?t + ?c* ?s )/ (2*?c*?d) # bs) (NEq (CNP 0 a r))" by (simp only: th)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2043  | 
also have "\<dots> \<longleftrightarrow> ?a * (- (?d * ?t + ?c* ?s )/ (2*?c*?d)) + ?r \<noteq> 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2044  | 
by (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / (2 * ?c * ?d)"])  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2045  | 
also have "\<dots> \<longleftrightarrow> (2 * ?c * ?d) * (?a * (- (?d * ?t + ?c* ?s )/ (2*?c*?d)) + ?r) \<noteq> 0 "  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2046  | 
using c d mult_cancel_left[of "2 * ?c * ?d" "?a * (- (?d * ?t + ?c* ?s)/ (2*?c*?d)) + ?r" 0] by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2047  | 
also have "\<dots> \<longleftrightarrow> ?a * (- (?d * ?t + ?c* ?s )) + 2*?c*?d*?r \<noteq> 0"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2048  | 
using nonzero_mult_divide_cancel_left[OF dc] c d  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
2049  | 
by (simp add: algebra_simps diff_divide_distrib del: distrib_right)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2050  | 
finally have ?thesis using c d  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2051  | 
by (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / (2 * ?c * ?d)"] msubstneq_def Let_def evaldjf_ex field_simps)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2052  | 
}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2053  | 
ultimately show ?thesis by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2054  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2055  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2056  | 
definition "msubstlt c t d s a r =  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2057  | 
evaldjf (split conj)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2058  | 
[(let cd = c *\<^sub>p d in (lt (CP (~\<^sub>p cd)), Lt (Add (Mul (~\<^sub>p a) (Add (Mul d t) (Mul c s))) (Mul (2\<^sub>p *\<^sub>p cd) r)))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2059  | 
(let cd = c *\<^sub>p d in (lt (CP cd), Lt (Sub (Mul a (Add (Mul d t) (Mul c s))) (Mul (2\<^sub>p *\<^sub>p cd) r)))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2060  | 
(conj (lt (CP (~\<^sub>p c))) (Eq (CP d)) , Lt (Add (Mul (~\<^sub>p a) t) (Mul (2\<^sub>p *\<^sub>p c) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2061  | 
(conj (lt (CP c)) (Eq (CP d)) , Lt (Sub (Mul a t) (Mul (2\<^sub>p *\<^sub>p c) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2062  | 
(conj (lt (CP (~\<^sub>p d))) (Eq (CP c)) , Lt (Add (Mul (~\<^sub>p a) s) (Mul (2\<^sub>p *\<^sub>p d) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2063  | 
(conj (lt (CP d)) (Eq (CP c)) , Lt (Sub (Mul a s) (Mul (2\<^sub>p *\<^sub>p d) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2064  | 
(conj (Eq (CP c)) (Eq (CP d)) , Lt r)]"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2065  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2066  | 
lemma msubstlt_nb: assumes lp: "islin (Lt (CNP 0 a r))" and t: "tmbound0 t" and s: "tmbound0 s"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2067  | 
shows "bound0 (msubstlt c t d s a r)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2068  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2069  | 
have th: "\<forall>x\<in> set [(let cd = c *\<^sub>p d in (lt (CP (~\<^sub>p cd)), Lt (Add (Mul (~\<^sub>p a) (Add (Mul d t) (Mul c s))) (Mul (2\<^sub>p *\<^sub>p cd) r)))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2070  | 
(let cd = c *\<^sub>p d in (lt (CP cd), Lt (Sub (Mul a (Add (Mul d t) (Mul c s))) (Mul (2\<^sub>p *\<^sub>p cd) r)))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2071  | 
(conj (lt (CP (~\<^sub>p c))) (Eq (CP d)) , Lt (Add (Mul (~\<^sub>p a) t) (Mul (2\<^sub>p *\<^sub>p c) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2072  | 
(conj (lt (CP c)) (Eq (CP d)) , Lt (Sub (Mul a t) (Mul (2\<^sub>p *\<^sub>p c) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2073  | 
(conj (lt (CP (~\<^sub>p d))) (Eq (CP c)) , Lt (Add (Mul (~\<^sub>p a) s) (Mul (2\<^sub>p *\<^sub>p d) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2074  | 
(conj (lt (CP d)) (Eq (CP c)) , Lt (Sub (Mul a s) (Mul (2\<^sub>p *\<^sub>p d) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2075  | 
(conj (Eq (CP c)) (Eq (CP d)) , Lt r)]. bound0 (split conj x)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2076  | 
using lp by (simp add: Let_def t s lt_nb )  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2077  | 
from evaldjf_bound0[OF th] show ?thesis by (simp add: msubstlt_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2078  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2079  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2080  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2081  | 
lemma msubstlt: assumes nc: "isnpoly c" and nd: "isnpoly d" and lp: "islin (Lt (CNP 0 a r))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2082  | 
shows "Ifm vs (x#bs) (msubstlt c t d s a r) \<longleftrightarrow>  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2083  | 
Ifm vs (((- Itm vs (x#bs) t / Ipoly vs c + - Itm vs (x#bs) s / Ipoly vs d) /2)#bs) (Lt (CNP 0 a r))" (is "?lhs = ?rhs")  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2084  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2085  | 
let ?Nt = "\<lambda>x t. Itm vs (x#bs) t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2086  | 
let ?N = "\<lambda>p. Ipoly vs p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2087  | 
let ?c = "?N c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2088  | 
let ?d = "?N d"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2089  | 
let ?t = "?Nt x t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2090  | 
let ?s = "?Nt x s"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2091  | 
let ?a = "?N a"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2092  | 
let ?r = "?Nt x r"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2093  | 
from lp have lin:"isnpoly a" "a \<noteq> 0\<^sub>p" "tmbound0 r" "allpolys isnpoly r" by simp_all  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2094  | 
note r= tmbound0_I[OF lin(3), of vs _ bs x]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2095  | 
have cd_cs: "?c * ?d < 0 \<or> ?c * ?d > 0 \<or> (?c = 0 \<and> ?d = 0) \<or> (?c = 0 \<and> ?d < 0) \<or> (?c = 0 \<and> ?d > 0) \<or> (?c < 0 \<and> ?d = 0) \<or> (?c > 0 \<and> ?d = 0)" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2096  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2097  | 
  {assume c: "?c=0" and d: "?d=0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2098  | 
hence ?thesis using nc nd by (simp add: polyneg_norm lt r[of 0] msubstlt_def Let_def evaldjf_ex)}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2099  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2100  | 
  {assume dc: "?c*?d > 0" 
 | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2101  | 
from dc have dc': "2*?c *?d > 0" by simp  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2102  | 
hence c:"?c \<noteq> 0" and d: "?d\<noteq> 0" by auto  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2103  | 
from dc' have dc'': "\<not> 2*?c *?d < 0" by simp  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2104  | 
from add_frac_eq[OF c d, of "- ?t" "- ?s"]  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2105  | 
have th: "(- ?t / ?c + - ?s / ?d)/2 = - (?d * ?t + ?c* ?s )/ (2*?c*?d)"  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
2106  | 
by (simp add: field_simps)  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2107  | 
have "?rhs \<longleftrightarrow> Ifm vs (- (?d * ?t + ?c* ?s )/ (2*?c*?d) # bs) (Lt (CNP 0 a r))" by (simp only: th)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2108  | 
also have "\<dots> \<longleftrightarrow> ?a * (- (?d * ?t + ?c* ?s )/ (2*?c*?d)) + ?r < 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2109  | 
by (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / (2 * ?c * ?d)"])  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2110  | 
also have "\<dots> \<longleftrightarrow> (2 * ?c * ?d) * (?a * (- (?d * ?t + ?c* ?s )/ (2*?c*?d)) + ?r) < 0"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2111  | 
|
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2112  | 
using dc' dc'' mult_less_cancel_left_disj[of "2 * ?c * ?d" "?a * (- (?d * ?t + ?c* ?s)/ (2*?c*?d)) + ?r" 0] by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2113  | 
also have "\<dots> \<longleftrightarrow> ?a * (- (?d * ?t + ?c* ?s )) + 2*?c*?d*?r < 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2114  | 
using nonzero_mult_divide_cancel_left[of "2*?c*?d"] c d  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
2115  | 
by (simp add: algebra_simps diff_divide_distrib del: distrib_right)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2116  | 
finally have ?thesis using dc c d nc nd dc'  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2117  | 
by (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / (2 * ?c * ?d)"] msubstlt_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2118  | 
}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2119  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2120  | 
  {assume dc: "?c*?d < 0" 
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2121  | 
|
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2122  | 
from dc have dc': "2*?c *?d < 0"  | 
| 35033 | 2123  | 
by (simp add: mult_less_0_iff field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2124  | 
hence c:"?c \<noteq> 0" and d: "?d\<noteq> 0" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2125  | 
from add_frac_eq[OF c d, of "- ?t" "- ?s"]  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2126  | 
have th: "(- ?t / ?c + - ?s / ?d)/2 = - (?d * ?t + ?c* ?s )/ (2*?c*?d)"  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
2127  | 
by (simp add: field_simps)  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2128  | 
have "?rhs \<longleftrightarrow> Ifm vs (- (?d * ?t + ?c* ?s )/ (2*?c*?d) # bs) (Lt (CNP 0 a r))" by (simp only: th)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2129  | 
also have "\<dots> \<longleftrightarrow> ?a * (- (?d * ?t + ?c* ?s )/ (2*?c*?d)) + ?r < 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2130  | 
by (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / (2 * ?c * ?d)"])  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2131  | 
|
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2132  | 
also have "\<dots> \<longleftrightarrow> (2 * ?c * ?d) * (?a * (- (?d * ?t + ?c* ?s )/ (2*?c*?d)) + ?r) > 0"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2133  | 
|
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2134  | 
using dc' order_less_not_sym[OF dc'] mult_less_cancel_left_disj[of "2 * ?c * ?d" 0 "?a * (- (?d * ?t + ?c* ?s)/ (2*?c*?d)) + ?r"] by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2135  | 
also have "\<dots> \<longleftrightarrow> ?a * ((?d * ?t + ?c* ?s )) - 2*?c*?d*?r < 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2136  | 
using nonzero_mult_divide_cancel_left[of "2*?c*?d"] c d  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
2137  | 
by (simp add: algebra_simps diff_divide_distrib del: distrib_right)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2138  | 
finally have ?thesis using dc c d nc nd  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2139  | 
by (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / (2 * ?c * ?d)"] msubstlt_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2140  | 
}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2141  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2142  | 
  {assume c: "?c > 0" and d: "?d=0"  
 | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2143  | 
from c have c'': "2*?c > 0" by (simp add: zero_less_mult_iff)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2144  | 
from c have c': "2*?c \<noteq> 0" by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2145  | 
from d have th: "(- ?t / ?c + - ?s / ?d)/2 = - ?t / (2*?c)" by (simp add: field_simps)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2146  | 
have "?rhs \<longleftrightarrow> Ifm vs (- ?t / (2*?c) # bs) (Lt (CNP 0 a r))" by (simp only: th)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2147  | 
also have "\<dots> \<longleftrightarrow> ?a* (- ?t / (2*?c))+ ?r < 0" by (simp add: r[of "- (?t / (2*?c))"])  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2148  | 
also have "\<dots> \<longleftrightarrow> 2*?c * (?a* (- ?t / (2*?c))+ ?r) < 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2149  | 
using c mult_less_cancel_left_disj[of "2 * ?c" "?a* (- ?t / (2*?c))+ ?r" 0] c' c'' order_less_not_sym[OF c''] by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2150  | 
also have "\<dots> \<longleftrightarrow> - ?a*?t+ 2*?c *?r < 0"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2151  | 
using nonzero_mult_divide_cancel_left[OF c'] c  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
2152  | 
by (simp add: algebra_simps diff_divide_distrib less_le del: distrib_right)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2153  | 
finally have ?thesis using c d nc nd  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2154  | 
by(simp add: r[of "- (?t / (2*?c))"] msubstlt_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2155  | 
}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2156  | 
moreover  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2157  | 
  {assume c: "?c < 0" and d: "?d=0"  hence c': "2*?c \<noteq> 0" by simp
 | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2158  | 
from c have c'': "2*?c < 0" by (simp add: mult_less_0_iff)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2159  | 
from d have th: "(- ?t / ?c + - ?s / ?d)/2 = - ?t / (2*?c)" by (simp add: field_simps)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2160  | 
have "?rhs \<longleftrightarrow> Ifm vs (- ?t / (2*?c) # bs) (Lt (CNP 0 a r))" by (simp only: th)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2161  | 
also have "\<dots> \<longleftrightarrow> ?a* (- ?t / (2*?c))+ ?r < 0" by (simp add: r[of "- (?t / (2*?c))"])  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2162  | 
also have "\<dots> \<longleftrightarrow> 2*?c * (?a* (- ?t / (2*?c))+ ?r) > 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2163  | 
using c order_less_not_sym[OF c''] less_imp_neq[OF c''] c'' mult_less_cancel_left_disj[of "2 * ?c" 0 "?a* (- ?t / (2*?c))+ ?r"] by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2164  | 
also have "\<dots> \<longleftrightarrow> ?a*?t - 2*?c *?r < 0"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2165  | 
using nonzero_mult_divide_cancel_left[OF c'] c order_less_not_sym[OF c''] less_imp_neq[OF c''] c''  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
2166  | 
by (simp add: algebra_simps diff_divide_distrib del: distrib_right)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2167  | 
finally have ?thesis using c d nc nd  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2168  | 
by(simp add: r[of "- (?t / (2*?c))"] msubstlt_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2169  | 
}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2170  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2171  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2172  | 
  {assume c: "?c = 0" and d: "?d>0"  
 | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2173  | 
from d have d'': "2*?d > 0" by (simp add: zero_less_mult_iff)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2174  | 
from d have d': "2*?d \<noteq> 0" by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2175  | 
from c have th: "(- ?t / ?c + - ?s / ?d)/2 = - ?s / (2*?d)" by (simp add: field_simps)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2176  | 
have "?rhs \<longleftrightarrow> Ifm vs (- ?s / (2*?d) # bs) (Lt (CNP 0 a r))" by (simp only: th)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2177  | 
also have "\<dots> \<longleftrightarrow> ?a* (- ?s / (2*?d))+ ?r < 0" by (simp add: r[of "- (?s / (2*?d))"])  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2178  | 
also have "\<dots> \<longleftrightarrow> 2*?d * (?a* (- ?s / (2*?d))+ ?r) < 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2179  | 
using d mult_less_cancel_left_disj[of "2 * ?d" "?a* (- ?s / (2*?d))+ ?r" 0] d' d'' order_less_not_sym[OF d''] by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2180  | 
also have "\<dots> \<longleftrightarrow> - ?a*?s+ 2*?d *?r < 0"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2181  | 
using nonzero_mult_divide_cancel_left[OF d'] d  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
2182  | 
by (simp add: algebra_simps diff_divide_distrib less_le del: distrib_right)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2183  | 
finally have ?thesis using c d nc nd  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2184  | 
by(simp add: r[of "- (?s / (2*?d))"] msubstlt_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2185  | 
}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2186  | 
moreover  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2187  | 
  {assume c: "?c = 0" and d: "?d<0"  hence d': "2*?d \<noteq> 0" by simp
 | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2188  | 
from d have d'': "2*?d < 0" by (simp add: mult_less_0_iff)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2189  | 
from c have th: "(- ?t / ?c + - ?s / ?d)/2 = - ?s / (2*?d)" by (simp add: field_simps)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2190  | 
have "?rhs \<longleftrightarrow> Ifm vs (- ?s / (2*?d) # bs) (Lt (CNP 0 a r))" by (simp only: th)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2191  | 
also have "\<dots> \<longleftrightarrow> ?a* (- ?s / (2*?d))+ ?r < 0" by (simp add: r[of "- (?s / (2*?d))"])  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2192  | 
also have "\<dots> \<longleftrightarrow> 2*?d * (?a* (- ?s / (2*?d))+ ?r) > 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2193  | 
using d order_less_not_sym[OF d''] less_imp_neq[OF d''] d'' mult_less_cancel_left_disj[of "2 * ?d" 0 "?a* (- ?s / (2*?d))+ ?r"] by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2194  | 
also have "\<dots> \<longleftrightarrow> ?a*?s - 2*?d *?r < 0"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2195  | 
using nonzero_mult_divide_cancel_left[OF d'] d order_less_not_sym[OF d''] less_imp_neq[OF d''] d''  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
2196  | 
by (simp add: algebra_simps diff_divide_distrib del: distrib_right)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2197  | 
finally have ?thesis using c d nc nd  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2198  | 
by(simp add: r[of "- (?s / (2*?d))"] msubstlt_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2199  | 
}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2200  | 
ultimately show ?thesis by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2201  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2202  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2203  | 
definition "msubstle c t d s a r =  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2204  | 
evaldjf (split conj)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2205  | 
[(let cd = c *\<^sub>p d in (lt (CP (~\<^sub>p cd)), Le (Add (Mul (~\<^sub>p a) (Add (Mul d t) (Mul c s))) (Mul (2\<^sub>p *\<^sub>p cd) r)))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2206  | 
(let cd = c *\<^sub>p d in (lt (CP cd), Le (Sub (Mul a (Add (Mul d t) (Mul c s))) (Mul (2\<^sub>p *\<^sub>p cd) r)))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2207  | 
(conj (lt (CP (~\<^sub>p c))) (Eq (CP d)) , Le (Add (Mul (~\<^sub>p a) t) (Mul (2\<^sub>p *\<^sub>p c) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2208  | 
(conj (lt (CP c)) (Eq (CP d)) , Le (Sub (Mul a t) (Mul (2\<^sub>p *\<^sub>p c) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2209  | 
(conj (lt (CP (~\<^sub>p d))) (Eq (CP c)) , Le (Add (Mul (~\<^sub>p a) s) (Mul (2\<^sub>p *\<^sub>p d) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2210  | 
(conj (lt (CP d)) (Eq (CP c)) , Le (Sub (Mul a s) (Mul (2\<^sub>p *\<^sub>p d) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2211  | 
(conj (Eq (CP c)) (Eq (CP d)) , Le r)]"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2212  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2213  | 
lemma msubstle_nb: assumes lp: "islin (Le (CNP 0 a r))" and t: "tmbound0 t" and s: "tmbound0 s"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2214  | 
shows "bound0 (msubstle c t d s a r)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2215  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2216  | 
have th: "\<forall>x\<in> set [(let cd = c *\<^sub>p d in (lt (CP (~\<^sub>p cd)), Le (Add (Mul (~\<^sub>p a) (Add (Mul d t) (Mul c s))) (Mul (2\<^sub>p *\<^sub>p cd) r)))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2217  | 
(let cd = c *\<^sub>p d in (lt (CP cd), Le (Sub (Mul a (Add (Mul d t) (Mul c s))) (Mul (2\<^sub>p *\<^sub>p cd) r)))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2218  | 
(conj (lt (CP (~\<^sub>p c))) (Eq (CP d)) , Le (Add (Mul (~\<^sub>p a) t) (Mul (2\<^sub>p *\<^sub>p c) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2219  | 
(conj (lt (CP c)) (Eq (CP d)) , Le (Sub (Mul a t) (Mul (2\<^sub>p *\<^sub>p c) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2220  | 
(conj (lt (CP (~\<^sub>p d))) (Eq (CP c)) , Le (Add (Mul (~\<^sub>p a) s) (Mul (2\<^sub>p *\<^sub>p d) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2221  | 
(conj (lt (CP d)) (Eq (CP c)) , Le (Sub (Mul a s) (Mul (2\<^sub>p *\<^sub>p d) r))),  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2222  | 
(conj (Eq (CP c)) (Eq (CP d)) , Le r)]. bound0 (split conj x)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2223  | 
using lp by (simp add: Let_def t s lt_nb )  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2224  | 
from evaldjf_bound0[OF th] show ?thesis by (simp add: msubstle_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2225  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2226  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2227  | 
lemma msubstle: assumes nc: "isnpoly c" and nd: "isnpoly d" and lp: "islin (Le (CNP 0 a r))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2228  | 
shows "Ifm vs (x#bs) (msubstle c t d s a r) \<longleftrightarrow>  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2229  | 
Ifm vs (((- Itm vs (x#bs) t / Ipoly vs c + - Itm vs (x#bs) s / Ipoly vs d) /2)#bs) (Le (CNP 0 a r))" (is "?lhs = ?rhs")  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2230  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2231  | 
let ?Nt = "\<lambda>x t. Itm vs (x#bs) t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2232  | 
let ?N = "\<lambda>p. Ipoly vs p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2233  | 
let ?c = "?N c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2234  | 
let ?d = "?N d"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2235  | 
let ?t = "?Nt x t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2236  | 
let ?s = "?Nt x s"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2237  | 
let ?a = "?N a"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2238  | 
let ?r = "?Nt x r"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2239  | 
from lp have lin:"isnpoly a" "a \<noteq> 0\<^sub>p" "tmbound0 r" "allpolys isnpoly r" by simp_all  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2240  | 
note r= tmbound0_I[OF lin(3), of vs _ bs x]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2241  | 
have cd_cs: "?c * ?d < 0 \<or> ?c * ?d > 0 \<or> (?c = 0 \<and> ?d = 0) \<or> (?c = 0 \<and> ?d < 0) \<or> (?c = 0 \<and> ?d > 0) \<or> (?c < 0 \<and> ?d = 0) \<or> (?c > 0 \<and> ?d = 0)" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2242  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2243  | 
  {assume c: "?c=0" and d: "?d=0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2244  | 
hence ?thesis using nc nd by (simp add: polyneg_norm polymul_norm lt r[of 0] msubstle_def Let_def evaldjf_ex)}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2245  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2246  | 
  {assume dc: "?c*?d > 0" 
 | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2247  | 
from dc have dc': "2*?c *?d > 0" by simp  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2248  | 
hence c:"?c \<noteq> 0" and d: "?d\<noteq> 0" by auto  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2249  | 
from dc' have dc'': "\<not> 2*?c *?d < 0" by simp  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2250  | 
from add_frac_eq[OF c d, of "- ?t" "- ?s"]  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2251  | 
have th: "(- ?t / ?c + - ?s / ?d)/2 = - (?d * ?t + ?c* ?s )/ (2*?c*?d)"  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
2252  | 
by (simp add: field_simps)  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2253  | 
have "?rhs \<longleftrightarrow> Ifm vs (- (?d * ?t + ?c* ?s )/ (2*?c*?d) # bs) (Le (CNP 0 a r))" by (simp only: th)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2254  | 
also have "\<dots> \<longleftrightarrow> ?a * (- (?d * ?t + ?c* ?s )/ (2*?c*?d)) + ?r <= 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2255  | 
by (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / (2 * ?c * ?d)"])  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2256  | 
also have "\<dots> \<longleftrightarrow> (2 * ?c * ?d) * (?a * (- (?d * ?t + ?c* ?s )/ (2*?c*?d)) + ?r) <= 0"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2257  | 
|
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2258  | 
using dc' dc'' mult_le_cancel_left[of "2 * ?c * ?d" "?a * (- (?d * ?t + ?c* ?s)/ (2*?c*?d)) + ?r" 0] by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2259  | 
also have "\<dots> \<longleftrightarrow> ?a * (- (?d * ?t + ?c* ?s )) + 2*?c*?d*?r <= 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2260  | 
using nonzero_mult_divide_cancel_left[of "2*?c*?d"] c d  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
2261  | 
by (simp add: algebra_simps diff_divide_distrib del: distrib_right)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2262  | 
finally have ?thesis using dc c d nc nd dc'  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2263  | 
by (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / (2 * ?c * ?d)"] msubstle_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2264  | 
}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2265  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2266  | 
  {assume dc: "?c*?d < 0" 
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2267  | 
|
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2268  | 
from dc have dc': "2*?c *?d < 0"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2269  | 
by (simp add: mult_less_0_iff field_simps add_neg_neg add_pos_pos)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2270  | 
hence c:"?c \<noteq> 0" and d: "?d\<noteq> 0" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2271  | 
from add_frac_eq[OF c d, of "- ?t" "- ?s"]  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2272  | 
have th: "(- ?t / ?c + - ?s / ?d)/2 = - (?d * ?t + ?c* ?s )/ (2*?c*?d)"  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
2273  | 
by (simp add: field_simps)  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2274  | 
have "?rhs \<longleftrightarrow> Ifm vs (- (?d * ?t + ?c* ?s )/ (2*?c*?d) # bs) (Le (CNP 0 a r))" by (simp only: th)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2275  | 
also have "\<dots> \<longleftrightarrow> ?a * (- (?d * ?t + ?c* ?s )/ (2*?c*?d)) + ?r <= 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2276  | 
by (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / (2 * ?c * ?d)"])  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2277  | 
|
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2278  | 
also have "\<dots> \<longleftrightarrow> (2 * ?c * ?d) * (?a * (- (?d * ?t + ?c* ?s )/ (2*?c*?d)) + ?r) >= 0"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2279  | 
|
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2280  | 
using dc' order_less_not_sym[OF dc'] mult_le_cancel_left[of "2 * ?c * ?d" 0 "?a * (- (?d * ?t + ?c* ?s)/ (2*?c*?d)) + ?r"] by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2281  | 
also have "\<dots> \<longleftrightarrow> ?a * ((?d * ?t + ?c* ?s )) - 2*?c*?d*?r <= 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2282  | 
using nonzero_mult_divide_cancel_left[of "2*?c*?d"] c d  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
2283  | 
by (simp add: algebra_simps diff_divide_distrib del: distrib_right)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2284  | 
finally have ?thesis using dc c d nc nd  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2285  | 
by (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / (2 * ?c * ?d)"] msubstle_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2286  | 
}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2287  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2288  | 
  {assume c: "?c > 0" and d: "?d=0"  
 | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2289  | 
from c have c'': "2*?c > 0" by (simp add: zero_less_mult_iff)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2290  | 
from c have c': "2*?c \<noteq> 0" by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2291  | 
from d have th: "(- ?t / ?c + - ?s / ?d)/2 = - ?t / (2*?c)" by (simp add: field_simps)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2292  | 
have "?rhs \<longleftrightarrow> Ifm vs (- ?t / (2*?c) # bs) (Le (CNP 0 a r))" by (simp only: th)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2293  | 
also have "\<dots> \<longleftrightarrow> ?a* (- ?t / (2*?c))+ ?r <= 0" by (simp add: r[of "- (?t / (2*?c))"])  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2294  | 
also have "\<dots> \<longleftrightarrow> 2*?c * (?a* (- ?t / (2*?c))+ ?r) <= 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2295  | 
using c mult_le_cancel_left[of "2 * ?c" "?a* (- ?t / (2*?c))+ ?r" 0] c' c'' order_less_not_sym[OF c''] by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2296  | 
also have "\<dots> \<longleftrightarrow> - ?a*?t+ 2*?c *?r <= 0"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2297  | 
using nonzero_mult_divide_cancel_left[OF c'] c  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
2298  | 
by (simp add: algebra_simps diff_divide_distrib less_le del: distrib_right)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2299  | 
finally have ?thesis using c d nc nd  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2300  | 
by(simp add: r[of "- (?t / (2*?c))"] msubstle_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2301  | 
}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2302  | 
moreover  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2303  | 
  {assume c: "?c < 0" and d: "?d=0"  hence c': "2*?c \<noteq> 0" by simp
 | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2304  | 
from c have c'': "2*?c < 0" by (simp add: mult_less_0_iff)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2305  | 
from d have th: "(- ?t / ?c + - ?s / ?d)/2 = - ?t / (2*?c)" by (simp add: field_simps)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2306  | 
have "?rhs \<longleftrightarrow> Ifm vs (- ?t / (2*?c) # bs) (Le (CNP 0 a r))" by (simp only: th)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2307  | 
also have "\<dots> \<longleftrightarrow> ?a* (- ?t / (2*?c))+ ?r <= 0" by (simp add: r[of "- (?t / (2*?c))"])  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2308  | 
also have "\<dots> \<longleftrightarrow> 2*?c * (?a* (- ?t / (2*?c))+ ?r) >= 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2309  | 
using c order_less_not_sym[OF c''] less_imp_neq[OF c''] c'' mult_le_cancel_left[of "2 * ?c" 0 "?a* (- ?t / (2*?c))+ ?r"] by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2310  | 
also have "\<dots> \<longleftrightarrow> ?a*?t - 2*?c *?r <= 0"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2311  | 
using nonzero_mult_divide_cancel_left[OF c'] c order_less_not_sym[OF c''] less_imp_neq[OF c''] c''  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
2312  | 
by (simp add: algebra_simps diff_divide_distrib del: distrib_right)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2313  | 
finally have ?thesis using c d nc nd  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2314  | 
by(simp add: r[of "- (?t / (2*?c))"] msubstle_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2315  | 
}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2316  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2317  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2318  | 
  {assume c: "?c = 0" and d: "?d>0"  
 | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2319  | 
from d have d'': "2*?d > 0" by (simp add: zero_less_mult_iff)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2320  | 
from d have d': "2*?d \<noteq> 0" by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2321  | 
from c have th: "(- ?t / ?c + - ?s / ?d)/2 = - ?s / (2*?d)" by (simp add: field_simps)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2322  | 
have "?rhs \<longleftrightarrow> Ifm vs (- ?s / (2*?d) # bs) (Le (CNP 0 a r))" by (simp only: th)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2323  | 
also have "\<dots> \<longleftrightarrow> ?a* (- ?s / (2*?d))+ ?r <= 0" by (simp add: r[of "- (?s / (2*?d))"])  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2324  | 
also have "\<dots> \<longleftrightarrow> 2*?d * (?a* (- ?s / (2*?d))+ ?r) <= 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2325  | 
using d mult_le_cancel_left[of "2 * ?d" "?a* (- ?s / (2*?d))+ ?r" 0] d' d'' order_less_not_sym[OF d''] by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2326  | 
also have "\<dots> \<longleftrightarrow> - ?a*?s+ 2*?d *?r <= 0"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2327  | 
using nonzero_mult_divide_cancel_left[OF d'] d  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
2328  | 
by (simp add: algebra_simps diff_divide_distrib less_le del: distrib_right)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2329  | 
finally have ?thesis using c d nc nd  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2330  | 
by(simp add: r[of "- (?s / (2*?d))"] msubstle_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2331  | 
}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2332  | 
moreover  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2333  | 
  {assume c: "?c = 0" and d: "?d<0"  hence d': "2*?d \<noteq> 0" by simp
 | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2334  | 
from d have d'': "2*?d < 0" by (simp add: mult_less_0_iff)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2335  | 
from c have th: "(- ?t / ?c + - ?s / ?d)/2 = - ?s / (2*?d)" by (simp add: field_simps)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2336  | 
have "?rhs \<longleftrightarrow> Ifm vs (- ?s / (2*?d) # bs) (Le (CNP 0 a r))" by (simp only: th)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2337  | 
also have "\<dots> \<longleftrightarrow> ?a* (- ?s / (2*?d))+ ?r <= 0" by (simp add: r[of "- (?s / (2*?d))"])  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2338  | 
also have "\<dots> \<longleftrightarrow> 2*?d * (?a* (- ?s / (2*?d))+ ?r) >= 0"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2339  | 
using d order_less_not_sym[OF d''] less_imp_neq[OF d''] d'' mult_le_cancel_left[of "2 * ?d" 0 "?a* (- ?s / (2*?d))+ ?r"] by simp  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2340  | 
also have "\<dots> \<longleftrightarrow> ?a*?s - 2*?d *?r <= 0"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2341  | 
using nonzero_mult_divide_cancel_left[OF d'] d order_less_not_sym[OF d''] less_imp_neq[OF d''] d''  | 
| 
49962
 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 
webertj 
parents: 
48562 
diff
changeset
 | 
2342  | 
by (simp add: algebra_simps diff_divide_distrib del: distrib_right)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2343  | 
finally have ?thesis using c d nc nd  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2344  | 
by(simp add: r[of "- (?s / (2*?d))"] msubstle_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm)  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2345  | 
}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2346  | 
ultimately show ?thesis by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2347  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2348  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2349  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2350  | 
fun msubst :: "fm \<Rightarrow> (poly \<times> tm) \<times> (poly \<times> tm) \<Rightarrow> fm" where  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2351  | 
"msubst (And p q) ((c,t), (d,s)) = conj (msubst p ((c,t),(d,s))) (msubst q ((c,t),(d,s)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2352  | 
| "msubst (Or p q) ((c,t), (d,s)) = disj (msubst p ((c,t),(d,s))) (msubst q ((c,t), (d,s)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2353  | 
| "msubst (Eq (CNP 0 a r)) ((c,t),(d,s)) = msubsteq c t d s a r"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2354  | 
| "msubst (NEq (CNP 0 a r)) ((c,t),(d,s)) = msubstneq c t d s a r"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2355  | 
| "msubst (Lt (CNP 0 a r)) ((c,t),(d,s)) = msubstlt c t d s a r"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2356  | 
| "msubst (Le (CNP 0 a r)) ((c,t),(d,s)) = msubstle c t d s a r"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2357  | 
| "msubst p ((c,t),(d,s)) = p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2358  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2359  | 
lemma msubst_I: assumes lp: "islin p" and nc: "isnpoly c" and nd: "isnpoly d"  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2360  | 
shows "Ifm vs (x#bs) (msubst p ((c,t),(d,s))) = Ifm vs (((- Itm vs (x#bs) t / Ipoly vs c + - Itm vs (x#bs) s / Ipoly vs d) /2)#bs) p"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2361  | 
using lp  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2362  | 
by (induct p rule: islin.induct, auto simp add: tmbound0_I[where b="(- (Itm vs (x # bs) t / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>) + - (Itm vs (x # bs) s / \<lparr>d\<rparr>\<^sub>p\<^bsup>vs\<^esup>)) / 2" and b'=x and bs = bs and vs=vs] bound0_I[where b="(- (Itm vs (x # bs) t / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>) + - (Itm vs (x # bs) s / \<lparr>d\<rparr>\<^sub>p\<^bsup>vs\<^esup>)) / 2" and b'=x and bs = bs and vs=vs] msubsteq msubstneq msubstlt[OF nc nd] msubstle[OF nc nd])  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2363  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2364  | 
lemma msubst_nb: assumes lp: "islin p" and t: "tmbound0 t" and s: "tmbound0 s"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2365  | 
shows "bound0 (msubst p ((c,t),(d,s)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2366  | 
using lp t s  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2367  | 
by (induct p rule: islin.induct, auto simp add: msubsteq_nb msubstneq_nb msubstlt_nb msubstle_nb)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2368  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2369  | 
lemma fr_eq_msubst:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2370  | 
assumes lp: "islin p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2371  | 
shows "(\<exists> x. Ifm vs (x#bs) p) = ((Ifm vs (x#bs) (minusinf p)) \<or> (Ifm vs (x#bs) (plusinf p)) \<or> (\<exists> (c,t) \<in> set (uset p). \<exists> (d,s) \<in> set (uset p). Ifm vs (x#bs) (msubst p ((c,t),(d,s)))))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2372  | 
(is "(\<exists> x. ?I x p) = (?M \<or> ?P \<or> ?F)" is "?E = ?D")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2373  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2374  | 
from uset_l[OF lp] have th: "\<forall>(c, s)\<in>set (uset p). isnpoly c \<and> tmbound0 s" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2375  | 
{fix c t d s assume ctU: "(c,t) \<in>set (uset p)" and dsU: "(d,s) \<in>set (uset p)" 
 | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2376  | 
and pts: "Ifm vs ((- Itm vs (x # bs) t / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup> + - Itm vs (x # bs) s / \<lparr>d\<rparr>\<^sub>p\<^bsup>vs\<^esup>) / 2 # bs) p"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2377  | 
from th[rule_format, OF ctU] th[rule_format, OF dsU] have norm:"isnpoly c" "isnpoly d" by simp_all  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2378  | 
from msubst_I[OF lp norm, of vs x bs t s] pts  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2379  | 
have "Ifm vs (x # bs) (msubst p ((c, t), d, s))" ..}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2380  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2381  | 
{fix c t d s assume ctU: "(c,t) \<in>set (uset p)" and dsU: "(d,s) \<in>set (uset p)" 
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2382  | 
and pts: "Ifm vs (x # bs) (msubst p ((c, t), d, s))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2383  | 
from th[rule_format, OF ctU] th[rule_format, OF dsU] have norm:"isnpoly c" "isnpoly d" by simp_all  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2384  | 
from msubst_I[OF lp norm, of vs x bs t s] pts  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2385  | 
have "Ifm vs ((- Itm vs (x # bs) t / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup> + - Itm vs (x # bs) s / \<lparr>d\<rparr>\<^sub>p\<^bsup>vs\<^esup>) / 2 # bs) p" ..}  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2386  | 
ultimately have th': "(\<exists> (c,t) \<in> set (uset p). \<exists> (d,s) \<in> set (uset p). Ifm vs ((- Itm vs (x # bs) t / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup> + - Itm vs (x # bs) s / \<lparr>d\<rparr>\<^sub>p\<^bsup>vs\<^esup>) / 2 # bs) p) \<longleftrightarrow> ?F" by blast  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2387  | 
from fr_eq[OF lp, of vs bs x, simplified th'] show ?thesis .  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2388  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2389  | 
|
| 36409 | 2390  | 
lemma simpfm_lin:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2391  | 
shows "qfree p \<Longrightarrow> islin (simpfm p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2392  | 
by (induct p rule: simpfm.induct, auto simp add: conj_lin disj_lin)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2393  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2394  | 
definition  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2395  | 
"ferrack p \<equiv> let q = simpfm p ; mp = minusinf q ; pp = plusinf q  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2396  | 
in if (mp = T \<or> pp = T) then T  | 
| 41823 | 2397  | 
else (let U = alluopairs (remdups (uset q))  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2398  | 
in decr0 (disj mp (disj pp (evaldjf (simpfm o (msubst q)) U ))))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2399  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2400  | 
lemma ferrack:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2401  | 
assumes qf: "qfree p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2402  | 
shows "qfree (ferrack p) \<and> ((Ifm vs bs (ferrack p)) = (Ifm vs bs (E p)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2403  | 
(is "_ \<and> (?rhs = ?lhs)")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2404  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2405  | 
let ?I = "\<lambda> x p. Ifm vs (x#bs) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2406  | 
let ?N = "\<lambda> t. Ipoly vs t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2407  | 
let ?Nt = "\<lambda>x t. Itm vs (x#bs) t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2408  | 
let ?q = "simpfm p"  | 
| 41823 | 2409  | 
let ?U = "remdups(uset ?q)"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2410  | 
let ?Up = "alluopairs ?U"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2411  | 
let ?mp = "minusinf ?q"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2412  | 
let ?pp = "plusinf ?q"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2413  | 
let ?I = "\<lambda>p. Ifm vs (x#bs) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2414  | 
from simpfm_lin[OF qf] simpfm_qf[OF qf] have lq: "islin ?q" and q_qf: "qfree ?q" .  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2415  | 
from minusinf_nb[OF lq] plusinf_nb[OF lq] have mp_nb: "bound0 ?mp" and pp_nb: "bound0 ?pp" .  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2416  | 
from bound0_qf[OF mp_nb] bound0_qf[OF pp_nb] have mp_qf: "qfree ?mp" and pp_qf: "qfree ?pp" .  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2417  | 
from uset_l[OF lq] have U_l: "\<forall>(c, s)\<in>set ?U. isnpoly c \<and> c \<noteq> 0\<^sub>p \<and> tmbound0 s \<and> allpolys isnpoly s"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2418  | 
by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2419  | 
  {fix c t d s assume ctU: "(c,t) \<in> set ?U" and dsU: "(d,s) \<in> set ?U"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2420  | 
from U_l ctU dsU have norm: "isnpoly c" "isnpoly d" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2421  | 
from msubst_I[OF lq norm, of vs x bs t s] msubst_I[OF lq norm(2,1), of vs x bs s t]  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
2422  | 
have "?I (msubst ?q ((c,t),(d,s))) = ?I (msubst ?q ((d,s),(c,t)))" by (simp add: field_simps)}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2423  | 
hence th0: "\<forall>x \<in> set ?U. \<forall>y \<in> set ?U. ?I (msubst ?q (x, y)) \<longleftrightarrow> ?I (msubst ?q (y, x))" by clarsimp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2424  | 
  {fix x assume xUp: "x \<in> set ?Up" 
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2425  | 
then obtain c t d s where ctU: "(c,t) \<in> set ?U" and dsU: "(d,s) \<in> set ?U"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2426  | 
and x: "x = ((c,t),(d,s))" using alluopairs_set1[of ?U] by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2427  | 
from U_l[rule_format, OF ctU] U_l[rule_format, OF dsU]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2428  | 
have nbs: "tmbound0 t" "tmbound0 s" by simp_all  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2429  | 
from simpfm_bound0[OF msubst_nb[OF lq nbs, of c d]]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2430  | 
have "bound0 ((simpfm o (msubst (simpfm p))) x)" using x by simp}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2431  | 
with evaldjf_bound0[of ?Up "(simpfm o (msubst (simpfm p)))"]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2432  | 
have "bound0 (evaldjf (simpfm o (msubst (simpfm p))) ?Up)" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2433  | 
with mp_nb pp_nb  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2434  | 
have th1: "bound0 (disj ?mp (disj ?pp (evaldjf (simpfm o (msubst ?q)) ?Up )))" by (simp add: disj_nb)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2435  | 
from decr0_qf[OF th1] have thqf: "qfree (ferrack p)" by (simp add: ferrack_def Let_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2436  | 
have "?lhs \<longleftrightarrow> (\<exists>x. Ifm vs (x#bs) ?q)" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2437  | 
also have "\<dots> \<longleftrightarrow> ?I ?mp \<or> ?I ?pp \<or> (\<exists>(c, t)\<in>set ?U. \<exists>(d, s)\<in>set ?U. ?I (msubst (simpfm p) ((c, t), d, s)))" using fr_eq_msubst[OF lq, of vs bs x] by simp  | 
| 41849 | 2438  | 
also have "\<dots> \<longleftrightarrow> ?I ?mp \<or> ?I ?pp \<or> (\<exists> (x,y) \<in> set ?Up. ?I ((simpfm o (msubst ?q)) (x,y)))" using alluopairs_bex[OF th0] by simp  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2439  | 
also have "\<dots> \<longleftrightarrow> ?I ?mp \<or> ?I ?pp \<or> ?I (evaldjf (simpfm o (msubst ?q)) ?Up)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2440  | 
by (simp add: evaldjf_ex)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2441  | 
also have "\<dots> \<longleftrightarrow> ?I (disj ?mp (disj ?pp (evaldjf (simpfm o (msubst ?q)) ?Up)))" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2442  | 
also have "\<dots> \<longleftrightarrow> ?rhs" using decr0[OF th1, of vs x bs]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2443  | 
apply (simp add: ferrack_def Let_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2444  | 
by (cases "?mp = T \<or> ?pp = T", auto)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2445  | 
finally show ?thesis using thqf by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2446  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2447  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2448  | 
definition "frpar p = simpfm (qelim p ferrack)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2449  | 
lemma frpar: "qfree (frpar p) \<and> (Ifm vs bs (frpar p) \<longleftrightarrow> Ifm vs bs p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2450  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2451  | 
from ferrack have th: "\<forall>bs p. qfree p \<longrightarrow> qfree (ferrack p) \<and> Ifm vs bs (ferrack p) = Ifm vs bs (E p)" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2452  | 
from qelim[OF th, of p bs] show ?thesis unfolding frpar_def by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2453  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2454  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2455  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2456  | 
section{* Second implemenation: Case splits not local *}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2457  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2458  | 
lemma fr_eq2: assumes lp: "islin p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2459  | 
shows "(\<exists> x. Ifm vs (x#bs) p) \<longleftrightarrow>  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2460  | 
((Ifm vs (x#bs) (minusinf p)) \<or> (Ifm vs (x#bs) (plusinf p)) \<or>  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2461  | 
(Ifm vs (0#bs) p) \<or>  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2462  | 
(\<exists> (n,t) \<in> set (uset p). Ipoly vs n \<noteq> 0 \<and> Ifm vs ((- Itm vs (x#bs) t / (Ipoly vs n * 2))#bs) p) \<or>  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2463  | 
(\<exists> (n,t) \<in> set (uset p). \<exists> (m,s) \<in> set (uset p). Ipoly vs n \<noteq> 0 \<and> Ipoly vs m \<noteq> 0 \<and> Ifm vs (((- Itm vs (x#bs) t / Ipoly vs n + - Itm vs (x#bs) s / Ipoly vs m) /2)#bs) p))"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2464  | 
(is "(\<exists> x. ?I x p) = (?M \<or> ?P \<or> ?Z \<or> ?U \<or> ?F)" is "?E = ?D")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2465  | 
proof  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2466  | 
assume px: "\<exists> x. ?I x p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2467  | 
have "?M \<or> ?P \<or> (\<not> ?M \<and> \<not> ?P)" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2468  | 
  moreover {assume "?M \<or> ?P" hence "?D" by blast}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2469  | 
  moreover {assume nmi: "\<not> ?M" and npi: "\<not> ?P"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2470  | 
from inf_uset[OF lp nmi npi, OF px]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2471  | 
obtain c t d s where ct: "(c,t) \<in> set (uset p)" "(d,s) \<in> set (uset p)" "?I ((- Itm vs (x # bs) t / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup> + - Itm vs (x # bs) s / \<lparr>d\<rparr>\<^sub>p\<^bsup>vs\<^esup>) / ((1\<Colon>'a) + (1\<Colon>'a))) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2472  | 
by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2473  | 
let ?c = "\<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2474  | 
let ?d = "\<lparr>d\<rparr>\<^sub>p\<^bsup>vs\<^esup>"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2475  | 
let ?s = "Itm vs (x # bs) s"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2476  | 
let ?t = "Itm vs (x # bs) t"  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2477  | 
have eq2: "\<And>(x::'a). x + x = 2 * x"  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
2478  | 
by (simp add: field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2479  | 
    {assume "?c = 0 \<and> ?d = 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2480  | 
with ct have ?D by simp}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2481  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2482  | 
    {assume z: "?c = 0" "?d \<noteq> 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2483  | 
from z have ?D using ct by auto}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2484  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2485  | 
    {assume z: "?c \<noteq> 0" "?d = 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2486  | 
with ct have ?D by auto }  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2487  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2488  | 
    {assume z: "?c \<noteq> 0" "?d \<noteq> 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2489  | 
from z have ?F using ct  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
2490  | 
apply - apply (rule bexI[where x = "(c,t)"], simp_all)  | 
| 
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
2491  | 
by (rule bexI[where x = "(d,s)"], simp_all)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2492  | 
hence ?D by blast}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2493  | 
ultimately have ?D by auto}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2494  | 
ultimately show "?D" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2495  | 
next  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2496  | 
assume "?D"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2497  | 
  moreover {assume m:"?M" from minusinf_ex[OF lp m] have "?E" .}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2498  | 
  moreover {assume p: "?P" from plusinf_ex[OF lp p] have "?E" . }
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2499  | 
  moreover {assume f:"?F" hence "?E" by blast}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2500  | 
ultimately show "?E" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2501  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2502  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2503  | 
definition "msubsteq2 c t a b = Eq (Add (Mul a t) (Mul c b))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2504  | 
definition "msubstltpos c t a b = Lt (Add (Mul a t) (Mul c b))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2505  | 
definition "msubstlepos c t a b = Le (Add (Mul a t) (Mul c b))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2506  | 
definition "msubstltneg c t a b = Lt (Neg (Add (Mul a t) (Mul c b)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2507  | 
definition "msubstleneg c t a b = Le (Neg (Add (Mul a t) (Mul c b)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2508  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2509  | 
lemma msubsteq2:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2510  | 
assumes nz: "Ipoly vs c \<noteq> 0" and l: "islin (Eq (CNP 0 a b))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2511  | 
shows "Ifm vs (x#bs) (msubsteq2 c t a b) = Ifm vs (((Itm vs (x#bs) t / Ipoly vs c ))#bs) (Eq (CNP 0 a b))" (is "?lhs = ?rhs")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2512  | 
using nz l tmbound0_I[of b vs x bs "Itm vs (x # bs) t / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>" , symmetric]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2513  | 
by (simp add: msubsteq2_def field_simps)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2514  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2515  | 
lemma msubstltpos:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2516  | 
assumes nz: "Ipoly vs c > 0" and l: "islin (Lt (CNP 0 a b))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2517  | 
shows "Ifm vs (x#bs) (msubstltpos c t a b) = Ifm vs (((Itm vs (x#bs) t / Ipoly vs c ))#bs) (Lt (CNP 0 a b))" (is "?lhs = ?rhs")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2518  | 
using nz l tmbound0_I[of b vs x bs "Itm vs (x # bs) t / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>" , symmetric]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2519  | 
by (simp add: msubstltpos_def field_simps)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2520  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2521  | 
lemma msubstlepos:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2522  | 
assumes nz: "Ipoly vs c > 0" and l: "islin (Le (CNP 0 a b))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2523  | 
shows "Ifm vs (x#bs) (msubstlepos c t a b) = Ifm vs (((Itm vs (x#bs) t / Ipoly vs c ))#bs) (Le (CNP 0 a b))" (is "?lhs = ?rhs")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2524  | 
using nz l tmbound0_I[of b vs x bs "Itm vs (x # bs) t / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>" , symmetric]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2525  | 
by (simp add: msubstlepos_def field_simps)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2526  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2527  | 
lemma msubstltneg:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2528  | 
assumes nz: "Ipoly vs c < 0" and l: "islin (Lt (CNP 0 a b))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2529  | 
shows "Ifm vs (x#bs) (msubstltneg c t a b) = Ifm vs (((Itm vs (x#bs) t / Ipoly vs c ))#bs) (Lt (CNP 0 a b))" (is "?lhs = ?rhs")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2530  | 
using nz l tmbound0_I[of b vs x bs "Itm vs (x # bs) t / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>" , symmetric]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2531  | 
by (simp add: msubstltneg_def field_simps del: minus_add_distrib)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2532  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2533  | 
lemma msubstleneg:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2534  | 
assumes nz: "Ipoly vs c < 0" and l: "islin (Le (CNP 0 a b))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2535  | 
shows "Ifm vs (x#bs) (msubstleneg c t a b) = Ifm vs (((Itm vs (x#bs) t / Ipoly vs c ))#bs) (Le (CNP 0 a b))" (is "?lhs = ?rhs")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2536  | 
using nz l tmbound0_I[of b vs x bs "Itm vs (x # bs) t / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>" , symmetric]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2537  | 
by (simp add: msubstleneg_def field_simps del: minus_add_distrib)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2538  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2539  | 
fun msubstpos :: "fm \<Rightarrow> poly \<Rightarrow> tm \<Rightarrow> fm" where  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2540  | 
"msubstpos (And p q) c t = And (msubstpos p c t) (msubstpos q c t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2541  | 
| "msubstpos (Or p q) c t = Or (msubstpos p c t) (msubstpos q c t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2542  | 
| "msubstpos (Eq (CNP 0 a r)) c t = msubsteq2 c t a r"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2543  | 
| "msubstpos (NEq (CNP 0 a r)) c t = NOT (msubsteq2 c t a r)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2544  | 
| "msubstpos (Lt (CNP 0 a r)) c t = msubstltpos c t a r"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2545  | 
| "msubstpos (Le (CNP 0 a r)) c t = msubstlepos c t a r"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2546  | 
| "msubstpos p c t = p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2547  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2548  | 
lemma msubstpos_I:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2549  | 
assumes lp: "islin p" and pos: "Ipoly vs c > 0"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2550  | 
shows "Ifm vs (x#bs) (msubstpos p c t) = Ifm vs (Itm vs (x#bs) t / Ipoly vs c #bs) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2551  | 
using lp pos  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2552  | 
by (induct p rule: islin.induct, auto simp add: msubsteq2 msubstltpos[OF pos] msubstlepos[OF pos] tmbound0_I[of _ vs "Itm vs (x # bs) t / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>" bs x] bound0_I[of _ vs "Itm vs (x # bs) t / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>" bs x] field_simps)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2553  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2554  | 
fun msubstneg :: "fm \<Rightarrow> poly \<Rightarrow> tm \<Rightarrow> fm" where  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2555  | 
"msubstneg (And p q) c t = And (msubstneg p c t) (msubstneg q c t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2556  | 
| "msubstneg (Or p q) c t = Or (msubstneg p c t) (msubstneg q c t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2557  | 
| "msubstneg (Eq (CNP 0 a r)) c t = msubsteq2 c t a r"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2558  | 
| "msubstneg (NEq (CNP 0 a r)) c t = NOT (msubsteq2 c t a r)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2559  | 
| "msubstneg (Lt (CNP 0 a r)) c t = msubstltneg c t a r"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2560  | 
| "msubstneg (Le (CNP 0 a r)) c t = msubstleneg c t a r"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2561  | 
| "msubstneg p c t = p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2562  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2563  | 
lemma msubstneg_I:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2564  | 
assumes lp: "islin p" and pos: "Ipoly vs c < 0"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2565  | 
shows "Ifm vs (x#bs) (msubstneg p c t) = Ifm vs (Itm vs (x#bs) t / Ipoly vs c #bs) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2566  | 
using lp pos  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2567  | 
by (induct p rule: islin.induct, auto simp add: msubsteq2 msubstltneg[OF pos] msubstleneg[OF pos] tmbound0_I[of _ vs "Itm vs (x # bs) t / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>" bs x] bound0_I[of _ vs "Itm vs (x # bs) t / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup>" bs x] field_simps)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2568  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2569  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2570  | 
definition "msubst2 p c t = disj (conj (lt (CP (polyneg c))) (simpfm (msubstpos p c t))) (conj (lt (CP c)) (simpfm (msubstneg p c t)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2571  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2572  | 
lemma msubst2: assumes lp: "islin p" and nc: "isnpoly c" and nz: "Ipoly vs c \<noteq> 0"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2573  | 
shows "Ifm vs (x#bs) (msubst2 p c t) = Ifm vs (Itm vs (x#bs) t / Ipoly vs c #bs) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2574  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2575  | 
let ?c = "Ipoly vs c"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2576  | 
from nc have anc: "allpolys isnpoly (CP c)" "allpolys isnpoly (CP (~\<^sub>p c))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2577  | 
by (simp_all add: polyneg_norm)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2578  | 
from nz have "?c > 0 \<or> ?c < 0" by arith  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2579  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2580  | 
  {assume c: "?c < 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2581  | 
from c msubstneg_I[OF lp c, of x bs t] lt[OF anc(1), of vs "x#bs"] lt[OF anc(2), of vs "x#bs"]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2582  | 
have ?thesis by (auto simp add: msubst2_def)}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2583  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2584  | 
  {assume c: "?c > 0"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2585  | 
from c msubstpos_I[OF lp c, of x bs t] lt[OF anc(1), of vs "x#bs"] lt[OF anc(2), of vs "x#bs"]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2586  | 
have ?thesis by (auto simp add: msubst2_def)}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2587  | 
ultimately show ?thesis by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2588  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2589  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2590  | 
term msubsteq2  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2591  | 
lemma msubsteq2_nb: "tmbound0 t \<Longrightarrow> islin (Eq (CNP 0 a r)) \<Longrightarrow> bound0 (msubsteq2 c t a r)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2592  | 
by (simp add: msubsteq2_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2593  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2594  | 
lemma msubstltpos_nb: "tmbound0 t \<Longrightarrow> islin (Lt (CNP 0 a r)) \<Longrightarrow> bound0 (msubstltpos c t a r)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2595  | 
by (simp add: msubstltpos_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2596  | 
lemma msubstltneg_nb: "tmbound0 t \<Longrightarrow> islin (Lt (CNP 0 a r)) \<Longrightarrow> bound0 (msubstltneg c t a r)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2597  | 
by (simp add: msubstltneg_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2598  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2599  | 
lemma msubstlepos_nb: "tmbound0 t \<Longrightarrow> islin (Le (CNP 0 a r)) \<Longrightarrow> bound0 (msubstlepos c t a r)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2600  | 
by (simp add: msubstlepos_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2601  | 
lemma msubstleneg_nb: "tmbound0 t \<Longrightarrow> islin (Le (CNP 0 a r)) \<Longrightarrow> bound0 (msubstleneg c t a r)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2602  | 
by (simp add: msubstleneg_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2603  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2604  | 
lemma msubstpos_nb: assumes lp: "islin p" and tnb: "tmbound0 t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2605  | 
shows "bound0 (msubstpos p c t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2606  | 
using lp tnb  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2607  | 
by (induct p c t rule: msubstpos.induct, auto simp add: msubsteq2_nb msubstltpos_nb msubstlepos_nb)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2608  | 
|
| 36409 | 2609  | 
lemma msubstneg_nb: assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})" and lp: "islin p" and tnb: "tmbound0 t"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2610  | 
shows "bound0 (msubstneg p c t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2611  | 
using lp tnb  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2612  | 
by (induct p c t rule: msubstneg.induct, auto simp add: msubsteq2_nb msubstltneg_nb msubstleneg_nb)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2613  | 
|
| 36409 | 2614  | 
lemma msubst2_nb: assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})" and lp: "islin p" and tnb: "tmbound0 t"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2615  | 
shows "bound0 (msubst2 p c t)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2616  | 
using lp tnb  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2617  | 
by (simp add: msubst2_def msubstneg_nb msubstpos_nb conj_nb disj_nb lt_nb simpfm_bound0)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2618  | 
|
| 
47108
 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 
huffman 
parents: 
45499 
diff
changeset
 | 
2619  | 
lemma mult_minus2_left: "-2 * (x::'a::comm_ring_1) = - (2 * x)"  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2620  | 
by simp  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2621  | 
|
| 
47108
 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 
huffman 
parents: 
45499 
diff
changeset
 | 
2622  | 
lemma mult_minus2_right: "(x::'a::comm_ring_1) * -2 = - (x * 2)"  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2623  | 
by simp  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2624  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2625  | 
lemma islin_qf: "islin p \<Longrightarrow> qfree p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2626  | 
by (induct p rule: islin.induct, auto simp add: bound0_qf)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2627  | 
lemma fr_eq_msubst2:  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2628  | 
assumes lp: "islin p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2629  | 
shows "(\<exists> x. Ifm vs (x#bs) p) \<longleftrightarrow> ((Ifm vs (x#bs) (minusinf p)) \<or> (Ifm vs (x#bs) (plusinf p)) \<or> Ifm vs (x#bs) (subst0 (CP 0\<^sub>p) p) \<or> (\<exists>(n, t)\<in>set (uset p). Ifm vs (x# bs) (msubst2 p (n *\<^sub>p (C (-2,1))) t)) \<or> (\<exists> (c,t) \<in> set (uset p). \<exists> (d,s) \<in> set (uset p). Ifm vs (x#bs) (msubst2 p (C (-2, 1) *\<^sub>p c*\<^sub>p d) (Add (Mul d t) (Mul c s)))))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2630  | 
(is "(\<exists> x. ?I x p) = (?M \<or> ?P \<or> ?Pz \<or> ?PU \<or> ?F)" is "?E = ?D")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2631  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2632  | 
from uset_l[OF lp] have th: "\<forall>(c, s)\<in>set (uset p). isnpoly c \<and> tmbound0 s" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2633  | 
let ?I = "\<lambda>p. Ifm vs (x#bs) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2634  | 
have n2: "isnpoly (C (-2,1))" by (simp add: isnpoly_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2635  | 
note eq0 = subst0[OF islin_qf[OF lp], of vs x bs "CP 0\<^sub>p", simplified]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2636  | 
|
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2637  | 
have eq1: "(\<exists>(n, t)\<in>set (uset p). ?I (msubst2 p (n *\<^sub>p (C (-2,1))) t)) \<longleftrightarrow> (\<exists>(n, t)\<in>set (uset p). \<lparr>n\<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0 \<and> Ifm vs (- Itm vs (x # bs) t / (\<lparr>n\<rparr>\<^sub>p\<^bsup>vs\<^esup> * 2) # bs) p)"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2638  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2639  | 
    {fix n t assume H: "(n, t)\<in>set (uset p)" "?I(msubst2 p (n *\<^sub>p C (-2, 1)) t)"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2640  | 
from H(1) th have "isnpoly n" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2641  | 
hence nn: "isnpoly (n *\<^sub>p (C (-2,1)))" by (simp_all add: polymul_norm n2)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2642  | 
have nn': "allpolys isnpoly (CP (~\<^sub>p (n *\<^sub>p C (-2, 1))))"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
2643  | 
by (simp add: polyneg_norm nn)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2644  | 
hence nn2: "\<lparr>n *\<^sub>p(C (-2,1)) \<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0" "\<lparr>n \<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0" using H(2) nn' nn  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
2645  | 
by (auto simp add: msubst2_def lt zero_less_mult_iff mult_less_0_iff)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2646  | 
from msubst2[OF lp nn nn2(1), of x bs t]  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2647  | 
have "\<lparr>n\<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0 \<and> Ifm vs (- Itm vs (x # bs) t / (\<lparr>n\<rparr>\<^sub>p\<^bsup>vs\<^esup> * 2) # bs) p"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2648  | 
using H(2) nn2 by (simp add: mult_minus2_right)}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2649  | 
moreover  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2650  | 
    {fix n t assume H: "(n, t)\<in>set (uset p)" "\<lparr>n\<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0" "Ifm vs (- Itm vs (x # bs) t / (\<lparr>n\<rparr>\<^sub>p\<^bsup>vs\<^esup> * 2) # bs) p"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2651  | 
from H(1) th have "isnpoly n" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2652  | 
hence nn: "isnpoly (n *\<^sub>p (C (-2,1)))" "\<lparr>n *\<^sub>p(C (-2,1)) \<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
2653  | 
using H(2) by (simp_all add: polymul_norm n2)  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2654  | 
from msubst2[OF lp nn, of x bs t] have "?I (msubst2 p (n *\<^sub>p (C (-2,1))) t)" using H(2,3) by (simp add: mult_minus2_right)}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2655  | 
ultimately show ?thesis by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2656  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2657  | 
have eq2: "(\<exists> (c,t) \<in> set (uset p). \<exists> (d,s) \<in> set (uset p). Ifm vs (x#bs) (msubst2 p (C (-2, 1) *\<^sub>p c*\<^sub>p d) (Add (Mul d t) (Mul c s)))) \<longleftrightarrow> (\<exists>(n, t)\<in>set (uset p).  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2658  | 
\<exists>(m, s)\<in>set (uset p). \<lparr>n\<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0 \<and> \<lparr>m\<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0 \<and> Ifm vs ((- Itm vs (x # bs) t / \<lparr>n\<rparr>\<^sub>p\<^bsup>vs\<^esup> + - Itm vs (x # bs) s / \<lparr>m\<rparr>\<^sub>p\<^bsup>vs\<^esup>) / 2 # bs) p)"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2659  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2660  | 
    {fix c t d s assume H: "(c,t) \<in> set (uset p)" "(d,s) \<in> set (uset p)" 
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2661  | 
"Ifm vs (x#bs) (msubst2 p (C (-2, 1) *\<^sub>p c*\<^sub>p d) (Add (Mul d t) (Mul c s)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2662  | 
from H(1,2) th have "isnpoly c" "isnpoly d" by blast+  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2663  | 
hence nn: "isnpoly (C (-2, 1) *\<^sub>p c*\<^sub>p d)"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
2664  | 
by (simp_all add: polymul_norm n2)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2665  | 
have stupid: "allpolys isnpoly (CP (~\<^sub>p (C (-2, 1) *\<^sub>p c *\<^sub>p d)))" "allpolys isnpoly (CP ((C (-2, 1) *\<^sub>p c *\<^sub>p d)))"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
2666  | 
by (simp_all add: polyneg_norm nn)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2667  | 
have nn': "\<lparr>(C (-2, 1) *\<^sub>p c*\<^sub>p d)\<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0" "\<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0" "\<lparr>d\<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
2668  | 
using H(3) by (auto simp add: msubst2_def lt[OF stupid(1)] lt[OF stupid(2)] zero_less_mult_iff mult_less_0_iff)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2669  | 
from msubst2[OF lp nn nn'(1), of x bs ] H(3) nn'  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2670  | 
have "\<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0 \<and> \<lparr>d\<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0 \<and> Ifm vs ((- Itm vs (x # bs) t / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup> + - Itm vs (x # bs) s / \<lparr>d\<rparr>\<^sub>p\<^bsup>vs\<^esup>) / 2 # bs) p"  | 
| 
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2671  | 
apply (simp add: add_divide_distrib mult_minus2_left)  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
2672  | 
by (simp add: mult_commute)}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2673  | 
moreover  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2674  | 
    {fix c t d s assume H: "(c,t) \<in> set (uset p)" "(d,s) \<in> set (uset p)" 
 | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2675  | 
"\<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0" "\<lparr>d\<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0" "Ifm vs ((- Itm vs (x # bs) t / \<lparr>c\<rparr>\<^sub>p\<^bsup>vs\<^esup> + - Itm vs (x # bs) s / \<lparr>d\<rparr>\<^sub>p\<^bsup>vs\<^esup>) / 2 # bs) p"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2676  | 
from H(1,2) th have "isnpoly c" "isnpoly d" by blast+  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2677  | 
hence nn: "isnpoly (C (-2, 1) *\<^sub>p c*\<^sub>p d)" "\<lparr>(C (-2, 1) *\<^sub>p c*\<^sub>p d)\<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
2678  | 
using H(3,4) by (simp_all add: polymul_norm n2)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2679  | 
from msubst2[OF lp nn, of x bs ] H(3,4,5)  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2680  | 
have "Ifm vs (x#bs) (msubst2 p (C (-2, 1) *\<^sub>p c*\<^sub>p d) (Add (Mul d t) (Mul c s)))" apply (simp add: add_divide_distrib mult_minus2_left) by (simp add: mult_commute)}  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2681  | 
ultimately show ?thesis by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2682  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2683  | 
from fr_eq2[OF lp, of vs bs x] show ?thesis  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2684  | 
unfolding eq0 eq1 eq2 by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2685  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2686  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2687  | 
definition  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2688  | 
"ferrack2 p \<equiv> let q = simpfm p ; mp = minusinf q ; pp = plusinf q  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2689  | 
in if (mp = T \<or> pp = T) then T  | 
| 41823 | 2690  | 
else (let U = remdups (uset q)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2691  | 
in decr0 (list_disj [mp, pp, simpfm (subst0 (CP 0\<^sub>p) q), evaldjf (\<lambda>(c,t). msubst2 q (c *\<^sub>p C (-2, 1)) t) U,  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2692  | 
evaldjf (\<lambda>((b,a),(d,c)). msubst2 q (C (-2, 1) *\<^sub>p b*\<^sub>p d) (Add (Mul d a) (Mul b c))) (alluopairs U)]))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2693  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2694  | 
definition "frpar2 p = simpfm (qelim (prep p) ferrack2)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2695  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2696  | 
lemma ferrack2: assumes qf: "qfree p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2697  | 
shows "qfree (ferrack2 p) \<and> ((Ifm vs bs (ferrack2 p)) = (Ifm vs bs (E p)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2698  | 
(is "_ \<and> (?rhs = ?lhs)")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2699  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2700  | 
let ?J = "\<lambda> x p. Ifm vs (x#bs) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2701  | 
let ?N = "\<lambda> t. Ipoly vs t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2702  | 
let ?Nt = "\<lambda>x t. Itm vs (x#bs) t"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2703  | 
let ?q = "simpfm p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2704  | 
let ?qz = "subst0 (CP 0\<^sub>p) ?q"  | 
| 41823 | 2705  | 
let ?U = "remdups(uset ?q)"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2706  | 
let ?Up = "alluopairs ?U"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2707  | 
let ?mp = "minusinf ?q"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2708  | 
let ?pp = "plusinf ?q"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2709  | 
let ?I = "\<lambda>p. Ifm vs (x#bs) p"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2710  | 
from simpfm_lin[OF qf] simpfm_qf[OF qf] have lq: "islin ?q" and q_qf: "qfree ?q" .  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2711  | 
from minusinf_nb[OF lq] plusinf_nb[OF lq] have mp_nb: "bound0 ?mp" and pp_nb: "bound0 ?pp" .  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2712  | 
from bound0_qf[OF mp_nb] bound0_qf[OF pp_nb] have mp_qf: "qfree ?mp" and pp_qf: "qfree ?pp" .  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2713  | 
from uset_l[OF lq] have U_l: "\<forall>(c, s)\<in>set ?U. isnpoly c \<and> c \<noteq> 0\<^sub>p \<and> tmbound0 s \<and> allpolys isnpoly s"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2714  | 
by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2715  | 
have bnd0: "\<forall>x \<in> set ?U. bound0 ((\<lambda>(c,t). msubst2 ?q (c *\<^sub>p C (-2, 1)) t) x)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2716  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2717  | 
    {fix c t assume ct: "(c,t) \<in> set ?U"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2718  | 
hence tnb: "tmbound0 t" using U_l by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2719  | 
from msubst2_nb[OF lq tnb]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2720  | 
have "bound0 ((\<lambda>(c,t). msubst2 ?q (c *\<^sub>p C (-2, 1)) t) (c,t))" by simp}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2721  | 
thus ?thesis by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2722  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2723  | 
have bnd1: "\<forall>x \<in> set ?Up. bound0 ((\<lambda>((b,a),(d,c)). msubst2 ?q (C (-2, 1) *\<^sub>p b*\<^sub>p d) (Add (Mul d a) (Mul b c))) x)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2724  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2725  | 
    {fix b a d c assume badc: "((b,a),(d,c)) \<in> set ?Up"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2726  | 
from badc U_l alluopairs_set1[of ?U]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2727  | 
have nb: "tmbound0 (Add (Mul d a) (Mul b c))" by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2728  | 
from msubst2_nb[OF lq nb] have "bound0 ((\<lambda>((b,a),(d,c)). msubst2 ?q (C (-2, 1) *\<^sub>p b*\<^sub>p d) (Add (Mul d a) (Mul b c))) ((b,a),(d,c)))" by simp}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2729  | 
thus ?thesis by auto  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2730  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2731  | 
have stupid: "bound0 F" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2732  | 
let ?R = "list_disj [?mp, ?pp, simpfm (subst0 (CP 0\<^sub>p) ?q), evaldjf (\<lambda>(c,t). msubst2 ?q (c *\<^sub>p C (-2, 1)) t) ?U,  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2733  | 
evaldjf (\<lambda>((b,a),(d,c)). msubst2 ?q (C (-2, 1) *\<^sub>p b*\<^sub>p d) (Add (Mul d a) (Mul b c))) (alluopairs ?U)]"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2734  | 
from subst0_nb[of "CP 0\<^sub>p" ?q] q_qf evaldjf_bound0[OF bnd1] evaldjf_bound0[OF bnd0] mp_nb pp_nb stupid  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2735  | 
have nb: "bound0 ?R "  | 
| 
50045
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2736  | 
by (simp add: list_disj_def simpfm_bound0)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2737  | 
let ?s = "\<lambda>((b,a),(d,c)). msubst2 ?q (C (-2, 1) *\<^sub>p b*\<^sub>p d) (Add (Mul d a) (Mul b c))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2738  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2739  | 
  {fix b a d c assume baU: "(b,a) \<in> set ?U" and dcU: "(d,c) \<in> set ?U"
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2740  | 
from U_l baU dcU have norm: "isnpoly b" "isnpoly d" "isnpoly (C (-2, 1))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2741  | 
by auto (simp add: isnpoly_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2742  | 
have norm2: "isnpoly (C (-2, 1) *\<^sub>p b*\<^sub>p d)" "isnpoly (C (-2, 1) *\<^sub>p d*\<^sub>p b)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2743  | 
using norm by (simp_all add: polymul_norm)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2744  | 
have stupid: "allpolys isnpoly (CP (C (-2, 1) *\<^sub>p b*\<^sub>p d))" "allpolys isnpoly (CP (C (-2, 1) *\<^sub>p d*\<^sub>p b))" "allpolys isnpoly (CP (~\<^sub>p(C (-2, 1) *\<^sub>p b*\<^sub>p d)))" "allpolys isnpoly (CP (~\<^sub>p(C (-2, 1) *\<^sub>p d*\<^sub>p b)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2745  | 
by (simp_all add: polyneg_norm norm2)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2746  | 
have "?I (msubst2 ?q (C (-2, 1) *\<^sub>p b*\<^sub>p d) (Add (Mul d a) (Mul b c))) = ?I (msubst2 ?q (C (-2, 1) *\<^sub>p d*\<^sub>p b) (Add (Mul b c) (Mul d a)))" (is "?lhs \<longleftrightarrow> ?rhs")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2747  | 
proof  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2748  | 
assume H: ?lhs  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2749  | 
hence z: "\<lparr>C (-2, 1) *\<^sub>p b *\<^sub>p d\<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0" "\<lparr>C (-2, 1) *\<^sub>p d *\<^sub>p b\<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
2750  | 
by (auto simp add: msubst2_def lt[OF stupid(3)] lt[OF stupid(1)] mult_less_0_iff zero_less_mult_iff)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2751  | 
from msubst2[OF lq norm2(1) z(1), of x bs]  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
2752  | 
msubst2[OF lq norm2(2) z(2), of x bs] H  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
2753  | 
show ?rhs by (simp add: field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2754  | 
next  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2755  | 
assume H: ?rhs  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2756  | 
hence z: "\<lparr>C (-2, 1) *\<^sub>p b *\<^sub>p d\<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0" "\<lparr>C (-2, 1) *\<^sub>p d *\<^sub>p b\<rparr>\<^sub>p\<^bsup>vs\<^esup> \<noteq> 0"  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
2757  | 
by (auto simp add: msubst2_def lt[OF stupid(4)] lt[OF stupid(2)] mult_less_0_iff zero_less_mult_iff)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2758  | 
from msubst2[OF lq norm2(1) z(1), of x bs]  | 
| 
33268
 
02de0317f66f
eliminated hard tabulators, guessing at each author's individual tab-width;
 
wenzelm 
parents: 
33212 
diff
changeset
 | 
2759  | 
msubst2[OF lq norm2(2) z(2), of x bs] H  | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
2760  | 
show ?lhs by (simp add: field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2761  | 
qed}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2762  | 
hence th0: "\<forall>x \<in> set ?U. \<forall>y \<in> set ?U. ?I (?s (x, y)) \<longleftrightarrow> ?I (?s (y, x))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2763  | 
by clarsimp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2764  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2765  | 
have "?lhs \<longleftrightarrow> (\<exists>x. Ifm vs (x#bs) ?q)" by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2766  | 
also have "\<dots> \<longleftrightarrow> ?I ?mp \<or> ?I ?pp \<or> ?I (subst0 (CP 0\<^sub>p) ?q) \<or> (\<exists>(n,t) \<in> set ?U. ?I (msubst2 ?q (n *\<^sub>p C (-2, 1)) t)) \<or> (\<exists>(b, a)\<in>set ?U. \<exists>(d, c)\<in>set ?U. ?I (msubst2 ?q (C (-2, 1) *\<^sub>p b*\<^sub>p d) (Add (Mul d a) (Mul b c))))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2767  | 
using fr_eq_msubst2[OF lq, of vs bs x] by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2768  | 
also have "\<dots> \<longleftrightarrow> ?I ?mp \<or> ?I ?pp \<or> ?I (subst0 (CP 0\<^sub>p) ?q) \<or> (\<exists>(n,t) \<in> set ?U. ?I (msubst2 ?q (n *\<^sub>p C (-2, 1)) t)) \<or> (\<exists> x\<in>set ?U. \<exists> y \<in>set ?U. ?I (?s (x,y)))"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2769  | 
by (simp add: split_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2770  | 
also have "\<dots> \<longleftrightarrow> ?I ?mp \<or> ?I ?pp \<or> ?I (subst0 (CP 0\<^sub>p) ?q) \<or> (\<exists>(n,t) \<in> set ?U. ?I (msubst2 ?q (n *\<^sub>p C (-2, 1)) t)) \<or> (\<exists> (x,y) \<in> set ?Up. ?I (?s (x,y)))"  | 
| 41849 | 2771  | 
using alluopairs_bex[OF th0] by simp  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2772  | 
also have "\<dots> \<longleftrightarrow> ?I ?R"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2773  | 
by (simp add: list_disj_def evaldjf_ex split_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2774  | 
also have "\<dots> \<longleftrightarrow> ?rhs"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2775  | 
unfolding ferrack2_def  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2776  | 
apply (cases "?mp = T")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2777  | 
apply (simp add: list_disj_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2778  | 
apply (cases "?pp = T")  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2779  | 
apply (simp add: list_disj_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2780  | 
by (simp_all add: Let_def decr0[OF nb])  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2781  | 
finally show ?thesis using decr0_qf[OF nb]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2782  | 
by (simp add: ferrack2_def Let_def)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2783  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2784  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2785  | 
lemma frpar2: "qfree (frpar2 p) \<and> (Ifm vs bs (frpar2 p) \<longleftrightarrow> Ifm vs bs p)"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2786  | 
proof-  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2787  | 
from ferrack2 have th: "\<forall>bs p. qfree p \<longrightarrow> qfree (ferrack2 p) \<and> Ifm vs bs (ferrack2 p) = Ifm vs bs (E p)" by blast  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2788  | 
from qelim[OF th, of "prep p" bs]  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2789  | 
show ?thesis unfolding frpar2_def by (auto simp add: prep)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2790  | 
qed  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2791  | 
|
| 
50045
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2792  | 
oracle frpar_oracle = {*
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2793  | 
let  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2794  | 
|
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2795  | 
fun binopT T = T --> T --> T;  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2796  | 
fun relT T = T --> T --> @{typ bool};
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2797  | 
|
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2798  | 
val dest_num = snd o HOLogic.dest_number;  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2799  | 
|
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2800  | 
fun try_dest_num t = SOME ((snd o HOLogic.dest_number) t)  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2801  | 
handle TERM _ => NONE;  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2802  | 
|
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2803  | 
fun dest_nat (t as Const (@{const_name Suc}, _)) = HOLogic.dest_nat t
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2804  | 
| dest_nat t = dest_num t;  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2805  | 
|
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2806  | 
fun the_index ts t =  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2807  | 
let  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2808  | 
val k = find_index (fn t' => t aconv t') ts;  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2809  | 
in if k < 0 then raise General.Subscript else k end;  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2810  | 
|
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2811  | 
fun num_of_term ps (Const (@{const_name Groups.uminus}, _) $ t) = @{code poly.Neg} (num_of_term ps t)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2812  | 
  | num_of_term ps (Const (@{const_name Groups.plus}, _) $ a $ b) = @{code poly.Add} (num_of_term ps a, num_of_term ps b)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2813  | 
  | num_of_term ps (Const (@{const_name Groups.minus}, _) $ a $ b) = @{code poly.Sub} (num_of_term ps a, num_of_term ps b)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2814  | 
  | num_of_term ps (Const (@{const_name Groups.times}, _) $ a $ b) = @{code poly.Mul} (num_of_term ps a, num_of_term ps b)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2815  | 
  | num_of_term ps (Const (@{const_name Power.power}, _) $ a $ n) = @{code poly.Pw} (num_of_term ps a, dest_nat n)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2816  | 
  | num_of_term ps (Const (@{const_name Fields.divide}, _) $ a $ b) = @{code poly.C} (dest_num a, dest_num b)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2817  | 
| num_of_term ps t = (case try_dest_num t  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2818  | 
     of SOME k => @{code poly.C} (k, 1)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2819  | 
      | NONE => @{code poly.Bound} (the_index ps t));
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2820  | 
|
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2821  | 
fun tm_of_term fs ps (Const(@{const_name Groups.uminus}, _) $ t) = @{code Neg} (tm_of_term fs ps t)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2822  | 
  | tm_of_term fs ps (Const(@{const_name Groups.plus}, _) $ a $ b) = @{code Add} (tm_of_term fs ps a, tm_of_term fs ps b)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2823  | 
  | tm_of_term fs ps (Const(@{const_name Groups.minus}, _) $ a $ b) = @{code Sub} (tm_of_term fs ps a, tm_of_term fs ps b)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2824  | 
  | tm_of_term fs ps (Const(@{const_name Groups.times}, _) $ a $ b) = @{code Mul} (num_of_term ps a, tm_of_term fs ps b)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2825  | 
  | tm_of_term fs ps t = (@{code CP} (num_of_term ps t) 
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2826  | 
      handle TERM _ => @{code Bound} (the_index fs t)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2827  | 
           | General.Subscript => @{code Bound} (the_index fs t));
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2828  | 
|
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2829  | 
fun fm_of_term fs ps @{term True} = @{code T}
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2830  | 
  | fm_of_term fs ps @{term False} = @{code F}
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2831  | 
  | fm_of_term fs ps (Const (@{const_name Not}, _) $ p) = @{code NOT} (fm_of_term fs ps p)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2832  | 
  | fm_of_term fs ps (Const (@{const_name HOL.conj}, _) $ p $ q) = @{code And} (fm_of_term fs ps p, fm_of_term fs ps q)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2833  | 
  | fm_of_term fs ps (Const (@{const_name HOL.disj}, _) $ p $ q) = @{code Or} (fm_of_term fs ps p, fm_of_term fs ps q)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2834  | 
  | fm_of_term fs ps (Const (@{const_name HOL.implies}, _) $ p $ q) = @{code Imp} (fm_of_term fs ps p, fm_of_term fs ps q)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2835  | 
  | fm_of_term fs ps (@{term HOL.iff} $ p $ q) = @{code Iff} (fm_of_term fs ps p, fm_of_term fs ps q)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2836  | 
  | fm_of_term fs ps (Const (@{const_name HOL.eq}, T) $ p $ q) =
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2837  | 
      @{code Eq} (@{code Sub} (tm_of_term fs ps p, tm_of_term fs ps q))
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2838  | 
  | fm_of_term fs ps (Const (@{const_name Orderings.less}, _) $ p $ q) =
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2839  | 
      @{code Lt} (@{code Sub} (tm_of_term fs ps p, tm_of_term fs ps q))
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2840  | 
  | fm_of_term fs ps (Const (@{const_name Orderings.less_eq}, _) $ p $ q) =
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2841  | 
      @{code Le} (@{code Sub} (tm_of_term fs ps p, tm_of_term fs ps q))
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2842  | 
  | fm_of_term fs ps (Const (@{const_name Ex}, _) $ Abs (abs as (_, xT, _))) =
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2843  | 
let  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2844  | 
val (xn', p') = Syntax_Trans.variant_abs abs; (* FIXME !? *)  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2845  | 
      in @{code E} (fm_of_term (Free (xn', xT) :: fs) ps p') end
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2846  | 
  | fm_of_term fs ps (Const (@{const_name All},_) $ Abs (abs as (_, xT, _))) =
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2847  | 
let  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2848  | 
val (xn', p') = Syntax_Trans.variant_abs abs; (* FIXME !? *)  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2849  | 
      in @{code A} (fm_of_term (Free (xn', xT) :: fs) ps p') end
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2850  | 
| fm_of_term fs ps _ = error "fm_of_term";  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2851  | 
|
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2852  | 
fun term_of_num T ps (@{code poly.C} (a, b)) = 
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2853  | 
(if b = 1 then HOLogic.mk_number T a  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2854  | 
     else if b = 0 then Const (@{const_name Groups.zero}, T)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2855  | 
     else Const (@{const_name Fields.divide}, binopT T) $ HOLogic.mk_number T a $ HOLogic.mk_number T b)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2856  | 
  | term_of_num T ps (@{code poly.Bound} i) = nth ps i
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2857  | 
  | term_of_num T ps (@{code poly.Add} (a, b)) = Const (@{const_name Groups.plus}, binopT T) $ term_of_num T ps a $ term_of_num T ps b
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2858  | 
  | term_of_num T ps (@{code poly.Mul} (a, b)) = Const (@{const_name Groups.times}, binopT T) $ term_of_num T ps a $ term_of_num T ps b
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2859  | 
  | term_of_num T ps (@{code poly.Sub} (a, b)) = Const (@{const_name Groups.minus}, binopT T) $ term_of_num T ps a $ term_of_num T ps b
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2860  | 
  | term_of_num T ps (@{code poly.Neg} a) = Const (@{const_name Groups.uminus}, T --> T) $ term_of_num T ps a
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2861  | 
  | term_of_num T ps (@{code poly.Pw} (a, n)) =
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2862  | 
      Const (@{const_name Power.power}, T --> @{typ nat} --> T) $ term_of_num T ps a $ HOLogic.mk_number HOLogic.natT n
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2863  | 
  | term_of_num T ps (@{code poly.CN} (c, n, p)) =
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2864  | 
      term_of_num T ps (@{code poly.Add} (c, @{code poly.Mul} (@{code poly.Bound} n, p)));
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2865  | 
|
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2866  | 
fun term_of_tm T fs ps (@{code CP} p) = term_of_num T ps p
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2867  | 
  | term_of_tm T fs ps (@{code Bound} i) = nth fs i
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2868  | 
  | term_of_tm T fs ps (@{code Add} (a, b)) = Const (@{const_name Groups.plus}, binopT T) $ term_of_tm T fs ps a $ term_of_tm T fs ps b
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2869  | 
  | term_of_tm T fs ps (@{code Mul} (a, b)) = Const (@{const_name Groups.times}, binopT T) $ term_of_num T ps a $ term_of_tm T fs ps b
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2870  | 
  | term_of_tm T fs ps (@{code Sub} (a, b)) = Const (@{const_name Groups.minus}, binopT T) $ term_of_tm T fs ps a $ term_of_tm T fs ps b
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2871  | 
  | term_of_tm T fs ps (@{code Neg} a) = Const (@{const_name Groups.uminus}, T --> T) $ term_of_tm T fs ps a
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2872  | 
  | term_of_tm T fs ps (@{code CNP} (n, c, p)) = term_of_tm T fs ps
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2873  | 
     (@{code Add} (@{code Mul} (c, @{code Bound} n), p));
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2874  | 
|
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2875  | 
fun term_of_fm T fs ps @{code T} = @{term True}
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2876  | 
  | term_of_fm T fs ps @{code F} = @{term False}
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2877  | 
  | term_of_fm T fs ps (@{code NOT} p) = @{term Not} $ term_of_fm T fs ps p
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2878  | 
  | term_of_fm T fs ps (@{code And} (p, q)) = @{term HOL.conj} $ term_of_fm T fs ps p $ term_of_fm T fs ps q
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2879  | 
  | term_of_fm T fs ps (@{code Or} (p, q)) = @{term HOL.disj} $ term_of_fm T fs ps p $ term_of_fm T fs ps q
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2880  | 
  | term_of_fm T fs ps (@{code Imp} (p, q)) = @{term HOL.implies} $ term_of_fm T fs ps p $ term_of_fm T fs ps q
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2881  | 
  | term_of_fm T fs ps (@{code Iff} (p, q)) = @{term HOL.iff} $ term_of_fm T fs ps p $ term_of_fm T fs ps q
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2882  | 
  | term_of_fm T fs ps (@{code Lt} p) = Const (@{const_name Orderings.less}, relT T) $ term_of_tm T fs ps p $ Const (@{const_name Groups.zero}, T)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2883  | 
  | term_of_fm T fs ps (@{code Le} p) = Const (@{const_name Orderings.less_eq}, relT T) $ term_of_tm T fs ps p $ Const (@{const_name Groups.zero}, T)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2884  | 
  | term_of_fm T fs ps (@{code Eq} p) = Const (@{const_name HOL.eq}, relT T) $ term_of_tm T fs ps p $ Const (@{const_name Groups.zero}, T)
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2885  | 
  | term_of_fm T fs ps (@{code NEq} p) = @{term Not} $ (Const (@{const_name HOL.eq}, relT T) $ term_of_tm T fs ps p $ Const (@{const_name Groups.zero}, T))
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2886  | 
| term_of_fm T fs ps _ = error "term_of_fm: quantifiers";  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2887  | 
|
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2888  | 
fun frpar_procedure alternative T ps fm =  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2889  | 
let  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2890  | 
    val frpar = if alternative then @{code frpar2} else @{code frpar};
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2891  | 
val fs = subtract (op aconv) (map Free (Term.add_frees fm [])) ps;  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2892  | 
val eval = term_of_fm T fs ps o frpar o fm_of_term fs ps;  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2893  | 
val t = HOLogic.dest_Trueprop fm;  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2894  | 
in  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2895  | 
(HOLogic.mk_Trueprop o HOLogic.mk_eq) (t, eval t)  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2896  | 
end;  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2897  | 
|
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2898  | 
in  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2899  | 
|
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2900  | 
fn (ctxt, alternative, ty, ps, ct) =>  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2901  | 
cterm_of (Proof_Context.theory_of ctxt)  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2902  | 
(frpar_procedure alternative ty ps (term_of ct))  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2903  | 
|
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2904  | 
end  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2905  | 
*}  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2906  | 
|
| 35045 | 2907  | 
ML {* 
 | 
| 
50045
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2908  | 
structure Parametric_Ferrante_Rackoff =  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2909  | 
struct  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2910  | 
|
| 
50045
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2911  | 
fun tactic ctxt alternative T ps =  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2912  | 
Object_Logic.full_atomize_tac  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2913  | 
THEN' CSUBGOAL (fn (g, i) =>  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2914  | 
let  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2915  | 
val th = frpar_oracle (ctxt, alternative, T, ps, g)  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2916  | 
in rtac (th RS iffD2) i end);  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2917  | 
|
| 
50045
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2918  | 
fun method alternative =  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2919  | 
let  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2920  | 
fun keyword k = Scan.lift (Args.$$$ k -- Args.colon) >> K ()  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2921  | 
val parsN = "pars"  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2922  | 
val typN = "type"  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2923  | 
val any_keyword = keyword parsN || keyword typN  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2924  | 
val terms = Scan.repeat (Scan.unless any_keyword Args.term)  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2925  | 
val typ = Scan.unless any_keyword Args.typ  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2926  | 
in  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2927  | 
(keyword typN |-- typ) -- (keyword parsN |-- terms) >>  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2928  | 
(fn (T, ps) => fn ctxt => SIMPLE_METHOD' (tactic ctxt alternative T ps))  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2929  | 
end  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2930  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2931  | 
end;  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2932  | 
*}  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2933  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2934  | 
method_setup frpar = {*
 | 
| 
50045
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2935  | 
Parametric_Ferrante_Rackoff.method false  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2936  | 
*} "parametric QE for linear Arithmetic over fields"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2937  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2938  | 
method_setup frpar2 = {*
 | 
| 
50045
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2939  | 
Parametric_Ferrante_Rackoff.method true  | 
| 42814 | 2940  | 
*} "parametric QE for linear Arithmetic over fields, Version 2"  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2941  | 
|
| 
47108
 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 
huffman 
parents: 
45499 
diff
changeset
 | 
2942  | 
lemma "\<exists>(x::'a::{linordered_field_inverse_zero}). y \<noteq> -1 \<longrightarrow> (y + 1)*x < 0"
 | 
| 
 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 
huffman 
parents: 
45499 
diff
changeset
 | 
2943  | 
  apply (frpar type: "'a::{linordered_field_inverse_zero}" pars: "y::'a::{linordered_field_inverse_zero}")
 | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
2944  | 
apply (simp add: field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2945  | 
apply (rule spec[where x=y])  | 
| 
47108
 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 
huffman 
parents: 
45499 
diff
changeset
 | 
2946  | 
  apply (frpar type: "'a::{linordered_field_inverse_zero}" pars: "z::'a::{linordered_field_inverse_zero}")
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2947  | 
by simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2948  | 
|
| 
50045
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2949  | 
lemma "\<exists>(x::'a::{linordered_field_inverse_zero}). y \<noteq> -1 \<longrightarrow> (y + 1)*x < 0"
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2950  | 
  apply (frpar2 type: "'a::{linordered_field_inverse_zero}" pars: "y::'a::{linordered_field_inverse_zero}")
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2951  | 
apply (simp add: field_simps)  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2952  | 
apply (rule spec[where x=y])  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2953  | 
  apply (frpar2 type: "'a::{linordered_field_inverse_zero}" pars: "z::'a::{linordered_field_inverse_zero}")
 | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2954  | 
by simp  | 
| 
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2955  | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2956  | 
text{* Collins/Jones Problem *}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2957  | 
(*  | 
| 36409 | 2958  | 
lemma "\<exists>(r::'a::{linordered_field_inverse_zero, number_ring}). 0 < r \<and> r < 1 \<and> 0 < (2 - 3*r) *(a^2 + b^2) + (2*a)*r \<and> (2 - 3*r) *(a^2 + b^2) + 4*a*r - 2*a - r < 0"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2959  | 
proof-  | 
| 36409 | 2960  | 
  have "(\<exists>(r::'a::{linordered_field_inverse_zero, number_ring}). 0 < r \<and> r < 1 \<and> 0 < (2 - 3*r) *(a^2 + b^2) + (2*a)*r \<and> (2 - 3*r) *(a^2 + b^2) + 4*a*r - 2*a - r < 0) \<longleftrightarrow> (\<exists>(r::'a::{linordered_field_inverse_zero, number_ring}). 0 < r \<and> r < 1 \<and> 0 < 2 *(a^2 + b^2) - (3*(a^2 + b^2)) * r + (2*a)*r \<and> 2*(a^2 + b^2) - (3*(a^2 + b^2) - 4*a + 1)*r - 2*a < 0)" (is "?lhs \<longleftrightarrow> ?rhs")
 | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
2961  | 
by (simp add: field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2962  | 
have "?rhs"  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2963  | 
|
| 36409 | 2964  | 
  apply (frpar type: "'a::{linordered_field_inverse_zero, number_ring}" pars: "a::'a::{linordered_field_inverse_zero, number_ring}" "b::'a::{linordered_field_inverse_zero, number_ring}")
 | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
2965  | 
apply (simp add: field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2966  | 
oops  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2967  | 
*)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2968  | 
(*  | 
| 36409 | 2969  | 
lemma "ALL (x::'a::{linordered_field_inverse_zero, number_ring}) y. (1 - t)*x \<le> (1+t)*y \<and> (1 - t)*y \<le> (1+t)*x --> 0 \<le> y"
 | 
2970  | 
apply (frpar type: "'a::{linordered_field_inverse_zero, number_ring}" pars: "t::'a::{linordered_field_inverse_zero, number_ring}")
 | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2971  | 
oops  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2972  | 
*)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2973  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2974  | 
text{* Collins/Jones Problem *}
 | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2975  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2976  | 
(*  | 
| 36409 | 2977  | 
lemma "\<exists>(r::'a::{linordered_field_inverse_zero, number_ring}). 0 < r \<and> r < 1 \<and> 0 < (2 - 3*r) *(a^2 + b^2) + (2*a)*r \<and> (2 - 3*r) *(a^2 + b^2) + 4*a*r - 2*a - r < 0"
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2978  | 
proof-  | 
| 36409 | 2979  | 
  have "(\<exists>(r::'a::{linordered_field_inverse_zero, number_ring}). 0 < r \<and> r < 1 \<and> 0 < (2 - 3*r) *(a^2 + b^2) + (2*a)*r \<and> (2 - 3*r) *(a^2 + b^2) + 4*a*r - 2*a - r < 0) \<longleftrightarrow> (\<exists>(r::'a::{linordered_field_inverse_zero, number_ring}). 0 < r \<and> r < 1 \<and> 0 < 2 *(a^2 + b^2) - (3*(a^2 + b^2)) * r + (2*a)*r \<and> 2*(a^2 + b^2) - (3*(a^2 + b^2) - 4*a + 1)*r - 2*a < 0)" (is "?lhs \<longleftrightarrow> ?rhs")
 | 
| 
36348
 
89c54f51f55a
dropped group_simps, ring_simps, field_eq_simps; classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero
 
haftmann 
parents: 
35625 
diff
changeset
 | 
2980  | 
by (simp add: field_simps)  | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2981  | 
have "?rhs"  | 
| 36409 | 2982  | 
  apply (frpar2 type: "'a::{linordered_field_inverse_zero, number_ring}" pars: "a::'a::{linordered_field_inverse_zero, number_ring}" "b::'a::{linordered_field_inverse_zero, number_ring}")
 | 
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2983  | 
apply simp  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2984  | 
oops  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2985  | 
*)  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2986  | 
|
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2987  | 
(*  | 
| 36409 | 2988  | 
lemma "ALL (x::'a::{linordered_field_inverse_zero, number_ring}) y. (1 - t)*x \<le> (1+t)*y \<and> (1 - t)*y \<le> (1+t)*x --> 0 \<le> y"
 | 
2989  | 
apply (frpar2 type: "'a::{linordered_field_inverse_zero, number_ring}" pars: "t::'a::{linordered_field_inverse_zero, number_ring}")
 | 
|
| 
33152
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2990  | 
apply (simp add: field_simps linorder_neq_iff[symmetric])  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2991  | 
apply ferrack  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2992  | 
oops  | 
| 
 
241cfaed158f
Add a quantifier elimination for parametric linear arithmetic over ordered fields (parameters are multivariate polynomials)
 
chaieb 
parents:  
diff
changeset
 | 
2993  | 
*)  | 
| 
45499
 
849d697adf1e
Parametric_Ferrante_Rackoff.thy: restrict to class number_ring, replace '1+1' with '2' everywhere
 
huffman 
parents: 
44064 
diff
changeset
 | 
2994  | 
end  | 
| 
50045
 
2214bc566f88
modernized, simplified and compacted oracle and proof method glue code;
 
haftmann 
parents: 
49962 
diff
changeset
 | 
2995  |