From 0cba965562a367a8eb8a4fcf493b2ee24e5df485 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr> Date: Wed, 23 Oct 2019 07:49:07 +0200 Subject: [PATCH] [wp] removed semantics dir --- src/plugins/wp/semantics/Cil.v | 49 ----- src/plugins/wp/semantics/Datatype.v | 290 --------------------------- src/plugins/wp/semantics/Layout.v | 120 ----------- src/plugins/wp/semantics/Machine.v | 73 ------- src/plugins/wp/semantics/Makefile | 23 --- src/plugins/wp/semantics/Pointer.v | 41 ---- src/plugins/wp/semantics/Primitive.v | 23 --- src/plugins/wp/semantics/Semantics.v | 77 ------- src/plugins/wp/semantics/Typing.v | 78 ------- src/plugins/wp/semantics/Values.v | 109 ---------- src/plugins/wp/semantics/coqide.sh | 1 - 11 files changed, 884 deletions(-) delete mode 100644 src/plugins/wp/semantics/Cil.v delete mode 100644 src/plugins/wp/semantics/Datatype.v delete mode 100644 src/plugins/wp/semantics/Layout.v delete mode 100644 src/plugins/wp/semantics/Machine.v delete mode 100644 src/plugins/wp/semantics/Makefile delete mode 100644 src/plugins/wp/semantics/Pointer.v delete mode 100644 src/plugins/wp/semantics/Primitive.v delete mode 100644 src/plugins/wp/semantics/Semantics.v delete mode 100644 src/plugins/wp/semantics/Typing.v delete mode 100644 src/plugins/wp/semantics/Values.v delete mode 100755 src/plugins/wp/semantics/coqide.sh diff --git a/src/plugins/wp/semantics/Cil.v b/src/plugins/wp/semantics/Cil.v deleted file mode 100644 index 285ecdf66d3..00000000000 --- a/src/plugins/wp/semantics/Cil.v +++ /dev/null @@ -1,49 +0,0 @@ -Require Import Datatype. -Require Import Primitive. - -Parameter cvar : Data. -Parameter cfield : Data. -Parameter ctypedef : Data. -Parameter label : Data. - -Inductive cref : Set := - | Rvoid : cref - | Rint : cint -> cref - | Rflt : cflt -> cref - | Rdef : ctypedef -> cref. - -Inductive ctype : Set := - | Cptr : cref -> ctype - | Cint : cint -> ctype - | Cflt : cflt -> ctype - | Carray : ctype -> Z -> ctype - | Cstruct : [ cfield => ctype ] -> ctype - | Cunion : [ cfield => ctype ] -> ctype. - -Record cenv : Type := { - g_var : cvar -> ctype ; - g_typedef : ctypedef -> ctype -}. - -Inductive lval : Set := - | Lvar : cvar -> lval - | Lshift : lval -> exp -> lval - | Lfield : lval -> cfield -> lval - | Lderef : exp -> lval - -with exp : Set := - | Lval : lval -> exp - | AddrOf : lval -> exp - | Shift : exp -> exp -> exp - | Op : op -> exp -> exp -> exp. - -Inductive instr : Set := - | Instr : lval -> exp -> instr - | Guard : exp -> instr. - -Definition stmt := ( label * instr * label )%type. -Definition program := List.list stmt. - - - - diff --git a/src/plugins/wp/semantics/Datatype.v b/src/plugins/wp/semantics/Datatype.v deleted file mode 100644 index ccff6e67cec..00000000000 --- a/src/plugins/wp/semantics/Datatype.v +++ /dev/null @@ -1,290 +0,0 @@ -(** Basic Datatypes *) - -Set Implicit Arguments. - -Require Export Bool. -Require Export Reals. -Require Export ZArith. -Require Export Program. -Open Scope Z_scope. - -(** ** Tactics for finishing proof trees. *) - -Ltac forward := - repeat (first [ split | intros ]) ; - try discriminate ; - try contradiction ; - try tauto ; - try constructor ; - try (apply False_ind ; omega ; fail) ; - try (apply False_ind ; auto with zarith ; fail) ; - auto with zarith. - -Ltac finish := forward ; fail. - -Tactic Notation "by" tactic(A) := A ; finish. - -(** ** Empty Set. *) - -Inductive Void : Set := . - -(** ** Unit Set. *) - -Inductive Unit : Set := unit. - -(** ** Decidability. *) - -Definition decide P := {P}+{~P}. - -Definition isTrue p := (p = true). -Definition isFalse p := (p = false). -(* -Lemma not_is_true : forall p, ~(isTrue p) -> isFalse p. -Lemma not_is_false : forall p, ~(isFalse p) -> isTrue p. -*) - -Coercion bool2p := isTrue. - -Lemma split_andb : forall p q, p && q <-> p /\ q. -Proof. intros p q. induction p ; induction q ; intuition. Qed. - -Lemma split_orb : forall p q, p || q <-> p \/ q. -Proof. intros p q. induction p ; induction q ; intuition. Qed. - -(** ** Types with decidable equality. *) - -Record Data := { - type :> Set ; - eqdec : forall (a b : type), decide (a=b) -}. - -Definition eqb {D : Data} (a b : D) := - match eqdec _ a b with - | left _ => true - | right _ => false - end. - -Notation "a == b" := (@eqb _ a b) (at level 70). - -(** ** Tactics for proof by case on Data equality. *) - -Lemma eqb_true : forall (D : Data) (x y : D), x=y -> (x==y) = true. -Proof. intros. rewrite H. unfold eqb. induction (eqdec _ y y). trivial. auto. Qed. - -Lemma eqb_false : forall (D : Data) (x y : D), x<>y -> (x==y) = false. -Proof. intros. unfold eqb. induction (eqdec _ x y). rewrite a in H. intuition. trivial. Qed. - -Ltac equality a b := - let Eq := fresh "Eq_" a "_" b in - let Neq := fresh "Neq_" a "_" b in - induction (eqdec _ a b) as [ Eq | Neq ] ; - [ try (rewrite Eq in *) ; try (rewrite eqb_true in *) - | try (rewrite Neq in *) ; try (rewrite eqb_false in *) - ] ; auto. - -(** ** Dependent Equalities. *) - -(** Lift an equality [x = y] into an equality over [u : B x] and [v : B y]. *) -Definition lift_eq {A : Set} (B : A -> Set) {x y : A} (p : x = y) : B x -> B y -> Prop := - let P := fun z => B x -> B z -> Prop in - let E := (@eq (B x)) in - eq_rect x P E y p. - -(** List is the expected equality. *) -Lemma lift_eq_is_eq : - forall (A : Set) (B : A -> Set) x, - lift_eq B (eq_refl x) = (fun (y z : B x) => y = z). -Proof. intros. simpl. trivial. Qed. - -(** ** Typical Data *) - -Program Definition Int : Data := {| type := Z |}. -Next Obligation. apply Z.eq_dec. Qed. - -Lemma fst_neq : forall A B, forall (p q : A*B), fst p <> fst q -> p <> q. - Proof. intros. unfold not. intro E. rewrite E in H. auto. Qed. -Lemma snd_neq : forall A B, forall (p q : A*B), snd p <> snd q -> p <> q. - Proof. intros. unfold not. intro E. rewrite E in H. auto. Qed. - -Program Definition Pair (A B : Data) : Data := {| type := A * B |}. -Next Obligation. - elim (eqdec A t1 t) ; elim (eqdec B t2 t0) ; intros. - * left. rewrite a,a0. trivial. - * right. apply snd_neq. auto. - * right. apply fst_neq. auto. - * right. apply fst_neq. auto. -Qed. - -(** ** Functional Updates *) - -Definition select {A B : Type} {P : A -> Prop} (s : forall a, decide(P a)) (a b : A -> B) - := fun k => if s k then a k else b k. - -(** ** Finite Environments *) - -Inductive env {A B : Type} : Type := - | empty : env - | add : A -> B -> env -> env. - -Notation "[ A => B ]" := (@env A B). - -Fixpoint map {A B C : Type} (f : A -> B -> C) (e : [A => B]) : [A => C] := - match e with - | empty => empty - | add x v e => add x (f x v) (map f e) - end. - -Fixpoint find {A : Data} {B : Type} (x : A) e (d : B) := - match e with - | empty => d - | add x' v e => if x == x' then v else find x e d - end. - -Fixpoint bind {A : Data} {B : Type} (x : A) (v : B) e : Prop := - match e with - | empty => False - | add x' v' e => if x == x' then v = v' else bind x v e - end. - -Lemma bind_map_exists : - forall (A : Data) (B C : Type) (f : A -> B -> C), - forall x w e, bind x w (map f e) -> exists v, bind x v e /\ w = f x v. -Proof. - intros. - induction e. - * by (simpl in H). - * simpl in H. equality x a. - - exists b. simpl. rewrite eqb_true ; auto. - - simpl. rewrite eqb_false ; auto. -Qed. - -Lemma bind_map : - forall (A : Data) (B C : Type) (f : A -> B -> C), - forall x v e, bind x v e -> bind x (f x v) (map f e). -Proof. - intros. - induction e ; simpl in * ; auto. - equality x a ; rewrite H ; auto. -Qed. - -Inductive subset {A B : Type} : [ A => B ] -> [ A => B ] -> Prop := - | Sub_empty : subset empty empty - | Sub_skip : forall a b w1 w2, subset w1 w2 -> subset w1 (add a b w2) - | Sub_same : forall a b w1 w2, subset w1 w2 -> subset (add a b w1) (add a b w2). - -(** ** Records (dependent maps) *) - -Inductive record {A : Type} : [ A => Type ] -> Type := - | Rempty : record empty - | Rfield : forall (a:A) {t:Type} (v:t) - {r:[A => Type]} (R:record r), - record (add a t r). - -Notation "{[ m ]}" := (record m). - -Inductive union {A : Type} : [ A => Type ] -> Type := - | Uempty : union empty - | Uskip : forall (a:A) { t: Type } (* no value *) - { u: [A => Type] } (U:union u), - union (add a t u) - | Ufield : forall (a:A) { t: Type } (v:t) (* some value *) - { u: [A => Type] } (U:union u), - union (add a t u). - -Notation "{[ m ?]}" := (union m). - -(** ** Positive integers *) - -Coercion Z.pos : positive >-> Z. - -(** ** Finite integers *) - -Record range (n : Z) : Type := - { index :> Z ; in_range : 0 <= index < n }. - -Definition range_dec (n k : Z) : decide (0 <= k < n). -Proof. - induction (Z_le_dec 0 k) ; induction (Z_lt_dec k n) ; try (by left) ; try (by right). -Qed. - -Fixpoint iter (P : nat -> bool) n := - match n with - | O => true - | S n => P n && iter P n - end. - -Lemma iter_forall : - forall P n, iter P n -> (forall k, (k < n)%nat -> P k). -Proof. - intros P n. - induction n. - * simpl. intros. omega. - * simpl. intros Step k Rk. - rewrite split_andb in Step. - assert (Rn : (k <= n)%nat) by omega. - induction (le_lt_eq_dec k n) as [Lt | Eq] ; auto with arith. - + by (apply IHn). - + by (rewrite Eq). -Qed. - -(** ** Arrays of known size *) - -Definition array (A : Type) (n : Z) : Type := range n -> A. -Notation "a [ n ]" := (array a n) (at level 10). - -Definition slice {A} p n (w : Z -> A) : A[n] := fun k : range n => w (p+k). - -Definition get {A n} (a : A[n]) k rk := a {| index := k ; in_range := rk |}. -Implicit Arguments get [A n]. - -Definition split {n m} (k : range (n+m)) : {0 <= k < n}+{0<= k-n < m}. -Proof. - generalize (in_range k). intro Rk. - induction (range_dec n k) ; [ left | right] ; forward. -Qed. - -Definition concat {A n m} (a : A[n]) (b : A[m]) : A[n+m] := - fun k : range (n+m) => - match split k with - | left p => get a k p - | right q => get b (k-n) q - end. - -Lemma concat_l {A n m} (a : A[n]) (b : A[m]) : - forall (k : range (n+m)) (r : 0 <= k < n), (concat a b) k = get a k r. -Proof. - intros. - unfold concat. - destruct (split k). - + apply f_equal. apply proof_irrelevance. - + generalize (in_range k). intros. omega. -Qed. - -Lemma concat_r {A n m} (a : A[n]) (b : A[m]) : - forall (k : range (n+m)) (r : 0 <= k-n < m), (concat a b) k = get b (k-n) r. -Proof. - intros. - unfold concat. - destruct (split k). - + generalize (in_range k). intros. omega. - + apply f_equal. apply proof_irrelevance. -Qed. - -Lemma array_inj {A n} : forall (a b : A[n]), - (forall k : range n, a k = b k) -> a = b. -Proof. - intros a b Elt. - extensionality k. - apply Elt. -Qed. - -Record vector (A : Type) : Type := { size ; elt :> A[size] }. -Notation "a []" := (vector a) (at level 10). - -Definition compatible {A n m} (a : A[n]) (b : A[m]) := - forall k (ka : 0 <= k < n) (kb : 0 <= k < m), - get a k ka = get b k kb. - - - - diff --git a/src/plugins/wp/semantics/Layout.v b/src/plugins/wp/semantics/Layout.v deleted file mode 100644 index 6ecdffc4f5e..00000000000 --- a/src/plugins/wp/semantics/Layout.v +++ /dev/null @@ -1,120 +0,0 @@ -Require Import Datatype. -Require Import Pointer. -Require Import Machine. - -Open Scope Z_scope. - -Program Definition empty_layout (A : Type) : layout A := {| - sizeof := 0 ; - encoding := fun p w => True -|}. -Next Obligation. intuition. Qed. - -Program Definition interpret {A B} (phi : B -> A) : layout A -> layout B := - fun enc => {| encoding := fun v w => enc (phi v) w ; sizeof := sizeof enc |}. -Next Obligation. - by (apply (positive enc)). -Qed. -Next Obligation. - apply (footprint enc H). -Qed. - -Program Definition concat {A B} : layout A -> layout B -> layout (A*B) := - fun a b => {| - sizeof := sizeof a + sizeof b ; - encoding := fun p w => (a (fst p) w /\ b (snd p) (w <+> sizeof a)) - |}. -Next Obligation. - generalize (positive a). - generalize (positive b). - auto with zarith. -Qed. -Next Obligation. - simpl. - cut (b b0 (wa <+> sizeof a) <-> b b0 (wb <+> sizeof a)). - cut (a a0 wa <-> a a0 wb). - intuition. - * apply (footprint a). - unfold eq_range. - intros k R. apply H. - generalize (positive a). - generalize (positive b). - auto with zarith. - * apply (footprint b). - unfold eq_range. - intros k R. unfold offset. apply H. - generalize (positive a). - generalize (positive b). - auto with zarith. -Defined. - -Program Definition superpose {A B} : layout A -> layout B -> layout (A * B) := - fun a b => {| - sizeof := Z.max (sizeof a) (sizeof b) ; - encoding := fun p w => (a (fst p) w /\ b (snd p) w) - |}. -Next Obligation. - apply Z.max_case. apply (positive a). apply (positive b). -Qed. -Next Obligation. - simpl. - cut (b b0 wa <-> b b0 wb). - cut (a a0 wa <-> a a0 wb). - intuition. - * apply (footprint a). - unfold eq_range. - intros k R. apply H. - generalize (Z.le_max_l (sizeof a) (sizeof b)). - omega. - * apply (footprint b). - unfold eq_range. - intros k R. apply H. - generalize (Z.le_max_r (sizeof a) (sizeof b)). - omega. -Defined. - -Program Definition concat_n {A} : layout A -> forall n, layout (A[n]) := - fun a n => {| - sizeof := Z.max 0 (n * sizeof a) ; - encoding := fun v w => forall (k : range n), a (v k) (w <+> k * sizeof a) - |}. -Next Obligation. - by (apply Z.le_max_l). -Qed. -Next Obligation. - cut (forall k : range n, a (v k) (wa <+> k * sizeof a) - <-> a (v k) (wb <+> k * sizeof a)). - intuition ; apply H0 ; apply H1. - intro k. - apply (footprint a). - unfold eq_range, forall_range, offset. intros i Ri. simpl. apply H. - generalize (in_range k). intro Rk. - generalize (positive a). intro Pa. - rewrite Z.max_r ; auto with zarith. - assert (R1 : k <= n-1) by auto with zarith. - assert (R2 : k * sizeof a <= (n-1) * sizeof a) - by (apply Zmult_le_compat_r ; forward). - assert (R3 : (n-1) * sizeof a = n * sizeof a - sizeof a) by ring. - rewrite R3 in R2. - auto with zarith. -Defined. - -Program Definition option_layout {A} : layout A -> layout (option A) := - fun a => {| - sizeof := sizeof a ; - encoding := fun v w => - match v with - | None => forall x, not (a x w) - | Some x => a x w - end - |}. -Next Obligation. exact (positive a). Qed. -Next Obligation. - induction v. - + apply (footprint a H). - + generalize (footprint a H). - intuition. - apply (H1 x). by (rewrite H0). - apply (H1 x). by (rewrite <- H0). -Qed. - diff --git a/src/plugins/wp/semantics/Machine.v b/src/plugins/wp/semantics/Machine.v deleted file mode 100644 index a240a231d19..00000000000 --- a/src/plugins/wp/semantics/Machine.v +++ /dev/null @@ -1,73 +0,0 @@ -Require Import Datatype. -Require Import Primitive. -Require Import Pointer. - -Set Implicit Arguments. - -Inductive byte : Type := - | Byte : forall b, 0 <= b < 255 -> byte - | Ptr : Addr -> nat -> byte - | Undef : byte. - -Inductive perm := Read | Write. -Definition grants p q := p = Write \/ q = Read. -Definition granted q p := p = Write \/ q = Read. - -Definition bytes := Z -> byte. -Definition perms := Z -> perm. - -Record layout (A : Type) := { - encoding :> A -> bytes -> Prop ; - sizeof : Z ; - positive : 0 <= sizeof ; - footprint : forall {wa wb}, - wa =/ sizeof wb -> - forall v, encoding v wa <-> encoding v wb -}. - -Record architecture := { - int_layout : cint -> layout Z ; - flt_layout : cflt -> layout R ; - ptr_layout : layout Addr ; - char_size : sizeof (int_layout char) = 1 -}. - -Record mem := { - byte_at : Addr -> byte ; - perm_at : Addr -> perm ; - arch :> architecture -}. - -Definition undef {A} : A -> byte := fun _ => Undef. - -Definition mload (m : mem) (p : Addr) (n : Z) : bytes := - select (range_dec n) (byte_at m @ p) undef. - -Definition store (m : mem) (p : Addr) n (v : bytes) : mem := -{| - arch := m ; - perm_at := perm_at m ; - byte_at := select (ptr_range p n) (v & p) (byte_at m) -|}. - -Definition valid (pi : perm) (m : mem) (p : Addr) n : Prop := - (fun k => grants (perm_at m (shift p k)) pi) /: n. - -Record read {A} (T : layout A) - (m : mem) (p : Addr) (a : A) : Prop -:= { - valid_read :> valid Read m p (sizeof T) ; - value_read :> T a (mload m p (sizeof T)) -}. - -Record written {A} (T : layout A) - (m : mem) (p : Addr) (a : A) (v : bytes) (m' : mem) : Prop -:= { - valid_write :> valid Write m p (sizeof T) ; - value_write :> T a v ; - mem_write : m' = store m p (sizeof T) v -}. - -Definition write {A} (T : layout A) - (m : mem) (p : Addr) (a : A) (m' : mem) : Prop - := exists v, written T m p a v m'. diff --git a/src/plugins/wp/semantics/Makefile b/src/plugins/wp/semantics/Makefile deleted file mode 100644 index 32ad89fce19..00000000000 --- a/src/plugins/wp/semantics/Makefile +++ /dev/null @@ -1,23 +0,0 @@ - -.PHONY: all depend - -MODULES= Datatype Primitive Cil Pointer Machine Layout Values Typing Semantics - -INCLUDES= -I . -SOURCES=$(addsuffix .v, $(MODULES)) -OBJECTS=$(addsuffix .vo, $(MODULES)) - -all: $(OBJECTS) - -.SUFFIXES: .v .vo - -.v.vo: - coqc $(INCLUDES) $< - -depend: - coqdep $(INCLUDES) $(SOURCES) > .depend - -clean: - rm -f *~ *.vo *.glob - -sinclude .depend diff --git a/src/plugins/wp/semantics/Pointer.v b/src/plugins/wp/semantics/Pointer.v deleted file mode 100644 index 8d9ed33f991..00000000000 --- a/src/plugins/wp/semantics/Pointer.v +++ /dev/null @@ -1,41 +0,0 @@ -Require Import Datatype. -Open Scope Z_scope. - -Parameter base : Data. - -Definition Addr := Pair base Int. - -Definition shift (p : Addr) (k : Z) : Addr := ( fst p , snd p + k ). - -Definition separated p n q m := - forall i j, 0 <= i <= n -> 0 <= j <= m -> shift p i <> shift q j. - -Definition in_ptr_range (p : Addr) n q := - fst p = fst q /\ snd p <= snd q < snd p + n. - -Definition ptr_range (p:Addr) n q : decide ( in_ptr_range p n q ). -Proof. - unfold in_ptr_range. - induction (eqdec base (fst p) (fst q)) as [Eq | Neq] ; - induction (range_dec n (snd q - snd p)) ; - try (by left) ; - try (by right). -Qed. - -Definition read_at_ptr {A} (phi : Addr -> A) (p : Addr) : Z -> A - := fun k => phi (shift p k). -Infix "@" := read_at_ptr (at level 70). - -Definition copy_to_ptr {A} (phi : Z -> A) (p : Addr) : Addr -> A - := fun (q : Addr) => phi (snd q - snd p). -Infix "&" := copy_to_ptr (at level 70). - -Definition offset {A:Type} (m : Z -> A) (p:Z) := fun k => m (p+k). -Infix "<+>" := offset (at level 70). - -Definition forall_range (phi : Z -> Prop) n : Prop := forall k, 0 <= k < n -> phi k. -Infix "/:" := forall_range (at level 70). - -Definition eq_range {A : Type} n (a b : Z -> A) := (fun k => a k = b k) /: n. -Notation "a =/ n b" := (eq_range n a b) (at level 70, n at level 0). - diff --git a/src/plugins/wp/semantics/Primitive.v b/src/plugins/wp/semantics/Primitive.v deleted file mode 100644 index be075db364a..00000000000 --- a/src/plugins/wp/semantics/Primitive.v +++ /dev/null @@ -1,23 +0,0 @@ -Require Import Datatype. - -Parameter cint : Data. -Parameter cflt : Data. -Parameter char : cint. - -Parameter irange : cint -> Z -> Prop. -Parameter frange : cflt -> R -> Prop. - -Definition ptype := (cint + cflt)%type. -Definition prim := (Z + R)%type. - -Inductive prange : ptype -> prim -> Prop := - | PRIM_int : forall i x, irange i x -> prange (inl i) (inl x) - | PRIM_flt : forall f u, frange f u -> prange (inr f) (inr u). - -Parameter op : Data. -Parameter typeof_op : op -> ptype -> ptype -> ptype -> Prop. -Parameter sem_op : op -> prim -> prim -> prim -> Prop. - -Inductive prim_domain : prim -> forall {t : Type}, t -> Prop := - | DOMAIN_int : forall x, prim_domain (inl x) x - | DOMAIN_flt : forall u, prim_domain (inr u) u. diff --git a/src/plugins/wp/semantics/Semantics.v b/src/plugins/wp/semantics/Semantics.v deleted file mode 100644 index 7afa98620b4..00000000000 --- a/src/plugins/wp/semantics/Semantics.v +++ /dev/null @@ -1,77 +0,0 @@ -Require Import Datatype. -Require Import Primitive. -Require Import Cil. -Require Import Pointer. -Require Import Machine. -Require Import Values. -Require Import Typing. - -Record Compiler := { cc_env :> Gamma ; cc_link : cvar -> base }. - -Inductive sem_lval (G : Compiler) (m : mem) : lval -> Addr -> Prop := - - | Svar : forall x, - (* ----------------------------------------------- *) - sem_lval G m (Lvar x) ( G.(cc_link) x , 0 ) - - | Sshift_l : forall l t {d} (enc : layout d) p a (k:Z), - typeof_lval G l t -> - overlay m t enc -> - sem_lval G m l p -> - sem_exp G m a k -> - (* ----------------------------------------------- *) - sem_lval G m (Lshift l a) (shift p (sizeof enc * k)) - - | Sfield_s : forall l s p f k, - typeof_lval G l (Cstruct s) -> - field_offset m f k s -> - sem_lval G m l p -> - (* ----------------------------------------------- *) - sem_lval G m (Lfield l f) (shift p k) - - | Sfield_u : forall l s p f, - typeof_lval G l (Cunion s) -> - sem_lval G m l p -> - (* ----------------------------------------------- *) - sem_lval G m (Lfield l f) p - -with sem_exp (G : Compiler) (m : mem) : exp -> forall {T : Type}, T -> Prop := - - | Sem_lval : forall l t p d (enc : layout d) (v : d), - typeof_lval G l t -> - overlay m t enc -> - sem_lval G m l p -> - read enc m p v -> - (* ----------------------------------------------- *) - sem_exp G m (Lval l) v - - | Sem_addrof : forall l p, - sem_lval G m l p -> - (* ----------------------------------------------- *) - sem_exp G m (AddrOf l) p - - | Sem_shift : forall a p r {d} (enc : layout d) b k, - typeof_exp G a (Cptr r) -> - overlay m (typeof_ref G r) enc -> - sem_exp G m a p -> - sem_exp G m b k -> - (* ----------------------------------------------- *) - sem_exp G m (Shift a b) (shift p (sizeof enc * k)) - - | Sem_op : forall op a b (ta tb tc : Type) - pa (va : ta) pb (vb : tb) pc (vc : tc), - prim_domain pa va -> sem_exp G m a va -> - prim_domain pb vb -> sem_exp G m b vb -> - prim_domain pc vc -> sem_op op pa pb pc -> - (* ----------------------------------------------- *) - sem_exp G m (Op op a b) vc - -. - -Theorem sem_welltyped (G : Compiler) (m : mem) : - forall e t d (v : d), - typeof_exp G e t -> - sem_exp G m e v -> - domain t d. -Admitted. - diff --git a/src/plugins/wp/semantics/Typing.v b/src/plugins/wp/semantics/Typing.v deleted file mode 100644 index 03b960f722a..00000000000 --- a/src/plugins/wp/semantics/Typing.v +++ /dev/null @@ -1,78 +0,0 @@ -Require Import Datatype. -Require Import Primitive. -Require Import Cil. - -Record Gamma : Type := { - g_var : cvar -> ctype ; - g_type : ctypedef -> ctype -}. - -Definition typeof_ref (G : Gamma) (r : cref) : ctype := - match r with - | Rvoid => Cint char - | Rint i => Cint i - | Rflt f => Cflt f - | Rdef d => G.(g_type) d - end. - -Definition ptype (p : ptype) : ctype := - match p with - | inl i => Cint i - | inr f => Cflt f - end. - -Inductive typeof_exp (G : Gamma) : exp -> ctype -> Prop := - - | Tlval : forall l t, - typeof_lval G l t -> - (* -------------------------------------- *) - typeof_exp G (Lval l) t - - | Taddrof : forall l r, - typeof_lval G l (typeof_ref G r) -> - (* -------------------------------------- *) - typeof_exp G (AddrOf l) (Cptr r) - - | Tshift : forall p k r i, - typeof_exp G p (Cptr r) -> - typeof_exp G k (Cint i) -> - (* -------------------------------------- *) - typeof_exp G (Shift p k) (Cptr r) - - | Top : forall op a pa b pb pr, - typeof_op op pa pb pr -> - typeof_exp G a (ptype pa) -> - typeof_exp G b (ptype pb) -> - (* --------------------------------------- *) - typeof_exp G (Op op a b) (ptype pr) - -with typeof_lval (G : Gamma) : lval -> ctype -> Prop := - - | Tvar : forall x, - (* -------------------------------------- *) - typeof_lval G (Lvar x) (G.(g_var) x) - - | Tshift_l : forall l t n e i, - typeof_lval G l (Carray t n) -> - typeof_exp G e (Cint i) -> - (* -------------------------------------- *) - typeof_lval G (Lshift l e) t - - | Tfield_s : forall l s f t, - typeof_lval G l (Cstruct s) -> - bind f t s -> - (* -------------------------------------- *) - typeof_lval G (Lfield l f) t - - | Tfield_u : forall l s f t, - typeof_lval G l (Cunion s) -> - bind f t s -> - (* -------------------------------------- *) - typeof_lval G (Lfield l f) t - - | Tderef : forall p r, - typeof_exp G p (Cptr r) -> - (* -------------------------------------- *) - typeof_lval G (Lderef p) (typeof_ref G r) -. - diff --git a/src/plugins/wp/semantics/Values.v b/src/plugins/wp/semantics/Values.v deleted file mode 100644 index c85d2eb7073..00000000000 --- a/src/plugins/wp/semantics/Values.v +++ /dev/null @@ -1,109 +0,0 @@ -Require Import Datatype. -Require Import Cil. -Require Import Pointer. -Require Import Machine. -Require Import Layout. - -(** * Type Interpretation *) - -Definition Ccomp := [ cfield => ctype ]. -Definition Dcomp := [ cfield => Type ]. - -Inductive domain : ctype -> Type -> Prop := - | Dptr : forall p, domain (Cptr p) Addr - | Dint : forall i, domain (Cint i) Z - | Dflt : forall f, domain (Cflt f) R - | Darr : forall t n d, domain t d -> domain (Carray t n) (d[n]) - | Dstruct : forall s r, compound s r -> domain (Cstruct s) {[ r ]} - | Dunion : forall s r, compound s r -> domain (Cunion s) {[ r ?]} - -with compound : Ccomp -> Dcomp -> Prop := - | Dempty : compound empty empty - | Dfield : forall f t d T D, - domain t d -> - compound T D -> - compound (add f t T) (add f d D). - -(** * Type Layout *) - -Definition head_record (f : cfield) T R (r : record (add f T R)) : T * record R := - match r with - | Rempty => False - | Rfield _ _ v _ r => (v,r) - end. - -Definition struct_field (f : cfield) {T R} : - layout T -> layout (record R) -> layout (record (add f T R)) - := fun a r => interpret (head_record f T R) (concat a r). - -Definition head_union (f : cfield) T U (u : union (add f T U)) : (option T) * union U := - match u with - | Uempty => False - | Uskip _ _ _ u => (None,u) - | Ufield _ _ v _ u => (Some v,u) - end. - -Definition union_field (f : cfield) {T R} : - layout T -> layout (union R) -> layout (union (add f T R)) - := fun a r => interpret (head_union f T R) (superpose (option_layout a) r). - -Inductive overlay arch : ctype -> forall {t}, layout t -> Prop := - | Lptr : forall p, overlay arch (Cptr p) (ptr_layout arch) - | Lint : forall i, overlay arch (Cint i) (int_layout arch i) - | Lflt : forall f, overlay arch (Cflt f) (flt_layout arch f) - | Lstruct : forall s r (e : layout {[ r ]}), struct_overlay arch s e -> overlay arch (Cstruct s) e - | Lunion : forall s r (e : layout {[ r ?]}), union_overlay arch s e -> overlay arch (Cunion s) e - -with struct_overlay arch : Ccomp -> forall {r:Dcomp}, layout {[ r ]} -> Prop := - | Sempty : struct_overlay arch empty (empty_layout {[ empty ]}) - | Sfield : forall (f : cfield) t {d} (e : layout d) - T {D} (R : layout {[ D ]}), - overlay arch t e -> - struct_overlay arch T R -> - struct_overlay arch (add f t T) (struct_field f e R) - -with union_overlay arch : Ccomp -> forall {r:Dcomp}, layout {[ r ?]} -> Prop := - | Uempty : union_overlay arch empty (empty_layout {[ empty ?]}) - | Ufield : forall (f : cfield) t {d} (e : layout d) - T {D} (R : layout {[ D ?]}), - overlay arch t e -> - union_overlay arch T R -> - union_overlay arch (add f t T) (union_field f e R). - -Inductive field_offset arch : cfield -> Z -> Ccomp -> Prop := - | Ofs_field : forall f t T, field_offset arch f 0 (add f t T) - | Ofs_next : forall f k g (t : ctype) {d} (enc : layout d) T, - overlay arch t enc -> - field_offset arch f k T -> - field_offset arch f (sizeof enc + k) (add g t T). - -(** * Type and Domain Consistency *) - -Theorem overlay_domain : forall arch t d (e : layout d), overlay arch t e -> domain t d - with struct_overlay_domain : forall arch T D (R : layout {[ D ]}), struct_overlay arch T R -> compound T D - with union_overlay_domain : forall arch T D (R : layout {[ D ?]}), union_overlay arch T R -> compound T D. -Proof. -* intros. - induction H. - + apply Dptr. - + apply Dint. - + apply Dflt. - + apply Dstruct. - apply (struct_overlay_domain arch s r e). assumption. - + apply Dunion. - apply (union_overlay_domain arch s r e). assumption. -* intros. - induction H. - - apply Dempty. - - apply Dfield. - + by (apply (overlay_domain arch t d e)). - + by (apply (struct_overlay_domain arch T D R)). -* intros. - induction H. - - apply Dempty. - - apply Dfield. - + by (apply (overlay_domain arch t d e)). - + by (apply (union_overlay_domain arch T D R)). -Qed. - - diff --git a/src/plugins/wp/semantics/coqide.sh b/src/plugins/wp/semantics/coqide.sh deleted file mode 100755 index 4e20bf4b06f..00000000000 --- a/src/plugins/wp/semantics/coqide.sh +++ /dev/null @@ -1 +0,0 @@ -coqide -I . $* -- GitLab