Commit 1ce76bcc by Guillaume Melquiond

Handle implicit arguments uniformly inside Coq printer.

parent 0c9795cf
This diff is collapsed.
 ... ... @@ -7,179 +7,133 @@ Require int.Int. (* Why3 assumption *) Definition unit := unit. Parameter qtmark : Type. Parameter at1: forall (a:Type), a -> qtmark -> a. Implicit Arguments at1. Parameter old: forall (a:Type), a -> a. Implicit Arguments old. (* Why3 assumption *) Definition implb(x:bool) (y:bool): bool := match (x, y) with | (true, false) => false | (_, _) => true end. Parameter map : forall (a:Type) (b:Type), Type. Parameter get: forall (a:Type) (b:Type), (map a b) -> a -> b. Implicit Arguments get. Parameter get: forall {a:Type} {b:Type}, (map a b) -> a -> b. Parameter set: forall (a:Type) (b:Type), (map a b) -> a -> b -> (map a b). Implicit Arguments set. Parameter set: forall {a:Type} {b:Type}, (map a b) -> a -> b -> (map a b). Axiom Select_eq : forall (a:Type) (b:Type), forall (m:(map a b)), Axiom Select_eq : forall {a:Type} {b:Type}, forall (m:(map a b)), forall (a1:a) (a2:a), forall (b1:b), (a1 = a2) -> ((get (set m a1 b1) a2) = b1). Axiom Select_neq : forall (a:Type) (b:Type), forall (m:(map a b)), Axiom Select_neq : forall {a:Type} {b:Type}, forall (m:(map a b)), forall (a1:a) (a2:a), forall (b1:b), (~ (a1 = a2)) -> ((get (set m a1 b1) a2) = (get m a2)). Parameter const: forall (b:Type) (a:Type), b -> (map a b). Set Contextual Implicit. Implicit Arguments const. Unset Contextual Implicit. Parameter const: forall {a:Type} {b:Type}, b -> (map a b). Axiom Const : forall (b:Type) (a:Type), forall (b1:b) (a1:a), Axiom Const : forall {a:Type} {b:Type}, forall (b1:b) (a1:a), ((get (const b1:(map a b)) a1) = b1). (* Why3 assumption *) Inductive list (a:Type) := | Nil : list a | Cons : a -> (list a) -> list a. Set Contextual Implicit. Implicit Arguments Nil. Unset Contextual Implicit. Implicit Arguments Cons. Implicit Arguments Nil [[a]]. Implicit Arguments Cons [[a]]. (* Why3 assumption *) Set Implicit Arguments. Fixpoint length (a:Type)(l:(list a)) {struct l}: Z := Fixpoint length {a:Type}(l:(list a)) {struct l}: Z := match l with | Nil => 0%Z | (Cons _ r) => (1%Z + (length r))%Z end. Unset Implicit Arguments. Axiom Length_nonnegative : forall (a:Type), forall (l:(list a)), Axiom Length_nonnegative : forall {a:Type}, forall (l:(list a)), (0%Z <= (length l))%Z. Axiom Length_nil : forall (a:Type), forall (l:(list a)), Axiom Length_nil : forall {a:Type}, forall (l:(list a)), ((length l) = 0%Z) <-> (l = (Nil :(list a))). Parameter set1 : forall (a:Type), Type. Parameter mem: forall (a:Type), a -> (set1 a) -> Prop. Implicit Arguments mem. Parameter mem: forall {a:Type}, a -> (set1 a) -> Prop. (* Why3 assumption *) Definition infix_eqeq (a:Type)(s1:(set1 a)) (s2:(set1 a)): Prop := Definition infix_eqeq {a:Type}(s1:(set1 a)) (s2:(set1 a)): Prop := forall (x:a), (mem x s1) <-> (mem x s2). Implicit Arguments infix_eqeq. Axiom extensionality : forall (a:Type), forall (s1:(set1 a)) (s2:(set1 a)), Axiom extensionality : forall {a:Type}, forall (s1:(set1 a)) (s2:(set1 a)), (infix_eqeq s1 s2) -> (s1 = s2). (* Why3 assumption *) Definition subset (a:Type)(s1:(set1 a)) (s2:(set1 a)): Prop := forall (x:a), Definition subset {a:Type}(s1:(set1 a)) (s2:(set1 a)): Prop := forall (x:a), (mem x s1) -> (mem x s2). Implicit Arguments subset. Axiom subset_trans : forall (a:Type), forall (s1:(set1 a)) (s2:(set1 a)) Axiom subset_trans : forall {a:Type}, forall (s1:(set1 a)) (s2:(set1 a)) (s3:(set1 a)), (subset s1 s2) -> ((subset s2 s3) -> (subset s1 s3)). Parameter empty: forall (a:Type), (set1 a). Set Contextual Implicit. Implicit Arguments empty. Unset Contextual Implicit. Parameter empty: forall {a:Type}, (set1 a). (* Why3 assumption *) Definition is_empty (a:Type)(s:(set1 a)): Prop := forall (x:a), ~ (mem x s). Implicit Arguments is_empty. Definition is_empty {a:Type}(s:(set1 a)): Prop := forall (x:a), ~ (mem x s). Axiom empty_def1 : forall (a:Type), (is_empty (empty :(set1 a))). Axiom empty_def1 : forall {a:Type}, (is_empty (empty :(set1 a))). Parameter add: forall (a:Type), a -> (set1 a) -> (set1 a). Implicit Arguments add. Parameter add: forall {a:Type}, a -> (set1 a) -> (set1 a). Axiom add_def1 : forall (a:Type), forall (x:a) (y:a), forall (s:(set1 a)), Axiom add_def1 : forall {a:Type}, forall (x:a) (y:a), forall (s:(set1 a)), (mem x (add y s)) <-> ((x = y) \/ (mem x s)). Parameter remove: forall (a:Type), a -> (set1 a) -> (set1 a). Implicit Arguments remove. Parameter remove: forall {a:Type}, a -> (set1 a) -> (set1 a). Axiom remove_def1 : forall (a:Type), forall (x:a) (y:a) (s:(set1 a)), (mem x Axiom remove_def1 : forall {a:Type}, forall (x:a) (y:a) (s:(set1 a)), (mem x (remove y s)) <-> ((~ (x = y)) /\ (mem x s)). Axiom subset_remove : forall (a:Type), forall (x:a) (s:(set1 a)), Axiom subset_remove : forall {a:Type}, forall (x:a) (s:(set1 a)), (subset (remove x s) s). Parameter union: forall (a:Type), (set1 a) -> (set1 a) -> (set1 a). Implicit Arguments union. Parameter union: forall {a:Type}, (set1 a) -> (set1 a) -> (set1 a). Axiom union_def1 : forall (a:Type), forall (s1:(set1 a)) (s2:(set1 a)) (x:a), Axiom union_def1 : forall {a:Type}, forall (s1:(set1 a)) (s2:(set1 a)) (x:a), (mem x (union s1 s2)) <-> ((mem x s1) \/ (mem x s2)). Parameter inter: forall (a:Type), (set1 a) -> (set1 a) -> (set1 a). Implicit Arguments inter. Parameter inter: forall {a:Type}, (set1 a) -> (set1 a) -> (set1 a). Axiom inter_def1 : forall (a:Type), forall (s1:(set1 a)) (s2:(set1 a)) (x:a), Axiom inter_def1 : forall {a:Type}, forall (s1:(set1 a)) (s2:(set1 a)) (x:a), (mem x (inter s1 s2)) <-> ((mem x s1) /\ (mem x s2)). Parameter diff: forall (a:Type), (set1 a) -> (set1 a) -> (set1 a). Implicit Arguments diff. Parameter diff: forall {a:Type}, (set1 a) -> (set1 a) -> (set1 a). Axiom diff_def1 : forall (a:Type), forall (s1:(set1 a)) (s2:(set1 a)) (x:a), Axiom diff_def1 : forall {a:Type}, forall (s1:(set1 a)) (s2:(set1 a)) (x:a), (mem x (diff s1 s2)) <-> ((mem x s1) /\ ~ (mem x s2)). Axiom subset_diff : forall (a:Type), forall (s1:(set1 a)) (s2:(set1 a)), Axiom subset_diff : forall {a:Type}, forall (s1:(set1 a)) (s2:(set1 a)), (subset (diff s1 s2) s1). Parameter choose: forall (a:Type), (set1 a) -> a. Implicit Arguments choose. Parameter choose: forall {a:Type}, (set1 a) -> a. Axiom choose_def : forall (a:Type), forall (s:(set1 a)), (~ (is_empty s)) -> Axiom choose_def : forall {a:Type}, forall (s:(set1 a)), (~ (is_empty s)) -> (mem (choose s) s). Parameter all: forall (a:Type), (set1 a). Set Contextual Implicit. Implicit Arguments all. Unset Contextual Implicit. Axiom all_def : forall (a:Type), forall (x:a), (mem x (all :(set1 a))). Parameter cardinal: forall (a:Type), (set1 a) -> Z. Implicit Arguments cardinal. Parameter cardinal: forall {a:Type}, (set1 a) -> Z. Axiom cardinal_nonneg : forall (a:Type), forall (s:(set1 a)), Axiom cardinal_nonneg : forall {a:Type}, forall (s:(set1 a)), (0%Z <= (cardinal s))%Z. Axiom cardinal_empty : forall (a:Type), forall (s:(set1 a)), Axiom cardinal_empty : forall {a:Type}, forall (s:(set1 a)), ((cardinal s) = 0%Z) <-> (is_empty s). Axiom cardinal_add : forall (a:Type), forall (x:a), forall (s:(set1 a)), Axiom cardinal_add : forall {a:Type}, forall (x:a), forall (s:(set1 a)), (~ (mem x s)) -> ((cardinal (add x s)) = (1%Z + (cardinal s))%Z). Axiom cardinal_remove : forall (a:Type), forall (x:a), forall (s:(set1 a)), Axiom cardinal_remove : forall {a:Type}, forall (x:a), forall (s:(set1 a)), (mem x s) -> ((cardinal s) = (1%Z + (cardinal (remove x s)))%Z). Axiom cardinal_subset : forall (a:Type), forall (s1:(set1 a)) (s2:(set1 a)), Axiom cardinal_subset : forall {a:Type}, forall (s1:(set1 a)) (s2:(set1 a)), (subset s1 s2) -> ((cardinal s1) <= (cardinal s2))%Z. Axiom cardinal1 : forall (a:Type), forall (s:(set1 a)), Axiom cardinal1 : forall {a:Type}, forall (s:(set1 a)), ((cardinal s) = 1%Z) -> forall (x:a), (mem x s) -> (x = (choose s)). Parameter nth: forall (a:Type), Z -> (set1 a) -> a. Implicit Arguments nth. Parameter nth: forall {a:Type}, Z -> (set1 a) -> a. Axiom nth_injective : forall (a:Type), forall (s:(set1 a)) (i:Z) (j:Z), Axiom nth_injective : forall {a:Type}, forall (s:(set1 a)) (i:Z) (j:Z), ((0%Z <= i)%Z /\ (i < (cardinal s))%Z) -> (((0%Z <= j)%Z /\ (j < (cardinal s))%Z) -> (((nth i s) = (nth j s)) -> (i = j))). Axiom nth_surjective : forall (a:Type), forall (s:(set1 a)) (x:a), (mem x Axiom nth_surjective : forall {a:Type}, forall (s:(set1 a)) (x:a), (mem x s) -> exists i:Z, ((0%Z <= i)%Z /\ (i < (cardinal s))%Z) -> (x = (nth i s)). ... ... @@ -202,38 +156,34 @@ Axiom s_in_graph : (mem s vertices). Axiom vertices_cardinal_pos : (0%Z < (cardinal vertices))%Z. (* Why3 assumption *) Set Implicit Arguments. Fixpoint infix_plpl (a:Type)(l1:(list a)) (l2:(list a)) {struct l1}: (list Fixpoint infix_plpl {a:Type}(l1:(list a)) (l2:(list a)) {struct l1}: (list a) := match l1 with | Nil => l2 | (Cons x1 r1) => (Cons x1 (infix_plpl r1 l2)) end. Unset Implicit Arguments. Axiom Append_assoc : forall (a:Type), forall (l1:(list a)) (l2:(list a)) Axiom Append_assoc : forall {a:Type}, forall (l1:(list a)) (l2:(list a)) (l3:(list a)), ((infix_plpl l1 (infix_plpl l2 l3)) = (infix_plpl (infix_plpl l1 l2) l3)). Axiom Append_l_nil : forall (a:Type), forall (l:(list a)), ((infix_plpl l Axiom Append_l_nil : forall {a:Type}, forall (l:(list a)), ((infix_plpl l (Nil :(list a))) = l). Axiom Append_length : forall (a:Type), forall (l1:(list a)) (l2:(list a)), Axiom Append_length : forall {a:Type}, forall (l1:(list a)) (l2:(list a)), ((length (infix_plpl l1 l2)) = ((length l1) + (length l2))%Z). (* Why3 assumption *) Set Implicit Arguments. Fixpoint mem1 (a:Type)(x:a) (l:(list a)) {struct l}: Prop := Fixpoint mem1 {a:Type}(x:a) (l:(list a)) {struct l}: Prop := match l with | Nil => False | (Cons y r) => (x = y) \/ (mem1 x r) end. Unset Implicit Arguments. Axiom mem_append : forall (a:Type), forall (x:a) (l1:(list a)) (l2:(list a)), Axiom mem_append : forall {a:Type}, forall (x:a) (l1:(list a)) (l2:(list a)), (mem1 x (infix_plpl l1 l2)) <-> ((mem1 x l1) \/ (mem1 x l2)). Axiom mem_decomp : forall (a:Type), forall (x:a) (l:(list a)), (mem1 x l) -> Axiom mem_decomp : forall {a:Type}, forall (x:a) (l:(list a)), (mem1 x l) -> exists l1:(list a), exists l2:(list a), (l = (infix_plpl l1 (Cons x l2))). (* Why3 assumption *) ... ... @@ -248,8 +198,8 @@ Axiom path_right_extension : forall (x:vertex) (y:vertex) (z:vertex) (l:(list Axiom path_right_inversion : forall (x:vertex) (z:vertex) (l:(list vertex)), (path x l z) -> (((x = z) /\ (l = (Nil :(list vertex)))) \/ exists y:vertex, exists lqt:(list vertex), (path x lqt y) /\ ((edge y z) /\ (l = (infix_plpl lqt (Cons y (Nil :(list vertex))))))). exists y:vertex, exists l':(list vertex), (path x l' y) /\ ((edge y z) /\ (l = (infix_plpl l' (Cons y (Nil :(list vertex))))))). Axiom path_trans : forall (x:vertex) (y:vertex) (z:vertex) (l1:(list vertex)) (l2:(list vertex)), (path x l1 y) -> ((path y l2 z) -> (path x ... ... @@ -265,14 +215,12 @@ Axiom path_decomposition : forall (x:vertex) (y:vertex) (z:vertex) (l1:(list Parameter weight: vertex -> vertex -> Z. (* Why3 assumption *) Set Implicit Arguments. Fixpoint path_weight(l:(list vertex)) (dst:vertex) {struct l}: Z := match l with | Nil => 0%Z | (Cons x Nil) => (weight x dst) | (Cons x ((Cons y _) as r)) => ((weight x y) + (path_weight r dst))%Z end. Unset Implicit Arguments. Axiom path_weight_right_extension : forall (x:vertex) (y:vertex) (l:(list vertex)), ((path_weight (infix_plpl l (Cons x (Nil :(list vertex)))) ... ... @@ -344,8 +292,8 @@ Axiom long_path_decomposition : forall (l:(list vertex)) (v:vertex), (path s l3))))))). Axiom simple_path : forall (v:vertex) (l:(list vertex)), (path s l v) -> exists lqt:(list vertex), (path s lqt v) /\ ((length lqt) < (cardinal vertices))%Z. exists l':(list vertex), (path s l' v) /\ ((length l') < (cardinal vertices))%Z. (* Why3 assumption *) Definition negative_cycle(v:vertex): Prop := (mem v vertices) /\ ... ... @@ -398,14 +346,13 @@ Axiom Total : forall (x:t) (y:t), (le x y) \/ (le y x). (* Why3 assumption *) Inductive ref (a:Type) := | mk_ref : a -> ref a. Implicit Arguments mk_ref. Implicit Arguments mk_ref [[a]]. (* Why3 assumption *) Definition contents (a:Type)(v:(ref a)): a := Definition contents {a:Type}(v:(ref a)): a := match v with | (mk_ref x) => x end. Implicit Arguments contents. (* Why3 assumption *) Definition t1 (a:Type) := (ref (set1 a)). ... ... @@ -460,7 +407,7 @@ unfold le, add1. right; ae. intros h _. absurd ((length (Cons v0 l) <= 0)%Z); auto. unfold length; fold length. unfold length; fold @length. generalize (length_nonneg _ l). omega. clear n hn. intros n hn IH. ... ... @@ -468,7 +415,7 @@ intros vi l hl hpath. destruct (path_right_inversion v vi l hpath) as [(eq1,eq2)|(y,(l',(y1,(y2,y3))))]. subst; simpl. ae. assert (hl': (length l = length l' + 1)%Z). generalize (Append_length _ l' (Cons y Nil)). generalize (Append_length l' (Cons y Nil)). ae. subst l. rewrite path_weight_right_extension. rewrite hl' in hl. clear hl'. ... ...
 ... ... @@ -2,68 +2,40 @@ (* Beware! Only edit allowed sections below *) Require Import ZArith. Require Import Rbase. Definition unit := unit. Parameter mark : Type. Parameter at1: forall (a:Type), a -> mark -> a. Implicit Arguments at1. Parameter old: forall (a:Type), a -> a. Implicit Arguments old. Axiom Max_is_ge : forall (x:Z) (y:Z), (x <= (Zmax x y))%Z /\ (y <= (Zmax x y))%Z. Axiom Max_is_some : forall (x:Z) (y:Z), ((Zmax x y) = x) \/ ((Zmax x y) = y). Axiom Min_is_le : forall (x:Z) (y:Z), ((Zmin x y) <= x)%Z /\ ((Zmin x y) <= y)%Z. Axiom Min_is_some : forall (x:Z) (y:Z), ((Zmin x y) = x) \/ ((Zmin x y) = y). Axiom Max_x : forall (x:Z) (y:Z), (y <= x)%Z -> ((Zmax x y) = x). Axiom Max_y : forall (x:Z) (y:Z), (x <= y)%Z -> ((Zmax x y) = y). Require int.Int. Require int.MinMax. Axiom Min_x : forall (x:Z) (y:Z), (x <= y)%Z -> ((Zmin x y) = x). Axiom Min_y : forall (x:Z) (y:Z), (y <= x)%Z -> ((Zmin x y) = y). Axiom Max_sym : forall (x:Z) (y:Z), (y <= x)%Z -> ((Zmax x y) = (Zmax y x)). Axiom Min_sym : forall (x:Z) (y:Z), (y <= x)%Z -> ((Zmin x y) = (Zmin y x)). (* Why3 assumption *) Definition unit := unit. (* Why3 assumption *) Inductive list (a:Type) := | Nil : list a | Cons : a -> (list a) -> list a. Set Contextual Implicit. Implicit Arguments Nil. Unset Contextual Implicit. Implicit Arguments Cons. Implicit Arguments Nil [[a]]. Implicit Arguments Cons [[a]]. Set Implicit Arguments. Fixpoint length (a:Type)(l:(list a)) {struct l}: Z := (* Why3 assumption *) Fixpoint length {a:Type}(l:(list a)) {struct l}: Z := match l with | Nil => 0%Z | Cons _ r => (1%Z + (length r))%Z | Nil => 0%Z | (Cons _ r) => (1%Z + (length r))%Z end. Unset Implicit Arguments. Axiom Length_nonnegative : forall (a:Type), forall (l:(list a)), Axiom Length_nonnegative : forall {a:Type}, forall (l:(list a)), (0%Z <= (length l))%Z. Axiom Length_nil : forall (a:Type), forall (l:(list a)), ((length l) = 0%Z) <-> (l = (Nil:(list a))). Axiom Length_nil : forall {a:Type}, forall (l:(list a)), ((length l) = 0%Z) <-> (l = (Nil :(list a))). Parameter char : Type. (* Why3 assumption *) Definition word := (list char). (* Why3 assumption *) Inductive dist : (list char) -> (list char) -> Z -> Prop := | dist_eps : (dist (Nil:(list char)) (Nil:(list char)) 0%Z) | dist_eps : (dist (Nil :(list char)) (Nil :(list char)) 0%Z) | dist_add_left : forall (w1:(list char)) (w2:(list char)) (n:Z), (dist w1 w2 n) -> forall (a:char), (dist (Cons a w1) w2 (n + 1%Z)%Z) | dist_add_right : forall (w1:(list char)) (w2:(list char)) (n:Z), (dist w1 ... ... @@ -71,9 +43,83 @@ Inductive dist : (list char) -> (list char) -> Z -> Prop := | dist_context : forall (w1:(list char)) (w2:(list char)) (n:Z), (dist w1 w2 n) -> forall (a:char), (dist (Cons a w1) (Cons a w2) n). (* Why3 assumption *) Definition min_dist(w1:(list char)) (w2:(list char)) (n:Z): Prop := (dist w1 w2 n) /\ forall (m:Z), (dist w1 w2 m) -> (n <= m)%Z. (* Why3 assumption *) Fixpoint infix_plpl {a:Type}(l1:(list a)) (l2:(list a)) {struct l1}: (list a) := match l1 with | Nil => l2 | (Cons x1 r1) => (Cons x1 (infix_plpl r1 l2)) end. Axiom Append_assoc : forall {a:Type}, forall (l1:(list a)) (l2:(list a)) (l3:(list a)), ((infix_plpl l1 (infix_plpl l2 l3)) = (infix_plpl (infix_plpl l1 l2) l3)). Axiom Append_l_nil : forall {a:Type}, forall (l:(list a)), ((infix_plpl l (Nil :(list a))) = l). Axiom Append_length : forall {a:Type}, forall (l1:(list a)) (l2:(list a)), ((length (infix_plpl l1 l2)) = ((length l1) + (length l2))%Z). (* Why3 assumption *) Fixpoint mem {a:Type}(x:a) (l:(list a)) {struct l}: Prop := match l with | Nil => False | (Cons y r) => (x = y) \/ (mem x r) end. Axiom mem_append : forall {a:Type}, forall (x:a) (l1:(list a)) (l2:(list a)), (mem x (infix_plpl l1 l2)) <-> ((mem x l1) \/ (mem x l2)). Axiom mem_decomp : forall {a:Type}, forall (x:a) (l:(list a)), (mem x l) -> exists l1:(list a), exists l2:(list a), (l = (infix_plpl l1 (Cons x l2))). (* Why3 assumption *) Fixpoint last_char(a:char) (u:(list char)) {struct u}: char := match u with | Nil => a | (Cons c u') => (last_char c u') end. (* Why3 assumption *) Fixpoint but_last(a:char) (u:(list char)) {struct u}: (list char) := match u with | Nil => (Nil :(list char)) | (Cons c u') => (Cons a (but_last c u')) end. Axiom first_last_explicit : forall (u:(list char)) (a:char), ((infix_plpl (but_last a u) (Cons (last_char a u) (Nil :(list char)))) = (Cons a u)). Axiom first_last : forall (a:char) (u:(list char)), exists v:(list char), exists b:char, ((infix_plpl v (Cons b (Nil :(list char)))) = (Cons a u)) /\ ((length v) = (length u)). Axiom key_lemma_right : forall (w1:(list char)) (w'2:(list char)) (m:Z) (a:char), (dist w1 w'2 m) -> forall (w2:(list char)), (w'2 = (Cons a w2)) -> exists u1:(list char), exists v1:(list char), exists k:Z, (w1 = (infix_plpl u1 v1)) /\ ((dist v1 w2 k) /\ ((k + (length u1))%Z <= (m + 1%Z)%Z)%Z). Axiom dist_symetry : forall (w1:(list char)) (w2:(list char)) (n:Z), (dist w1 w2 n) -> (dist w2 w1 n). Axiom key_lemma_left : forall (w1:(list char)) (w2:(list char)) (m:Z) (a:char), (dist (Cons a w1) w2 m) -> exists u2:(list char), exists v2:(list char), exists k:Z, (w2 = (infix_plpl u2 v2)) /\ ((dist w1 v2 k) /\ ((k + (length u2))%Z <= (m + 1%Z)%Z)%Z). Axiom dist_concat_left : forall (u:(list char)) (v:(list char)) (w:(list char)) (n:Z), (dist v w n) -> (dist (infix_plpl u v) w ((length u) + n)%Z). Axiom dist_concat_right : forall (u:(list char)) (v:(list char)) (w:(list char)) (n:Z), (dist v w n) -> (dist v (infix_plpl u w) ((length u) + n)%Z). Axiom min_dist_equal : forall (w1:(list char)) (w2:(list char)) (a:char) (n:Z), (min_dist w1 w2 n) -> (min_dist (Cons a w1) (Cons a w2) n). ... ... @@ -83,84 +129,77 @@ Axiom min_dist_diff : forall (w1:(list char)) (w2:(list char)) (a:char) ((Zmin m p) + 1%Z)%Z))). Axiom min_dist_eps : forall (w:(list char)) (a:char) (n:Z), (min_dist w (Nil:(list char)) n) -> (min_dist (Cons a w) (Nil:(list char)) (Nil :(list char)) n) -> (min_dist (Cons a w) (Nil :(list char)) (n + 1%Z)%Z). Axiom min_dist_eps_length : forall (w:(list char)), (min_dist (Nil:(list Axiom min_dist_eps_length : forall (w:(list char)), (min_dist (Nil :(list char)) w (length w)). (* Why3 assumption *) Inductive ref (a:Type) := | mk_ref : a -> ref a.