/-! Tests for `partial_fixpoint` with explicit proofs -/ /-- warning: declaration uses 'sorry' -/ #guard_msgs in def nullary (x : Nat) : Option Unit := nullary (x + 1) partial_fixpoint monotonicity sorry -- Check for metavariables set_option pp.mvars.anonymous false in /-- error: don't know how to synthesize placeholder for argument 'a' context: ⊢ Lean.Order.monotone fun f x => f (x + 1) -/ #guard_msgs in def nullarya (x : Nat) : Option Unit := nullarya (x + 1) partial_fixpoint monotonicity id _ def nullaryb (x : Nat) : Option Unit := nullaryb (x + 1) partial_fixpoint monotonicity fun _ _ a _ => a _ /-- info: nullaryb.eq_1 (x : Nat) : nullaryb x = nullaryb (x + 1) -/ #guard_msgs in #check nullaryb.eq_1 -- Type error /-- error: type mismatch () has type Unit : Type but is expected to have type Lean.Order.monotone fun f x => f (x + 1) : Prop -/ #guard_msgs in def nullary2 (x : Nat) : Option Unit := nullary2 (x + 1) partial_fixpoint monotonicity () -- Good indent (bad indents are tested in partial_fixpoint_parseerrors def nullary4 (x : Nat) : Option Unit := nullary4 (x + 1) partial_fixpoint monotonicity fun _ _ a x => a (x + 1) -- Tactics /-- info: Try this: exact fun x y a x => a (x + 1) -/ #guard_msgs in def nullary6 (x : Nat) : Option Unit := nullary6 (x + 1) partial_fixpoint monotonicity by exact? #guard_msgs in def nullary7 (x : Nat) : Option Unit := nullary7 (x + 1) partial_fixpoint monotonicity by apply Lean.Order.monotone_of_monotone_apply intro y apply Lean.Order.monotone_apply apply Lean.Order.monotone_id