Module KnotLemmas2.
Class Input: Type := {
knot: Type;
other: Type;
T: Type;
t0: T;
ageable_knot : ageable knot;
predicate: Type;
p2p: predicate -> (knot * other -> T);
approx : nat -> predicate -> predicate;
pred_ext : forall (p1 p2:predicate),
(forall x, p2p p1 x = p2p p2 x) ->
p1 = p2;
approx_spec : forall n p ko,
p2p (approx n p) ko =
if (le_gt_dec n (level (fst ko))) then t0 else p2p p ko
}.
Class Output (input: Input): Prop := {
approx_approx1 : forall m n,
approx n = approx n oo approx (m+n);
approx_approx2 : forall m n,
approx n = approx (m+n) oo approx n
}.

(* Specifications: *)
Lemma Proof (kli: Input): Output kli.
End KnotLemmas2.